Bonjour,
Depuis peu, j'ai décidé d'apprendre les EJB3.0 et d'utiliser JBOSS 5.0.1.GA.
Je developpe sur mon ordinateur personnel ayant l'adresse IP suivante (192.168.0.10)
les tests sont effectués sur celui-ci.
1) Déploiement d'un EJB3.0
Après avoir écris un EJB3.0 assez simple,
j'ai démarré JBOSS dans sa configutaion par défaut :
./run.sh -b 192.168.0.10
et puis je l'ai déployé sous :
<JBOSS 5.0.1.GA.>/server/default/deploy
La réponse du serveur et l'EJB semblent corrects.
12:49:18,936 INFO [JndiSessionRegistrarBase] Binding the following Entries in Global JNDI:
ejb3/Hello/remote - EJB3.x Default Remote Business Interface
HelloBean/remote-test.jboss.ejb3.hello.HelloRemote - EJB3.x Remote Business Interface
ejb3/Hello/local - EJB3.x Default Local Business Interface
HelloBean/local-test.jboss.ejb3.hello.HelloLocal - EJB3.x Local Business Interface
2) Probleme : Appel de cet EJB depuis un client lourd
Après j'ai écris un client lourd (très léger).
package test.jboss.rich_client.hello;
import java.util.*;
import javax.ejb.EJB;
import javax.naming.InitialContext;
import javax.naming.Context;
import javax.naming.NamingException;
import test.jboss.ejb3.hello.HelloRemote;
public class HelloRichClient{
static private HelloRemote helloRemote = null;
/**
* @param args
* @throws NamingException
*/
public static void main(String[] args) throws NamingException {
String result="";
InitialContext ctx = new InitialContext();
helloRemote = (HelloRemote)ctx.lookup("ejb3/Hello/remote");
result=helloRemote.simpleHello( "Nicolas" ) ;
System.out.println(" "+result);
}
}
Avec un fichier jndi.properties comme suit :
### JBossNS properties
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=jnp://192.168.0.10:1099
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces
Je le compile puis en fait un jar.
A l'execution, j'obtiens l'erreur
javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interfaces.NamingContextFactory [Root exception is java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory]
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:657)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at javax.naming.InitialContext.init(InitialContext.java:223)
at javax.naming.InitialContext.<init>(InitialContext.java:175)
at test.jboss.rich_client.hello.HelloRichClient.main(HelloRichClient.java:27)
Caused by: java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
Ne sachant quels fichiers jar sont nécessaires pour compiler le client, j'avais mis dans
le classpath tous les jar de JBOSS (lib et client ).
Je ne parviens pas pour l'instant à déterminer d'ou vient l'erreur puisque je dispose bien
d'un jndi.properties.
Merci d'avance car au début, l'apprentissage des EJB3.0 n'est pas si aisé ( avec tous les fichiers jars disponibles).
Partager