PDA

View Full Version : تاپیک مخصوص EJB



handinux
سه شنبه 23 بهمن 1386, 14:57 عصر
سلام به تمامی دوستان در برنامه نویس خصوصا جاوا کارهای محترم در فروم.
مدتی ست که پس از فهمیدن مفاهیم بنیادی جاوا و نگارش استاندارد می خوام برم به سمت j2ee که دوستان متخصص عزیزم می دونند که ejb یکی از مهمترین مباحث این بخش هست من در سایت جستجو کردم اما آنچه که بتواند این مفهوم را دقیقا شرح دهد پیدا نکردم و چیزهایی که بود فقط ترجمه (آنهم به صورت نا مفهوم) از بحث بود. از منابع خارجی که اتفاقا زیاد هم هست چیزی نفهمیدم . و به نظرم این تاپیک می تواند تبدیل به یک مرجع فارسی برایش بشود.از تمامی دوستانی که تجربه دارن و مدیران خواهش می کنم خیلی خیلی ساده توضیح بدن راجع بهش .لازمه بگم که منظور آوردن مثال با سورس کد در همان ابتدا نیست ! اگرچه لازم است! می خوام مفهوم EJB خیلی ساده توضیح داده بشه و مزایاش گفته بشه بعد ان شاالله بریم سراغ نمونه.در واقع می خوایم فلسفه EJB توضیح داده بشه.فکر می کنم خیلی مفید باشه.پیشاپیش ممنونم از شما..

javaphantom
سه شنبه 23 بهمن 1386, 16:25 عصر
EJB مجموعه ای از چند فایل جاوای که در نهایت تشکیل یک مولفه یا component می کند. وقتی صحبت از componet می کنیم اون موقع باید صحبت از برنامه نویسی کامپونتی نیز بکنیم. تعریف کامپونت چیه؟ واقعا componet هم مانند تعریف object در دهه های 70 تا 80 امروزه بسیار سخت و نا مفهوم به نظر می رسه اما به زبان ساده می شه اینطور تعریف کرد که کامپونت مجموعه ای از چند object هست که به محیط خارج از خودش هیچ وابستگی نداره. شما در زبانهای visual بسیار از این کامپونت ها استفاده کرده این مسله JButton یک کامپونت هست که از چندین object مختلف یا حتی کامپونتهای دیگه استفاده شده ولی موجودیت جداگانه برای خودش داره. ejb هم همانطور که گفته شد مجموعه ای از چند محصول مختلف جاوایی یا همان object های جاواست. صحبت از این همه object توی هم باشه ولی مدیریت نداشته باشیم ؟ این کامپونت ها همه در قسمت server اجرا می شن پس نیاز به یک نرم افزار دیگه داریم تا مدیریت فرایند تولید و چیدمان این کامپونت ها را بر عهده داشته باشه. دقیقا ما ظرفی در قسمت سرور می خوایم که این کامپوننت ها درون اون بریزیم تا اون بتونه طول عمر و نحوه گردش این کامپونت ها رو مدیریت می کند که به آن ejb Container می گویند. این تکنولوژی در حال حاضر برای ایجاد برنامه های سازمانی یا همان Enterprise بسیار استفاده می شود تازه تمام تکنولوژی های قبل خودشم از جمله CORBA رو نیز پشتیبانی می کند در نسخه های قبلی آن ۱.۲ تا ۲.۱ این تکنولوژی بسیار پیچیدگی های خاصه حودشرو داشت در نتیجه شرکت های مختلف شروع به ساختن framework هایی کردند که بتواند برای تولید این نوع کامپونت ها بسیار سریع عمل کنه اما خوب استاندارد برای سان نبود از جمله struts , spring با اومدن آخرین نسخه آن یعنی ejb3 دیگر این مشکلات هم حل شد. ejb3 با شعار POJO Plain Old Java Object و همچنین با کمک annotation که جای گزین فایلهای عظیم xml شد دیگر واقعا کار را بسیار آسان کرد و هشتداری بود برای framework بازها.

saeed_Z_F
سه شنبه 23 بهمن 1386, 18:57 عصر
سلام
در مورد annotation یک نکته بگم که با وجود آسان سازی توسعه با استفاده از annotation یکی از ضعف های آن که باعث شده هنوز خیلی از xml در EJB استفاده کنند اینه که :
کدی که با annotation نوشته میشه با meta data ی خود گره میخوره و اگر شما کلاس رو کامپایل کنی و نخواهید دوباره کد کلاس رو کامپایل کنید reuse ability پایین میاد .
ولی اگر از xml استفاده کنید چون meta data از کد کلاس جدا هست reuse ability بالاتره .

handinux
سه شنبه 23 بهمن 1386, 20:54 عصر
از هر دو شما تشکر می کنم.خب من راجع به Bean ها می دونستم اما اینکه چطور در jee استفاده می شن چیزی نمیدونم بچه ها.این از این مرحله.حالا لطف کنید و یه مثال(نه سورس کد)از کاربرد آن بزنید.یک مثال نموداری یا بهتر بگم روند کار که استفاده از EJB مفهوم بشه.یعنی توی این مثال مفاهیمی مثل Container و یا چرخه حیات و هر چیزی که لازم هست و باید دونسته بشه ...دست شما درد نکنه

javaphantom
چهارشنبه 24 بهمن 1386, 09:29 صبح
سلام
در مورد annotation یک نکته بگم که با وجود آسان سازی توسعه با استفاده از annotation یکی از ضعف های آن که باعث شده هنوز خیلی از xml در EJB استفاده کنند اینه که :
کدی که با annotation نوشته میشه با meta data ی خود گره میخوره و اگر شما کلاس رو کامپایل کنی و نخواهید دوباره کد کلاس رو کامپایل کنید reuse ability پایین میاد .
ولی اگر از xml استفاده کنید چون meta data از کد کلاس جدا هست reuse ability بالاتره .



خیلی ها کیا هستند؟ این آمار رو از کجا آوردین؟

