2010-03-14 17 views
5

Tengo el siguiente errorJBoss EJB Bean no ligado

Exception in thread "main" javax.naming.NameNotFoundException: CounterBean not bound 

tratando de acceder a un CounterBean.jar JAR EJB desplegado en JBoss5 desde una aplicación cliente fuera del servidor de aplicaciones.

Desde el registro de Jboss, parece que no tiene un nombre JNDI global? ¿Esta bien? ¿Qué he hecho mal? registro

JBoss:

13:50:39,669 INFO [JBossASKernel] Created KernelDeployment for: Counter.jar 
13:50:39,672 INFO [JBossASKernel] installing bean: jboss.j2ee:jar=Counter.jar,name=CounterBean,service=EJB3 
13:50:39,672 INFO [JBossASKernel] with dependencies: 
13:50:39,672 INFO [JBossASKernel] and demands: 
13:50:39,673 INFO [JBossASKernel]  partition:partitionName=DefaultPartition; Required: Described 
13:50:39,673 INFO [JBossASKernel]  jboss.ejb:service=EJBTimerService; Required: Described 
13:50:39,673 INFO [JBossASKernel] and supplies: 
13:50:39,673 INFO [JBossASKernel]  jndi:CounterBean 
13:50:39,673 INFO [JBossASKernel] Added bean(jboss.j2ee:jar=Counter.jar,name=CounterBean,service=EJB3) to KernelDeployment of: Counter.jar 
13:50:39,712 INFO [SessionSpecContainer] Starting jboss.j2ee:jar=Counter.jar,name=CounterBean,service=EJB3 
13:50:39,727 INFO [EJBContainer] STARTED EJB: com.don.CounterBean ejbName: CounterBean 
13:50:39,732 INFO [JndiSessionRegistrarBase] Binding the following Entries in Global JNDI: 

El código de cliente es: mensaje

public static void main(String[] args) throws NamingException, InterruptedException { 
    InitialContext ctx = new InitialContext(); 
    Counter s = (Counter)ctx.lookup("CounterBean/remote"); 
    for(int i = 0; i < 100; i++) { 
     s.printCount(i); 
     Thread.sleep(1000); 
    } 
} 

error:

java -Djava.naming.provider.url=jnp://123.123.123.123:1099 -Djava.naming.factory.initial=org.jnp.interfaces.NamingContextFactory com.don.Client 

Exception in thread "main" javax.naming.NameNotFoundException: CounterBean not bound 
    at org.jnp.server.NamingServer.getBinding(NamingServer.java:771) 
    at org.jnp.server.NamingServer.getBinding(NamingServer.java:779) 
    at org.jnp.server.NamingServer.getObject(NamingServer.java:785) 
    at org.jnp.server.NamingServer.lookup(NamingServer.java:396) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305) 
    at sun.rmi.transport.Transport$1.run(Transport.java:159) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at sun.rmi.transport.Transport.serviceCall(Transport.java:155) 
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790) 
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:619) 
    at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255) 
    at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233) 
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:142) 
    at org.jnp.server.NamingServer_Stub.lookup(Unknown Source) 
    at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:726) 
    at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:686) 
    at javax.naming.InitialContext.lookup(InitialContext.java:392) 
     at com.don.Client.main(Client.java:10) 

Respuesta

6

Esto es lo que me pasa cuando despliego un simple sin estado bean de sesión (SLSB) con una interfaz remota en JBoss 5.x:

01:52:07,313 INFO [JBossASKernel] Created KernelDeployment for: sandbox-services-1.0-SNAPSHOT.jar 
01:52:07,313 INFO [JBossASKernel] installing bean: jboss.j2ee:jar=sandbox-services-1.0-SNAPSHOT.jar,name=EchoBean,service=EJB3 
01:52:07,314 INFO [JBossASKernel] with dependencies: 
01:52:07,314 INFO [JBossASKernel] and demands: 
01:52:07,314 INFO [JBossASKernel] jboss.ejb:service=EJBTimerService 
01:52:07,314 INFO [JBossASKernel] and supplies: 
01:52:07,314 INFO [JBossASKernel] Class:com.stackoverflow.q2440956.samples.services.hello.Echo 
01:52:07,314 INFO [JBossASKernel] jndi:EchoBean/remote-com.stackoverflow.q2440956.samples.services.hello.Echo 
01:52:07,314 INFO [JBossASKernel] jndi:EchoBean/remote 
01:52:07,314 INFO [JBossASKernel] Added bean(jboss.j2ee:jar=sandbox-services-1.0-SNAPSHOT.jar,name=EchoBean,service=EJB3) to KernelDeployment of: sandbox-services-1.0-SNAPSHOT.jar 
01:52:07,315 INFO [EJB3EndpointDeployer] Deploy [email protected]{name=jboss.j2ee:jar=sandbox-services-1.0-SNAPSHOT.jar,name=EchoBean,service=EJB3_endpoint bean=org.jboss.ejb3.endpoint.deployers.impl.EndpointImpl properties=[container] constructor=null autowireCandidate=true} 
01:52:07,381 INFO [SessionSpecContainer] Starting jboss.j2ee:jar=sandbox-services-1.0-SNAPSHOT.jar,name=EchoBean,service=EJB3 
01:52:07,382 INFO [EJBContainer] STARTED EJB: com.stackoverflow.q2440956.samples.services.hello.EchoBean ejbName: EchoBean 
01:52:07,412 INFO [JndiSessionRegistrarBase] Binding the following Entries in Global JNDI: 

    EchoBean/remote - EJB3.x Default Remote Business Interface 
    EchoBean/remote-com.stackoverflow.q2440956.samples.services.hello.Echo - EJB3.x Remote Business Interface 

Cuando miro la traza que proporcionó, no puedo ver nada relacionado con la interfaz remota (que necesitará para una llamada remota) y, en consecuencia, no tiene nombre JNDI. Entonces la pregunta es: ¿su SLSB define e implementa una interfaz remota correctamente?

En mi caso, mi frijol se define así:

@Stateless 
public class EchoBean implements Echo { 
    ... 
} 

Y la interfaz remota que parece:

@Remote 
public interface Echo { 
    String echo(final String in); 
} 

¿Tiene algo similar?

+0

Gracias Pascal, por alguna razón, omití el "implements Echo" en mi ejb bean, y es por eso que no hay una interfaz remota que pueda delimitarse. – portoalet

Cuestiones relacionadas