2012-09-30 5 views
2

J'ai une session EJB (spécification 3.0) simple déployée sur GlassFish 3.1 avec une interface distante. Voici l'extrait de journal montrant le déploiement:Appel d'EJB 3 déployé sur GlassFish 3.1 à partir de Servlet sur JBoss AS 7.1.1

INFO: Portable JNDI names for EJB RandomNumber2Bean : [java:global/RandomNumberEJB/RandomNumber2Bean, java:global/RandomNumberEJB/RandomNumber2Bean!beans.RandomNumber2] 
INFO: Glassfish-specific (Non-portable) JNDI names for EJB RandomNumber2Bean : [RandomNumber2, RandomNumber2#beans.RandomNumber2] 

Je suis en train de l'appeler d'un Servlet déployé sur JBoss AS 7.1.1 instance sur la même machine. Voici le code correspondant du servlet:

Properties props = new Properties(); 
props.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.impl.SerialInitContextFactory"); 
props.setProperty("java.naming.factory.url.pkgs", "com.sun.enterprise.naming"); 
props.setProperty("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl"); 
InitialContext initialContext = new javax.naming.InitialContext(props); 
RandomNumber2 randomNumber2 = (RandomNumber2) initialContext.lookup("RandomNumber2"); 

Cependant, chaque fois que je tente d'obtenir le InitialContext du servlet pour rechercher le haricot, je reçois l'erreur suivante:

javax.naming.NamingException: JBAS011843: Failed instantiate InitialContextFactory com.sun.enterprise.naming.SerialInitContextFactory from classloader ModuleClassLoader for Module "deployment.RandomNumberTesterGlassfish.war:main" from Service Module Loader 
at org.jboss.as.naming.InitialContextFactoryBuilder.createInitialContextFactory(InitialContextFactoryBuilder.java:64) 
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:681) 
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:307) 
at javax.naming.InitialContext.init(InitialContext.java:242) 
at javax.naming.InitialContext.<init>(InitialContext.java:216) 
at test.RandomNumberServlet.doGet(RandomNumberServlet.java:32) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:734) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) 
at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) 
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) 
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) 
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) 
at java.lang.Thread.run(Thread.java:722) 

J'ai ajouté le client jars appserv-rt.jar et gf-client.jar de GlassFish dans le chemin de compilation de l'application client Servlet (j'utilise Eclipse Juno pour le déployer) et dans le répertoire %JBOSS_HOME%\standalone\lib\ext.

Je ne trouve rien sur le web qui mentionne même l'invocation d'EJB déployés sur GlassFish 3.1 à partir de JBoss AS 7.1.1. Je suis complètement perdu à ce stade. Je suis capable d'invoquer les EJB déployés sur GlassFish avec un client autonome et je suis capable d'invoquer les mêmes EJB déployés sur JBoss à partir d'un client autonome et de GlassFish.

Répondre

0

Pouvez-vous essayer de définir les propriétés ci-dessous trop

props.setProperty("org.omg.CORBA.ORBInitialHost", "localhost"); 
props.setProperty("org.omg.CORBA.ORBInitialPort", "3700"); 
2

Il est écrit dans le journal: "noms JNDI Glassfish spécifiques (non portables)". Donc, cela ne fonctionnera probablement pas avec JBoss. Essayez celui-ci à la place:

RandomNumber2 randomNumber2 = (RandomNumber2) initialContext.lookup("java:global/RandomNumberEJB/RandomNumber2Bean"); 
0

Je pense que vous ne pouvez pas charger les bibliothèques natives GlassFish dans Jboss AppServer. Je teste la configuration props.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.impl.SerialInitContextFactory"); dans trois serveurs AppServer: GlassFish 3, Jboss 7 et WebSphere 8. Le seul serveur d'application qui exécutait correctement l'application était Glassfish. (à cause de com.sun.enterprise.naming.impl.SerialInitContextFactory)

Vous devez exécuter votre application dans GlassFish. voici la configuration complète:

 Properties props = new Properties(); 
     props.setProperty("java.naming.factory.initial", 
       "com.sun.enterprise.naming.SerialInitContextFactory"); 

     props.setProperty("java.naming.factory.url.pkgs", 
       "com.sun.enterprise.naming"); 

     props.setProperty("java.naming.factory.state", 
       "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl"); 

     props.setProperty("org.omg.CORBA.ORBInitialHost", "IP"); 
     props.setProperty("org.omg.CORBA.ORBInitialPort", "3700"); 

     InitialContext context = new InitialContext(props); 
     RandomNumber2 randomNumber2 =(RandomNumber2)context.lookup("RandomNumber2"); 
Questions connexes