annotation خودش metadata هست . حالا اصلا metadata چیه؟ با metadata خودش گره خورده یعنی چی؟
اول از همه، استفاده از descriptor یا همان xml فایلها در ejb3 بصورت optional هست یعنی شما بازهم می تونید xml فایل بسازید یا اگر نخواستید نسازید.
بعدشم انگیزه سان از ایجاد چنین کاری یعنی POJO و استفاده کردن از annotation بجای فایلهای عظیم xml
1 بالا بردن reusablity
2 استفاده از فریم ورک استاندارد EJB3 بجای framework های غیر استاندارد مثل spring
3 راحتی کار و قدرت بالای annotation ها بود است.

اصلا annotation چی هست؟
چه جوری توی java standard از اون استفاده کنیم؟

javaphantom
چهارشنبه 24 بهمن 1386, 12:00 عصر
از هر دو شما تشکر می کنم.خب من راجع به Bean ها می دونستم اما اینکه چطور در jee استفاده می شن چیزی نمیدونم بچه ها.این از این مرحله.حالا لطف کنید و یه مثال(نه سورس کد)از کاربرد آن بزنید.یک مثال نموداری یا بهتر بگم روند کار که استفاده از EJB مفهوم بشه.یعنی توی این مثال مفاهیمی مثل Container و یا چرخه حیات و هر چیزی که لازم هست و باید دونسته بشه ...دست شما درد نکنه

کتاب خوندن هم راه حل مناسبی هست از نظر من.
مفهوم web و web application و .... چیزهایی هستند که به این راحتی نمی شه در موردشمون صحبت کرد.
کتاب هست که می تونه مفهومی به شما ایده بده.

handinux
چهارشنبه 24 بهمن 1386, 15:24 عصر
Sams Teach Yourself J2EE in 21 Days
به نظر شما این کتاب خوب هست؟ توش از اول EJB رو هم گفته .یعنی سعی کرده همه تکنولوژِی ها رو بگه...خوبه؟
واقعا مثال نمی شه زد ؟؟!!

saeed_Z_F
چهارشنبه 24 بهمن 1386, 15:42 عصر
Sams Teach Yourself J2EE in 21 Days
به نظر شما این کتاب خوب هست؟ توش از اول EJB رو هم گفته .یعنی سعی کرده همه تکنولوژِی ها رو بگه...خوبه؟
واقعا مثال نمی شه زد ؟؟!!
سلام
چون EJB 3 تفاوت های زیادی با نسخه های قبلی داره و فرایند یادگیری در اون سریعتره به نظر من با EJB3 شروع کنی راحتتری .

handinux
چهارشنبه 24 بهمن 1386, 22:45 عصر
بسیار ممنونم.اگر لطفی کنید و منبع خوب معرفی کنید و آیا منبع بالا که گفتم مناسب نیست؟

javaphantom
پنج شنبه 25 بهمن 1386, 00:16 صبح
اگر نظر من رو بخوای من نمی گم هیچ کتابی بد هست ولی می گم یک کتاب هم کافی نیست
همه کتابها ارزش دارند و حرفهایی برای گفتن. اگر می خوای زود به نتیجه برسی از من به شما نصیحت که موفق نخواهی شد.
من قبول ندارم که این قدیمی هست و اون جدید. شما وقتی با ejb2.1 کار کنید یا حداقل یک بار بخونیش وقتی سراغ ejb3 رفتی می فهمی داستان چی بوده. البته تا حدی هم با نظر دوستامان موافق هستم که مستقیم بروید به سراغ ejb3 ولی مفهوم به هیچ عنوان تغییر نکرده.
بازم می گم این نظر شخصی من هست

handinux
پنج شنبه 25 بهمن 1386, 11:05 صبح
به هیچ وجه قصد ندارم ره صد ساله را دریک شب طی کنم.می خوام حرفه ای بشم.ممنونم.ولی یادتون باشه مثال نزدیدهاااااا !

javaphantom
پنج شنبه 25 بهمن 1386, 11:33 صبح
من کلی کتاب در مورد جاوا دارم که حتی اگر راستشم بخوای هم رو نخوندم یا از هر کدوم یک بخش خواصی رو انتخاب کردم که احساس کردم بهتر توضیح داده می دونی بعضی وقتها هم شوده که کتاب یا فصلی رو کامل خوندم ولی هنگام پیاده سازی به مشکل بر خوردم که یا دلیل رعایت نکردن پیش نیازهای اون فصل بوده یا سرسری خوندن اون بخش یا حتی توقع بیش از حد توان و تجربه اینهارو گفتم که بدونی باید درگیر بشی و عذاب بکشی اما خوب من همیشه به راهنمایی های یک آدم باتجربه اعتقاد دارم ولی کو. باید خیلی خوش شانس باشی که همچین آدم یا آدمهایی رو پیدا کنی.
لیست کتاب
MasteringEJB2
Core-Servlets-and-JSP
Sun Microsystems Enterprise JavaBeansTM,Version 3.0
Manning - Ejb 3 In Action (2007)
Wiley.Mastering.Enterprise.JavaBeans.3.0.4th.Editi on.Jul.2006
این آخری از نظر من بیشتر خوبه

sky_in_iran
چهارشنبه 01 مهر 1388, 17:41 عصر
سلام
من تو ejb3 در اجرای برنامه client به مشکل خوردم و بعد از اجرا exception میده که :Cannot connect to ORB چه جوری می تونم این مشکل و حل کنم و orb چیه ؟

javaphantom
چهارشنبه 01 مهر 1388, 22:37 عصر
سلام
من تو ejb3 در اجرای برنامه client به مشکل خوردم و بعد از اجرا exception میده که :Cannot connect to ORB چه جوری می تونم این مشکل و حل کنم و orb چیه ؟

در قسمت ست کردن properties هایی که قرار است با سرور صحبت کنه مشکل داری.

بگو از چه وب سروری استفاده می کنی و بعد ورژن ejb د نهایت کد سمت client رو بزار تا بحت بگم

