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"
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 {
...
}
- "EntiteEJBRemote"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
package com.test.commun.ejbremote;
@Remote
public interface EntiteEJBRemote {
...
}
Je dois accéder à "EntiteEJBRemote" via une applet nommée "Visio".
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.
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>
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
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");
Dans le "Java Build Path" de mon projet, j'ai ajouté "gf-client.jar" de mon serveur Glassfish.

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 :
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]
J'ai actuellement l'erreur suivante :
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
Malgré mes recherches, je ne vois toujours pas d'où vient le problème.
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.