代码之家  ›  专栏  ›  技术社区  ›  Lydon Ch

jboss ejb bean未绑定

  •  5
  • Lydon Ch  · 技术社区  · 14 年前

    我有以下错误

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

    试图从应用服务器外部的客户机应用程序访问jboss5上部署的ejb jar compellean.jar。

    从jboss日志来看,它似乎没有全局JNDI名称?这样行吗? 我做错了什么?

    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:
    

    客户代码为:

    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);
        }
    }
    

    错误信息:

    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)
    
    1 回复  |  直到 13 年前
        1
  •  6
  •   Pascal Thivent    14 年前

    这就是我在jboss 5.x上部署带有远程接口的简单无状态会话bean(slsb)时得到的:

    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 AbstractBeanMetaData@a130d1{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
    

    当我查看您提供的跟踪时,我看不到与远程接口相关的任何内容(您需要进行远程调用),因此,它没有JNDI名称。所以问题是:您的SLSB是否正确地定义和实现了远程接口?

    在我的例子中,我的bean的定义如下:

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

    远程接口如下:

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

    你有类似的东西吗?