sky_in_iran
پنج شنبه 02 مهر 1388, 17:26 عصر
از ejb3 استفاده می کنم سرورمم jboss-5.1.0.GA اینم کدم :



import javax.ejb.*;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import java.io.*;

public class SlessAppClient {

//private static @EJB NewSessionRemote sless;
public static void main(String args[]){
Properties props = new Properties();
props.setProperty("java.naming.factory.initial","com.sun.jndi.cosnaming.CNCtxFactory");
props.setProperty("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
props.setProperty("java.naming.provider.url", "iiop://localhost:1099");
try{
//props.load(new FileInputStream("D:\\Documents and Settings\\Tanha\\Desktop\\EJB\\EJBModule3\\build\\ jar\\ejb30\\jndi.properties"));
Context context=new InitialContext(props);
Object obj=context.lookup("ejb30.NewSessionRemote");
NewSessionRemote sless=(NewSessionRemote) obj;
System.out.println("Sless bean says : " + sless.hello());
}
catch (Exception e) {
System.out.println("Exception step : " +
" " + e.getMessage());
}
}
}

javaphantom
پنج شنبه 02 مهر 1388, 19:02 عصر
از ejb3 استفاده می کنم سرورمم jboss-5.1.0.GA اینم کدم :



import javax.ejb.*;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import java.io.*;

public class SlessAppClient {

//private static @EJB NewSessionRemote sless;
public static void main(String args[]){
Properties props = new Properties();
props.setProperty("java.naming.factory.initial","com.sun.jndi.cosnaming.CNCtxFactory");
props.setProperty("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
props.setProperty("java.naming.provider.url", "iiop://localhost:1099");
try{
//props.load(new FileInputStream("D:\\Documents and Settings\\Tanha\\Desktop\\EJB\\EJBModule3\\build\\ jar\\ejb30\\jndi.properties"));
Context context=new InitialContext(props);
Object obj=context.lookup("ejb30.NewSessionRemote");
NewSessionRemote sless=(NewSessionRemote) obj;
System.out.println("Sless bean says : " + sless.hello());
}
catch (Exception e) {
System.out.println("Exception step : " +
" " + e.getMessage());
}
}
}
java.naming.factory.initial=org.jnp.interfaces.Nam ingContextFactory
java.naming.provider.url=jnp://localhost:1099
java.naming.factory.url.pkgs=org.jboss.naming.clie nt

در قسمت setProperty اینا رو قرار بده خودت که می دونی جای مساوی باید ویرگول بزاری و و و

sky_in_iran
پنج شنبه 02 مهر 1388, 21:16 عصر
در قسمت setProperty قرار دادم اجرا کردم این بار این Exception داد:
Cannot instantiate class: org.jnp.interfaces.NamingContextFactory

sky_in_iran
جمعه 03 مهر 1388, 22:30 عصر
من برای رفع Exception : Cannot instantiate class: org.jnp.interfaces.NamingContextFactory فایل
jbossall-client.jar به library اضافه کردم Exception که گفتم رفع شد حالا باز یک Exception دیگه میده
فایل remote پیغام not bound میده این و چه جوری حل کنم ؟ در ضمن کار اولم برای رفع Cannot instantiate class درست بوده ؟

javaphantom
شنبه 04 مهر 1388, 14:35 عصر
من برای رفع Exception : Cannot instantiate class: org.jnp.interfaces.NamingContextFactory فایل
jbossall-client.jar به library اضافه کردم Exception که گفتم رفع شد حالا باز یک Exception دیگه میده
فایل remote پیغام not bound میده این و چه جوری حل کنم ؟ در ضمن کار اولم برای رفع Cannot instantiate class درست بوده ؟


مهندس من نیاز به این دارم که شما کامل exception رو برام بفرسی. تا من بتونم کمکت کنم.
در مورد قسمت اول درست رفتی حتما jar فایلش به classpath شما معرفی نشده بوده که شما معرفی کردین. در مورد این یکی هم باید همین اتفاق افتاده باشد. یا اگر ممکنه همه exceptionرو یک زحمتی بکش copy - paste کن. دست درد نکنه.
شاید wep appet داره روی یک port دیگه listen می کنه تنظیمات jboss رو چک کن.

sky_in_iran
شنبه 04 مهر 1388, 19:50 عصر
استاد من چک کردم portam رو 1099 بعد IP رو localhost هست exception اینه :

Exception in thread "main" javax.naming.NameNotFoundException: EjbtestBean not bound
at org.jnp.server.NamingServer.getBinding(NamingServe r.java:529)
at org.jnp.server.NamingServer.getBinding(NamingServe r.java:537)
at org.jnp.server.NamingServer.getObject(NamingServer .java:543)
at org.jnp.server.NamingServer.lookup(NamingServer.ja va:267)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Nativ e Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Native MethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(De legatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastSe rverRef.java:294)
at sun.rmi.transport.Transport$1.run(Transport.java:1 53)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport. java:149)
at sun.rmi.transport.tcp.TCPTransport.handleMessages( TCPTransport.java:466)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandl er.run(TCPTransport.java:707)
at java.lang.Thread.run(Thread.java:595)
at sun.rmi.transport.StreamRemoteCall.exceptionReceiv edFromServer(StreamRemoteCall.java:247)
at sun.rmi.transport.StreamRemoteCall.executeCall(Str eamRemoteCall.java:223)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:1 26)
at org.jnp.server.NamingServer_Stub.lookup(Unknown Source)
at org.jnp.interfaces.NamingContext.lookup(NamingCont ext.java:625)
at org.jnp.interfaces.NamingContext.lookup(NamingCont ext.java:587)
at javax.naming.InitialContext.lookup(InitialContext. java:351)
at Test.client.main(client.java:25)

javaphantom
یک شنبه 05 مهر 1388, 09:34 صبح
استاد من چک کردم portam رو 1099 بعد IP رو localhost هست exception اینه :

