Comment invoquer un EJB3 distant depuis une interface Swing deployé via Java Web Start?
Pour chaque serveur d’application, les paramètres de connections et les librairies clientes à embarquer sont différentes. Et à chaque fois, c’est un vrai casse-tête pour trouver ces informations!! surtout que j’ai voulu me tourner vers l’avenir en ne m’interressant qu’à la spécification EJB3 (pour sa simplicité…?!).
1-Avec NetBean5.5 + Sun App Server
Via NetBean5.5, il est facile de créer un EJB3 et le deployer sur le serveur fourni avec l’installateur J2EE5 de Sun. Je ne m’attarderai pas sur ce point. Il y a un tutoriel qui explique cela sur developpez.com (chercher l’auteur de l’article = Secheresse).
Pour invoquer l’EJB3 Session (Stateless ou Stateful) depuis une interface Swing, il faut que le classpath de l’application trouve les jars suivant:
Un jar contenant l’interface remote de l’EJB Ã invoquer
appserv-deployment-client.jar et appserv-rt.jar (que l’on trouvera dans le repertoire du serveur d’application de Sun
javaee.jar
Le jar contenant le code du client
Le code pour invoquer l’EJB dans le client :
[java]
Properties props = new Properties();
props.setProperty(« org.omg.CORBA.ORBInitialHost », « 192.168.2.30″); // IP du serveur d’application
//props.setProperty(« org.omg.CORBA.ORBInitialPort », « 3700″); //port = 3700 par défaut
MonBeanRemote bean= null; //interface remote
try {
Context ctx = new InitialContext(props);
//on invoque le bean à l’aide de son nom de classe comme pour un import
bean= (MonBeanRemote) ctx.lookup(« mon.package.MonBeanRemote »);
} catch (Exception ex) {
ex.printStackTrace();
}
[/java]
Plus d’infos : https://glassfish.dev.java.net/javaee5/ejb/EJB_FAQ.html#SessionBeanGlobalJNDINameAssignment
Mais cette solution n’est valable que pour des développements de tests car il me semble qu’il est déconseillé d’utiliser le Sun App Server pour une application de production.
De plus, la librairie appserv-rt.jar fait à elle seule environ 15Mo. Pour un deployement par Java Web Start, c’est pas idéal!!
2- NetBean5.5 + JBoss
J’ai essayer de remplacer le Sun App Server par JBoss en gardant NetBean pour deployer mes EJB mais ce fut un echec!
3 – Jonas4.4.7 + EasyBean
Je me suis donc ensuite tourné vers le serveur d’application Jonas pour l’avoir utilisé à la Fac.
Le site mets en avant le projet EasyBean qui est une couche sur Jonas pour faire fonctionner les EJB3. Ce framework est vendu comme facile à utiliser.
J’ai donc testé et il est vrai que j’ai reussi à avoir des résultats rapidement!
De plus, il est livré avec des exemples très bien fait pour chaque type d’EJB3 : Stateless, Stateful + Transaction, Message, Security et Entity.
Les jars à embarquer avec l’application cliente sont:
Le code du client
les interfaces remotes des EJBs
le jar ow_easybeans_component_smartclient.jar (1 Mo)
Le code à mettre dans le client pour invoquer un EJB est :
[java]
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
« org.objectweb.easybeans.component.smartclient.spi.SmartContextFactory »);
env.put(Context.PROVIDER_URL, « smart://192.168.2.30:2503″);
Context initialContext = new InitialContext(env);
// Ã partir de l’exemple Stateless fourni
StatelessRemote statelessBean = (StatelessRemote) initialContext
.lookup(« org.objectweb.easybeans.examples.statelessbean.StatelessBean »
+ « _ » + StatelessRemote.class.getName() + « @Remote »);
System.out.println(« Calling helloWorld method… »);
statelessBean.helloWorld();
System.out.println(« Add 5 + 6… »);
int resultAdd = statelessBean.add(5, 6);
System.out.println(« Sum = ‘ » + resultAdd);
[/java]
Le protocole de communication utilisé est un protocole « maison » (smart) utilisant le port 2503.
A noter, qu’il est possible d’installer EasyBean juste sur un Tomcat (mais j’avoue que je n’ai pas reussi à le faire fonctionner sous Windows, j’ai eu un problème de path que je n’ai pas eu avec Jonas).
Remarque : Je me suis essentiellement basé sur les exemples pour le moment et je n’ai pas encore tenté de faire un EJB depuis le départ et je ne sais pas encore comment les déployer dans Jonas. Avec le Sun App Server non plus à vrai dire puisque c’est NetBean qui me l’a fait! Mais avec Jonas, ça à l’air moins compliqué…
Liens :
Tutorial sur developpez.com
https://glassfish.dev.java.net/javaee5/ejb/EJB_FAQ.html#SessionBeanGlobalJNDINameAssignment
EasyBean et Jonas
Demos EasyBean