Bonjour à tous,
C'est la première fois que je poste sur ce site : j'espère avoir suivi les règles d'usage.
Je travaille avec un collègue à un projet en client lourd(sa partie) et en client léger(ma partie).
Je suis sous Eclipse avec un serveur Glassfish.
Le projet appelé "Test" contient 3 autres projets :
- le client lourd nommé "TestClient";
- le client léger nommé "TestWeb" (Dynamic Web Project);
- un projet contenant des classes et méthodes communes aux 2 autres projets précédents nommé "TestCommun".
C'est la première fois que j'emploie les EJB et Glassfish.
Dans "TestCommun", se trouvent les EJB :
- "EntiteEJB"
- "EntiteEJBRemote"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 package com.test.commun.ejb; @Stateless @LocalBean @Remote(EntiteEJBRemote.class) public class EntiteEJB implements EntiteEJBRemote { ... }
Je dois accéder à "EntiteEJBRemote" via une applet nommée "Visio".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 package com.test.commun.ejbremote; @Remote public interface EntiteEJBRemote { ... }
Celle-ci se trouve aussi dans "TestCommun".
(j'ai ajouté dans mon projet un répertoire nommé "visio" contenant le JAR du projet "TestCommun" ainsi que d'autres JAR nécessaires à mon applet)
Pour l'appeler, je passe par la balise <object> à partir d'une JSP.
Et voici mon code dans mon applet pour accéder à "EntiteEJBRemote" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 <object align="center" vspace="5" hspace="5" type="application/x-java-applet" codetype="application/x-java-applet" codebase="visio" data="com.test.commun.Visio" classid="java:com.test.commun.Visio" archive="TestCommun.jar, jgoodies-looks-2.5.3.jar, pdf-renderer-1.0.5.jar, commons-codec-1.7.jar , glassfish-naming.jar, glassfish-corba-internal-api.jar, common-util.jar , internal-api.jar, hk2-core.jar , auto-depends.jar, glassfish-api.jar , glassfish-corba-orb.jar </object>
Dans le "Java Build Path" de mon projet, j'ai ajouté "gf-client.jar" de mon serveur Glassfish.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Properties props = new Properties(); InitialContext ic = new InitialContext(props); props.setProperty("org.omg.CORBA.ORBInitialHost","localhost"); props.setProperty("org.omg.CORBA.ORBInitialPort","3700"); entiteEJBRemote = (EntiteEJBRemote) ic.lookup("java:global/com.test.commun.ejbremote.EntiteEJBRemote#com.test.commun.ejbremote.EntiteEJBRemote");
En débuggant, j'ai dû ajouter les JAR suivantes de Glassfish dans mon répertoire "visio" :
glassfish-naming.jar, glassfish-corba-internal-api.jar, common-util.jar, internal-api.jar, hk2-core.jar,
auto-depends.jar, glassfish-api.jar,
glassfish-corba-orb.jar
Le nom JNDI pour accéder à "EntiteEJBRemote" m'a été donné par Glassfish :
J'ai actuellement l'erreur suivante :INFO: EJB5181ortable JNDI names for EJB EntiteEJB: [java:global/Test/TestCommun/EntiteEJB!com.test.commun.ejbremote.EntiteEJBRemote, java:global/Test/TestCommun/EntiteEJB!com.test.commun.ejb.EntiteEJB]
INFO: EJB5182:Glassfish-specific (Non-portable) JNDI names for EJB EntiteEJB: [com.test.commun.ejbremote.EntiteEJBRemote#com.test.commun.ejbremote.EntiteEJBRemote, com.test.commun.ejbremote.EntiteEJBRemote]
Malgré mes recherches, je ne vois toujours pas d'où vient le problème.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 javax.naming.NamingException: Lookup failed for 'java:global/com.test.commun.ejbremote.EntiteEJBRemote#com.test.commun.ejbremote.EntiteEJBRemote' in SerialContext[myEnv={org.omg.CORBA.ORBInitialPort=3700, java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, org.omg.CORBA.ORBInitialHost=localhost, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [Root exception is javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext[myEnv={org.omg.CORBA.ORBInitialPort=3700, java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, org.omg.CORBA.ORBInitialHost=localhost, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [Root exception is java.lang.NullPointerException]] at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:518) at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:455) at javax.naming.InitialContext.lookup(InitialContext.java:411) ... Caused by: javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext[myEnv={org.omg.CORBA.ORBInitialPort=3700, java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, org.omg.CORBA.ORBInitialHost=localhost, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [Root exception is java.lang.NullPointerException] at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:351) at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:504) ... 18 more Caused by: java.lang.NullPointerException at com.sun.enterprise.naming.impl.SerialContext.getORB(SerialContext.java:364) at com.sun.enterprise.naming.impl.SerialContext.getProviderCacheKey(SerialContext.java:371) at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:401) at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:346) ... 19 more
N'ai-je pas le droit d'accéder à un EJB Remote via une applet ?
Ai-je d'autres configurations à faire sous mon projet Web (web.xml ou autres) ?
Ou sur Glassfish ?
Merci par avance pour vos réponses.
Partager