Exception in thread "main" javax.naming.NameNotFoundException: EjbtestBean not bound
at org.jnp.server.NamingServer.getBinding(NamingServe r.java:529)
at org.jnp.server.NamingServer.getBinding(NamingServe r.java:537)
at org.jnp.server.NamingServer.getObject(NamingServer .java:543)
at org.jnp.server.NamingServer.lookup(NamingServer.ja va:267)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Nativ e Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Native MethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(De legatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastSe rverRef.java:294)
at sun.rmi.transport.Transport$1.run(Transport.java:1 53)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport. java:149)
at sun.rmi.transport.tcp.TCPTransport.handleMessages( TCPTransport.java:466)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandl er.run(TCPTransport.java:707)
at java.lang.Thread.run(Thread.java:595)
at sun.rmi.transport.StreamCall.exceptionReceivedFrom Server(StreamRemoteCall.java:247)
at sun.rmi.transport.StreamRemoteCall.executeCall(Str eamRemoteCall.java:223)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:1 26)
at org.jnp.server.NamingServer_Stub.lookup(Unknown Source)
at org.jnp.interfaces.NamingContext.lookup(NamingCont ext.java:625)
at org.jnp.interfaces.NamingContext.lookup(NamingCont ext.java:587)
at javax.naming.InitialContext.lookup(InitialContext. java:351)
at Test.client.main(client.java:25)


الان داستان اینکه آدرس ejbbean رو داری اشتباه می فرسی براش

سوال : ejb bean تو stateless هست یا stateful
آیا local هست یا remote

احتمال می دم که remote باشه و stateless باشه

تا اونجا که یادم توی jboss وقتی داره توی context داری object رو می گیری باید به این فرم صدا به beanName/remote
اگر local باشه beanName/local
برای کار تو این جوری می شه ejb30/NewSessionRemote/remote

در ضمن استاد خودتی

sky_in_iran
دوشنبه 06 مهر 1388, 15:38 عصر
بله Stateless و Remote هستش . تو context همینی که شما می فرمایید و گذارشتم اما هر چی میذارام not bound میده مثلا اگه ejb30 یا remote یا bean فرقی نداره به هر سه exception میده لازم نیست تنظیم خاصی تو jboos انجام بدم ؟ یا کاره خاصی یا فایل خاصی یا xml خاصی نمی دونم نیازی به اینا هست ؟ اگه یک project نمونه کوچیک داری بزاری ببینم ممنون میشم .! ("اینم بگم اگه من مهندسم شمام استادی") ممنون استاد

javaphantom
دوشنبه 06 مهر 1388, 21:07 عصر
بله Stateless و Remote هستش . تو context همینی که شما می فرمایید و گذارشتم اما هر چی میذارام not bound میده مثلا اگه ejb30 یا remote یا bean فرقی نداره به هر سه exception میده لازم نیست تنظیم خاصی تو jboos انجام بدم ؟ یا کاره خاصی یا فایل خاصی یا xml خاصی نمی دونم نیازی به اینا هست ؟ اگه یک project نمونه کوچیک داری بزاری ببینم ممنون میشم .! ("اینم بگم اگه من مهندسم شمام استادی") ممنون استاد


به جان عزیزت نه وقتشرو دارم نه حالش ولی تو اون jar فایل همراه با source بزار اینجا تا ببینم چه کردی . شاید سریع بشه درستش کرد :چشمک:
خیلی درگیرم به خدا ولی تو بزار. بدم نیست بلکه یکی دیگه هم پیدا بشه کمک کنه.
توی این فروم کمتر کسی مثل تو پیدا می شه. شاید سالی یکی. مردم بس که مزخرف دیدم توی این سایت حالا یکی مثل تو پیدا شده دست خالی سعی می کنم نره

