2010-03-14 37 views
5

Tôi có lỗi sauJBoss EJB Bean không bị ràng buộc

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

cố gắng truy cập vào một CounterBean.jar EJB JAR triển khai trên JBoss5 từ một ứng dụng client bên ngoài Application Server.

Từ nhật ký Jboss, có vẻ như nó không có tên JNDI toàn cầu? Được không? Tôi đã làm gì sai?

JBoss log:

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: 

Mã khách hàng là: Thông điệp

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

Lỗi:

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) 

Trả lời

6

Đây là những gì tôi nhận được khi tôi triển khai một đơn giản Stateless Session Bean (SLSB) với giao diện từ xa trên 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 

Khi tôi nhìn vào dấu vết bạn đã cung cấp, tôi không thể thấy bất kỳ thứ gì liên quan đến giao diện từ xa (bạn cần gọi từ xa) và do đó, không có tên JNDI cho nó. Vì vậy, câu hỏi là: SLSB của bạn có xác định và thực hiện một giao diện từ xa đúng không?

Trong trường hợp của tôi, đậu của tôi được định nghĩa như thế này:

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

Và giao diện từ xa trông giống như:

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

Bạn có một cái gì đó tương tự?

+0

Cảm ơn Pascal, vì lý do nào đó, tôi đã bỏ qua "thực hiện Echo" trong đậu ejb của tôi, và đó là lý do tại sao không có giao diện từ xa nào bị chặn. – portoalet

Các vấn đề liên quan