index
ejb stateless : Acces Remote
traduction de https://glassfish.dev.java.net/javaee5/ejb/EJB_FAQ.html#StandaloneRemoteEJB
Comment accéder à un "emote EJB" depuis un client java stand-alone ?
Etape 1 : Utiliser le constructeur InitialContext() sans argument
Le problème le plus courrant est que les developpeur commence par passer des propriétés au InitialContext(args).
Il vaut mieux passer les propriétés éventuelles dans un fichier jndi.properties qui sera lu de toute façon en cas d'emploi du constructeur InitialContext().
Etape 2 : Passer le nom JNDI de l'EJB à InitialContext.lookup()
Les application java "stand-alone" n'ont pas accès à l'environnement de l'espace de nommage. (java:comp/env) ou aux annotations @EJB, aussi ils doivent explicitement utiliser le nom JNDI pour retrouver (lookup) l'EJB distant ("remote").
Supposons que le nom JNDI de l'EJB remote est "FooEJB":
Pour des Beans EJB 3.0 avec une interface "Remote":
Remarquez qu'avec les EJB 3.0, le resultat de la recherche (lookup) peut être directement caster sans utiliser PortableRemoteObject.narrow()
Pour les EJB 2.1 :
Etape 3 : Inclure appserv-rt.jar et javaee.jar dans le classpath du client
Remarque: appserv-rt.jar utilise le Manifeste du JAR pour inclure d'autres dépendances. Lorsque vous l'utilisez faites référence
à ce jar dans son environnement, sinon il vous manquera des dépendances (d'autres jar).
Si votre application stand-alone utilise JMS, vous aurez besoin de $APS_HOME/lib/install/applications/jmsra/imqjmsra.jar ,
$APS_HOME/lib/appserv-admin.jar et $APS_HOME/lib/appserv-ws.jar
Si votre application stand-alone utilise l'APi "Java Persistence" vous aurez besoin de $APS_HOME/lib/toplink-essentials.jar
Step 4. Positionner les "server host property" si necessaire.
If the stand-alone java client is running on a different host than the server, set the -Dorg.omg.CORBA.ORBInitialHost property when starting the client JVM. E.g., assuming the server is running on host com.acme.Host1 :
java -Dorg.omg.CORBA.ORBInitialHost=com.acme.Host1
-classpath $APS_HOME/lib/appserv-rt.jar:$APS_HOME/lib/javaee.jar:/home/user1/myclasses acme.MyClient
Cette "property" est par defaut à "localhost". Il n'est donc pas toujours nécessaire de lui affecter une valeur.
Step 5. Positionner le port du service de nommage , si nécessaire.
Le port par defaut est 3700 . Si le service de nommage est sur un autre port, il faudra le positionner par la propriété -Dorg.omg.CORBA.ORBInitialPort lorsque vous démarrez la jvm.
Vous pouvez controller le port du service de nommage en regardant dans le fichier domain.xml pour le paramètre "orb-listener-1".
Eventuellement , vérifiez le Applications..Configuration..ORB..IIOP Listeners par l'interface d'administration.
Supposons que le port du service de nommage soit 9876, et que le client soit sur le même host que le serveur:
java -Dorg.omg.CORBA.ORBInitialPort=9876
-classpath $APS_HOME/lib/appserv-rt.jar:$APS_HOME/lib/javaee.jar:/home/user1/myclasses acme.MyClient