amin-sadeghi
سه شنبه 07 مهر 1388, 11:34 صبح
سلام دوست عزیز
در مورد annotation باید بگم که با نظر javaphantom موافقم.در مورد کتابی که معرفی کردی باید بگم که تمام کتاب هایی که به این صورت است (XXX in 21 days) بدرد شما نمی خوره. من پیشنهاد می کنم از کتاب های زیر استفاده کنی:
Manning EJB3 in Action Apr 2007
Enterprise JavaBeans 3.0 5th Ed 2006
می تونی این کتاب ها رو در سایت www.4shared.com (http://www.4shared.com/) جستجو و دانلود کنی.
اینم کلی مثال با دستورالعمل که برای کتاب اولیه:(البته با اجازه استاد)
www.manning.com/panda (http://www.manning.com/panda)
مثال هاشو دانلود کن.برای سرور های متفاوت مثال گذاشته.

sky_in_iran
پنج شنبه 09 مهر 1388, 12:14 عصر
دستت درد نکنه استاد ممنون میشم یه نگاه بندازی و راهنمایی کنی خیلی به این موضوع نیاز دارم منتظره پاسخ شما هستم بازم سپاسگزارم

javaphantom
جمعه 10 مهر 1388, 12:03 عصر
فایل client رو از jar فایل بیارش بیرون و خارج از container اجراش کن نیازی نیست که توی jar فایلت باشه

sky_in_iran
شنبه 11 مهر 1388, 22:09 عصر
:ناراحت:ستاد کاری که فرمودی و انجام دادم اما بازم همون پیغام not bound میده نمیدونم اشکالم کجاست یا کجارو اشتباه دارم میرم اما این برنامه رو تو jboss 5.1 اجرا کردم client از container بیرون آوردم پیغامش شد java.lang.Exception: No runnable methods + Test client FAILED اما تو jboss 4.2 پیغام not bound میده چه کنم یه ماه بیشتره درگیرم از کجا می تونم یه project اماده بردارم تست کنم ؟؟؟؟؟؟؟؟؟
خیلی لازم دارم لطفا کمک کنید استاد!!!!!!!؟؟؟؟؟؟؟؟؟؟؟

javaphantom
سه شنبه 14 مهر 1388, 23:49 عصر
این عذابی که داری می کشی برای من یادآور خاطرات چند سال پیشم می شه که داستانی بس دراز دارد. اما دیگه منو مجبور کردی که دست به کد بشم و یک مثال خیلی کوچیک برات درست کنم که در آخر کار یک jar فایل به تو می دم که باید اینو بندازیش توی ejb container ت یعنی اینکه deploy کنیش تا واقعا ببینی داستان در عمل چیه.
اما چند نکته که من توی خونه و روی laptopم متاسفانه JBOSS نداشتم ولی با glassfish تست کردم و چون نتیجه کار اساندارد هست پس باید روی هر ejb containerی deploy بشه.
اما در قسمت client باید اینو بهت بگم که داستان jndi properties فرق می کنه یعنی برای jboss یک چیز و برای glassfish چیزه دیگه تعریف شده. ولی اینها مهم نیست مهم اینه که تو بتونی درست deploy کنی همین.

قبل از هر چیز می رم سراغ چند concept مهم توی ejb که می دونم تو بلدی و استاد هستی توش ولی می گم که بدونی دارم درسم رو به تو پس می دم و یک یادآوری بشه برای بقیه استاتید این فروم که بد نیست.

EJB container یک ظرف هست که فقط ejb ها رو می شناسه که کارشون چیه business های خیلی پیچیده رو یا نه ممکنه پیچده هم نباش رو مدیریت می کنه. مثل servlet container که فقط کارش اینه که از servlet ها مراقبت و مدیریت کنه. حالا ما وقتی می خواهیم با servlet صحبت کنیم بایک protocol به نام Http صداشون می کنیم یعنی مثل اینکه می خواهیم توی windows بگیم مثلا c:\myfolder\runme.exe در قسمت آدرس بار یک browser با این ترتیب عمل می کنیم که با protocol ی که Http هست برو به فلان سرور با یک آدرس port و بعد برو فلان servlet یا فرقی نداره فلان jsp که منظور همان servlet هست برو برام بیار.

خوب الان همه کاربرها چه با سواد چه بی سواد این کارهارو انجام می دن اما در اصل پشت ماجرا داستان چیزه دیگست.
داستان در حالت کلی به دوقسمت یا دو concept اصلی تبدیل شده
یک remote
دو address naming
اولی یعنی اینکه با توی windows تو فایل اجرایی رو داری توی کامپیوترت آدرس می دی مثلا و تو وب که داستان این نیست داری از یک کامپیوتر دیگه تقاضا می کنی اینجا به این عمل می کن داری remote می زنی. RMI در جاوا یعنی اینکه از یک JVM با یک JVM دیگه رابطه داشته باشی و بتونی از او JVM هر object ی که بخوای بر داری بیاری توی jvm خودت.
خوب object ها که بدون اسم نمی شن اینجاست که باید بری سراغ اسم object و تقاضا کنی بگی بیا بابا اینجا مثل وب پس بحث JNDI یا java name and directory بوجود می آیاد.

بر گردیم سراغ ejb حالا دقیق این داستانها در ejb هم همینه. اما چه جوری. تو می ری اون object هایی که قرار بقیه از بیرون بیان صداشون کنن رو درست می کنی یکی یک اسمم بهشون می دی می ندازیش توی ejb container یعنی deploy می کنی این container گوش بزنگه کی چی می خواد کی کی می خواد و و و و.

داستان اینه که یک interface درست می کنی که هم باید client و هم server داشته باشه.
بعد توی قسمت server هر کی هر جور که دوست داره می یاد اون interface رو implement می کنه بعد یک اسم هم بهش می ده یکی اسمشو می زاره عنقذی یکی دیگه می زاره babakHelloBeanImpl اما چون همه اون interface اصله کاری رو implement کردن و server مطمعن هست که در قسمت client هم هست پس کافی که چی، به clientها بگه من این interface رو دارم که توام داری تازه این چندتا implement شده هشم داره. حالا client فقط کافی هست که چی کار کنه ؟؟ رفتیم سراغ javaSE بیاد از کلاس دلخواه implement شده به interface موجود در کلاینت چی cast کنه و نتیجه رو بگیره. مام همین کار رو می کنیم.


package myejb;

import javax.ejb.Remote;

/**
*
* @author root
*/
@Remote
public interface HelloRemote {

public String sayHello();

}


package myejb;

import javax.ejb.Stateless;

/**
*
* @author root
*/
@Stateless(mappedName="babakHelloBeanImpl")
public class HelloBean implements HelloRemote {

public String sayHello() {
return "Hello";
}

}


دقت کن یک interface هست که من اومدم implemntش کردم و یک نام بهش دادم که از بیرون هرکی این نام رو صدا کنه به این object دسترسی داره یعنی babaHelloBeanImpl و کسی دیکه می تونه طور دیگه implement کنه ویک نامه دیگه بزاره براش.

داستان به همین راحتی بود . یک jar فایل می دی بیرون و می ندازیش توی container
وقتی میندازیش یعنی deploy می کنی اگر مشکلی نباشه خودت توی console می بینی یک همچین پیعامی برات می نویسه


CORE5024: EJB module [MyEJB] unloaded successfully!
PWC4011: Unable to set request character encoding to UTF-8 from context , because request parameters have already been read, or ServletRequest.getReader() has already been called
deployed with moduleid = MyEJB
**RemoteBusinessJndiName: babakHelloBeanImpl; remoteBusIntf: myejb.HelloRemote
LDR5010: All ejb(s) of [MyEJB] loaded successfully!


خوب حالا jboss بالاست و jar فایلت deploy شده توش و منتظر جواب دادن. می ریم سراغ client که می خواد از این object یا بهتر بگم interface ی که باید یک نسخشم در client باشه ولی نیاز به classهای implement شده نیست وجود داشته باشه.

یک پروژه دیگه در client به این صورت


package clientside;

import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import myejb.HelloRemote;




/**
*
* @author root
*/
public class Main {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {

try {
Properties properties = new Properties();

System.out.println("befor");
properties.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");
properties.setProperty("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");
properties.setProperty("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFa ctoryImpl");
properties.setProperty("org.omg.CORBA.ORBInitialHost", "192.168.1.3");
properties.setProperty("org.omg.CORBA.ORBInitialPort", "3700");

Context context = new InitialContext(properties);

HelloRemote helloRemote = (HelloRemote) context.lookup("BabakHelloBeanImpl");
String s = helloRemote.sayHello();

System.out.println("Babak says = " + s);



} catch(Exception e) {
e.printStackTrace();
}
}

}


کار تمام.

نکات : در قسمت client تمام propertyی ها مخصوص glassfishهست نه jboss یا web app دیگری
دوم برای اینکه جا نبود من از lib فایلهایی که به classpath در دو پروژه یعنی server side و client side افزوده شده برای نمایش صرفه نظر کردم.

تنظیمات jboss رو از اینترنت بدست بیار

هنگام صدا زدن object باید joboss یا هر web app دیگر حتما run باشه اگر ببندیش یعنی اینکه ejb containerx رو بستی پس ۱۰۰٪ در قسمت client هم جوابی نمی گیری

فقط قسمت ejb بصورت یک jar فایل هست و قابل deploy
قسمت client رو به عهده خودت می زارم با این مثال کد

sky_in_iran
پنج شنبه 16 مهر 1388, 17:12 عصر
سلام عرض می کنم خدمت استاد شرمندم کردی خیلی بهت زحمت دادم انشا ا.. بتونم جبران کنم تمام مراحل رو همونجور که گفتید رفتم کامل با glassfish کار کردم نه jboss اما باز نوای گوش خراش Exception به گوش رسید اخه چرا چرا چرا ؟؟؟؟؟!!!!!

javax.naming.NoInitialContextException: Cannot instantiate class: com.sun.enterprise.naming.SerialInitContextFactory [Root exception is java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory]
at javax.naming.spi.NamingManager.getInitialContext(N amingManager.java:657)
at javax.naming.InitialContext.getDefaultInitCtx(Init ialContext.java:288)
at javax.naming.InitialContext.init(InitialContext.ja va:223)
at javax.naming.InitialContext.<init>(InitialContext.java:197)
at clientside.Main.main(Main.java:37)
Caused by: java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java: 200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.j ava:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:3 06)
at sun.misc.Launcher$AppClassLoader.loadClass(Launche r.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:2 51)
at java.lang.ClassLoader.loadClassInternal(ClassLoade r.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at com.sun.naming.internal.VersionHelper12.loadClass( VersionHelper12.java:46)
at javax.naming.spi.NamingManager.getInitialContext(N amingManager.java:654)
... 4 more

javaphantom
جمعه 17 مهر 1388, 10:27 صبح
سلام عرض می کنم خدمت استاد شرمندم کردی خیلی بهت زحمت دادم انشا ا.. بتونم جبران کنم تمام مراحل رو همونجور که گفتید رفتم کامل با glassfish کار کردم نه jboss اما باز نوای گوش خراش Exception به گوش رسید اخه چرا چرا چرا ؟؟؟؟؟!!!!!

javax.naming.NoInitialContextException: Cannot instantiate class: com.sun.enterprise.naming.SerialInitContextFactory [Root exception is java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory]
at javax.naming.spi.NamingManager.getInitialContext(N amingManager.java:657)
at javax.naming.InitialContext.getDefaultInitCtx(Init ialContext.java:288)
at javax.naming.InitialContext.init(InitialContext.ja va:223)
at javax.naming.InitialContext.<init>(InitialContext.java:197)
at clientside.Main.main(Main.java:37)
Caused by: java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java: 200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.j ava:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:3 06)
at sun.misc.Launcher$AppClassLoader.loadClass(Launche r.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:2 51)
at java.lang.ClassLoader.loadClassInternal(ClassLoade r.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at com.sun.naming.internal.VersionHelper12.loadClass( VersionHelper12.java:46)
at javax.naming.spi.NamingManager.getInitialContext(N amingManager.java:654)
... 4 more


هرچی jar فایل توی فلدر lib ی که glassfish داره رو سمت client به classpath اضافه کن

sky_in_iran
شنبه 18 مهر 1388, 22:24 عصر
استاد دیگه دارم دیوونه میشم من تمامی jar فایل هایی که تو مسیر javadb\lib البته تو glassfish فقط اونجا jar بود و کپی کردم به محل client باز نشد به library اضافه کردم باز نشد الان انقدر گیجم واقعا قاطی کردم classpath دقیقا منظورت چیه میشه بیشتر توضیح بدی من بی سوادم ؟؟!!!!!!!!!!!:ناراحت::گیج:

sky_in_iran
شنبه 18 مهر 1388, 22:29 عصر
ببخشید classpath منظور مسیر فایل های class بود درسته ؟ MyEJB\build\jar\clientside درسته ؟ اگه این باشه کپی کردم بازم Exception داد :

befor
javax.naming.NoInitialContextException: Cannot instantiate class: com.sun.enterprise.naming.SerialInitContextFactory [Root exception is java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory]
at javax.naming.spi.NamingManager.getInitialContext(N amingManager.java:657)
at javax.naming.InitialContext.getDefaultInitCtx(Init ialContext.java:288)
at javax.naming.InitialContext.init(InitialContext.ja va:223)
at javax.naming.InitialContext.<init>(InitialContext.java:197)
at clientside.Main.main(Main.java:37)
Caused by: java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java: 200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.j ava:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:3 06)
at sun.misc.Launcher$AppClassLoader.loadClass(Launche r.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:2 51)
at java.lang.ClassLoader.loadClassInternal(ClassLoade r.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at com.sun.naming.internal.VersionHelper12.loadClass( VersionHelper12.java:46)
at javax.naming.spi.NamingManager.getInitialContext(N amingManager.java:654)
... 4 more

javaphantom
شنبه 18 مهر 1388, 23:14 عصر
ببخشید classpath منظور مسیر فایل های class بود درسته ؟ MyEJB\build\jar\clientside درسته ؟ اگه این باشه کپی کردم بازم Exception داد :

befor
javax.naming.NoInitialContextException: Cannot instantiate class: com.sun.enterprise.naming.SerialInitContextFactory [Root exception is java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory]
at javax.naming.spi.NamingManager.getInitialContext(N amingManager.java:657)
at javax.naming.InitialContext.getDefaultInitCtx(Init ialContext.java:288)
at javax.naming.InitialContext.init(InitialContext.ja va:223)
at javax.naming.InitialContext.<init>(InitialContext.java:197)
at clientside.Main.main(Main.java:37)
Caused by: java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java: 200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.j ava:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:3 06)
at sun.misc.Launcher$AppClassLoader.loadClass(Launche r.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:2 51)
at java.lang.ClassLoader.loadClassInternal(ClassLoade r.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at com.sun.naming.internal.VersionHelper12.loadClass( VersionHelper12.java:46)
at javax.naming.spi.NamingManager.getInitialContext(N amingManager.java:654)
... 4 more


شما توی مسیر glassfish یک فلدر داری به نام lib که توی اون یک عالمه jar فایل در کنار چند folder هست . اون jar فایل ها باید در مسیر classpath قرار بگیره چه جوری
اگر داری از IDE خواصی استفاده می کنی کافی هست که به قسمت library ها بری و توی libarayی که project ت داره این jar فایل ها رو add کنی.

اگر داری با console برنامه می نویسی و در windows هستی
باید با دستور set CLASSPATH=%CLASSPATH%\c:\galssfish\lib\javaee.jar و هر چی jar فایل دیگه دیدی

اگر در linux یا open solaris داری کار می کنی با دستور
export CLASSPATH=$CLASSPATH:/opt/galssfish/lib/javaee.jar:
و تا آخر. بعد compile کن با دستور javac و بعد با دستور java اجرا کن

sky_in_iran
یک شنبه 19 مهر 1388, 08:37 صبح
ببخشيد استاد يه شاگرد كم حافظه و تنبل گيرت اومده فكر كنم glassfish مشكل داره چون اصلا توش lib وجود نداره باز از وب download ميكنم تست مي كنم انشا ا.. حل بشه وگرنه باز من مزاحمه شما ميشم خيلي خيلي خيلي ممنونم از لطفتون

sky_in_iran
سه شنبه 21 مهر 1388, 20:42 عصر
سلام استاد من واسه کارم از ide ، netbean استفاده می کنم ورژن 6.7.1 موقع نصب خودش glassfish 2.1 نصب می کنه اما تو مسیر lib هیچjar فایلی نیست به جز jndi-properties.jar اماتو مسیر sges-v3-prelude\javadb\lib یسری jar فایل هست که وقتی تو classpath گذاشتم باز exception داد :

befor
javax.naming.NoInitialContextException: Cannot instantiate class: com.sun.enterprise.naming.SerialInitContextFactory [Root exception is java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory]
at javax.naming.spi.NamingManager.getInitialContext(N amingManager.java:657)
at javax.naming.InitialContext.getDefaultInitCtx(Init ialContext.java:288)
at javax.naming.InitialContext.init(InitialContext.ja va:223)
at javax.naming.InitialContext.<init>(InitialContext. java:197)
at clientside.Main.main(Main.java:37)
Caused by: java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java: 200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.j ava:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:3 06)
at sun.misc.Launcher$AppClassLoader.loadClass(Launche r.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:2 51)
at java.lang.ClassLoader.loadClassInternal(ClassLoade r.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at com.sun.naming.internal.VersionHelper12.loadClass( VersionHelper12.java:46)
at javax.naming.spi.NamingManager.getInitialContext(N amingManager.java:654)
... 4 more
واقعا دیگه گیج شدم مشکل آخه از کجاست واقعا موندم ؟ چه باید کرد

javaphantom
چهارشنبه 22 مهر 1388, 16:06 عصر
سلام استاد من واسه کارم از ide ، netbean استفاده می کنم ورژن 6.7.1 موقع نصب خودش glassfish 2.1 نصب می کنه اما تو مسیر lib هیچjar فایلی نیست به جز jndi-properties.jar اماتو مسیر sges-v3-prelude\javadb\lib یسری jar فایل هست که وقتی تو classpath گذاشتم باز exception داد :

befor
javax.naming.NoInitialContextException: Cannot instantiate class: com.sun.enterprise.naming.SerialInitContextFactory [Root exception is java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory]
at javax.naming.spi.NamingManager.getInitialContext(N amingManager.java:657)
at javax.naming.InitialContext.getDefaultInitCtx(Init ialContext.java:288)
at javax.naming.InitialContext.init(InitialContext.ja va:223)
at javax.naming.InitialContext.<init>(InitialContext. java:197)
at clientside.Main.main(Main.java:37)
Caused by: java.lang.ClassNotFoundException: com.sun.enterprise.naming.SerialInitContextFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java: 200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.j ava:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:3 06)
at sun.misc.Launcher$AppClassLoader.loadClass(Launche r.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:2 51)
at java.lang.ClassLoader.loadClassInternal(ClassLoade r.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at com.sun.naming.internal.VersionHelper12.loadClass( VersionHelper12.java:46)
at javax.naming.spi.NamingManager.getInitialContext(N amingManager.java:654)
... 4 more
واقعا دیگه گیج شدم مشکل آخه از کجاست واقعا موندم ؟ چه باید کرد


بابا این کار خیلی سادست جزو مفاهیم اولیه هر زبانی اینکه که بتونی از کتابخانه اون زبان استفاده کنی.

netbeans چیه. برو ببین که glassfish رو کجا نصب کرده. اونجا فلدر bin داره چندتا فلدر دیگه هم هست که یکیشون lib هست. که تمام jar فایلهای مربوط به javaee اونتو هست.

اونو پیدا کن

sky_in_iran
پنج شنبه 23 مهر 1388, 16:05 عصر
استاد چیزایی که میگیو بلدم اما مشکلم اینه که فولدر lib هیچ jar فایلی یا فایل کتابخونه ای نداره .توglassfish هر چی jar پیدا کردم به classpath اضافه کردم اما باز exception داد الان دیگه تماما مخم تعطیل شده مشکل از glassfish یا کد برنامه ؟؟؟؟؟؟ این سوالمه کدم همونیه که شما لطف کردید دادید رفتم از سایت glassfish یه بار دیگه دانلود کنم که خداروشکر در همه چیز تحریمیم و بهش افتخار می کنیم من چه کنم !!!!؟؟؟؟

mazdadoost
پنج شنبه 23 مهر 1388, 21:30 عصر
استاد چیزایی که میگیو بلدم اما مشکلم اینه که فولدر lib هیچ jar فایلی یا فایل کتابخونه ای نداره .توglassfish هر چی jar پیدا کردم به classpath اضافه کردم اما باز exception داد الان دیگه تماما مخم تعطیل شده مشکل از glassfish یا کد برنامه ؟؟؟؟؟؟ این سوالمه کدم همونیه که شما لطف کردید دادید رفتم از سایت glassfish یه بار دیگه دانلود کنم که خداروشکر در همه چیز تحریمیم و بهش افتخار می کنیم من چه کنم !!!!؟؟؟؟
دوست عزيز : شما از jboss استفاده مي كنيد يا glassfish? اگر از glassfish استفاده مي كنيد بهترين راه به نظر من استفاده از application client است. به اين آدرس مراجعه كنيد .
http://docs.sun.com/app/docs/doc/820-4337/fvyal?a=view

موفق باشيد.

sky_in_iran
جمعه 24 مهر 1388, 17:09 عصر
سلام استاد شرمنده تو این مدت خیلی اذیتت کردم آخر درست شد مشکلم تو classpath بود مسیر اشتباهی میرفتم خیلی خیلی ممنونم همیشه موفق و پیروز باشی

javaphantom
جمعه 24 مهر 1388, 18:30 عصر
سلام استاد شرمنده تو این مدت خیلی اذیتت کردم آخر درست شد مشکلم تو classpath بود مسیر اشتباهی میرفتم خیلی خیلی ممنونم همیشه موفق و پیروز باشی

من کار نکردم :لبخند:

همه عزابش برای تو بود :بامزه:

mohammadpft
دوشنبه 03 آبان 1389, 09:39 صبح
سلام
من می خوام ejb رو شروع به یادگیری کنم از کجا باید آغاز کنم البته جاوا کارکردم لطف کنید راهنمایی نمایید

Syamah
دوشنبه 18 بهمن 1389, 17:10 عصر
EJB مجموعه ای از چند فایل جاوای که در نهایت تشکیل یک مولفه یا component می کند. وقتی صحبت از componet می کنیم اون موقع باید صحبت از برنامه نویسی کامپونتی نیز بکنیم. تعریف کامپونت چیه؟.
.
.
.
تمام تکنولوژی های قبل خودشم از جمله CORBA رو نیز پشتیبانی می کند در نسخه های قبلی آن ۱.۲ تا ۲.۱ این تکنولوژی بسیار پیچیدگی های خاصه حودشرو داشت در نتیجه شرکت های مختلف شروع به ساختن framework هایی کردند که بتواند برای تولید این نوع کامپونت ها بسیار سریع عمل کنه اما خوب استاندارد برای سان نبود از جمله struts , spring با اومدن آخرین نسخه آن یعنی ejb3 دیگر این مشکلات هم حل شد. ejb3 با شعار POJO Plain Old Java Object و همچنین با کمک annotation که جای گزین فایلهای عظیم xml شد دیگر واقعا کار را بسیار آسان کرد و هشتداری بود برای framework بازها.


پس میشه گفت جاوا یه جورایی Server Oriented رو با این EJB پیاده کرده و به راحتی میشه یه Application Server راه انداخت . و یه جوایی شبیه تکنولوژی WCF در مایکروسافت
(البته لازم به ذکر است که نمیشه چیزی مث مایکروسافت دات نت و با جاوا مقا یسه کرد چون مایکروسافت دانت در مقابل جاوا عددی نیس. )

homa19
دوشنبه 26 تیر 1391, 10:22 صبح
یعنی می تونیم به کمک EJB با متد هامون به صورت آسنکرون ارتباط برقرار کنیم؟ آیا EJB ابزاری هست که برای این کار تعبیه شده؟ چه ابزارهای دیگه ای در جوا وجود دارند که انجام این کار رو عملی میکنند؟؟؟
ممنون میشم اگه با سورس جواب بدید

javaphantom
دوشنبه 26 تیر 1391, 23:14 عصر
برای ارتباط آسنکرون باید بری سراغ مفاهیم AMQP یا همون Advanced Message Queuing Protocol. در جاوا بحثی داریم (Java Message Oriented Middleware) (MOM) به عبارت ساده تر بحث JMS یا Java Message Service.
هر AMQP یک سری API به یک زبان خاصی دراختیار developer ها می زاره تا بتونن با هاش کار کنند. جاوا هم یک سری کتاب خونه استاندارد داره که می تونی مستقل از هر چیزی با یک AMQP ارتباط بر قرار کنی. در EJB برای سهولت این کار اومدن بحث Message Driven رو مطرح کردن. در نهایت جواب شما بله هست. بله EJB این امکان رو به شما می ده که بتونید به راحتی با یک AMQP جاوایی ارتباط برقرار کنی.

در مورد سورس هم منظورتون رو نفهمیدم ولی توی اینترنت در مورد rabbit mq or active mq or sun mq یک سرچ بزنی کلی در مورد message broker ها داستان هست و همچنین در مورد message driven در ejb

persianshadow
سه شنبه 27 تیر 1391, 21:28 عصر
بله در EJB 3.1 و یا به کمک فریم ورک Spring به سادگی می‌تونید یک متد رو آسنکرون فراخوانی کنید. کافیه از Annotation مربوط به این کار یعنی Async@ و Asynchronous @ استفاده کنید.