JNDI-Name binding in JBOSS 5.1.0 Beta
Ich bin nach dem MasteringEJB4thEdition Buch, das ich vom Server heruntergeladen website.
Es ist ein einfaches Beispiel HelloBean, die perfekt funktioniert mit GlassFish V3-app-server. Das gleiche Beispiel bei Bereitstellung auf JBOSS schlägt fehl, weil der JNDI-lookup von Namen.
Gibt es irgendeine Regel, wie der JNDI-lookup Namen in JBOSS entschieden werden, wenn wir nicht bieten keine ? Fand ich beim googeln, dass es "ear-file-name/- Bean-class-name/remote", aber es funktioniert nicht für mich.
Hier ist die bean -
1. package com.hardik.stateless;
2. import javax.ejb.Stateless;
3. import javax.ejb.Remote
4.
5.
6.
7.
8. @Stateless
9. @Remote(Hello.class)
10. public class HelloBean implements Hello {
11.
12. public String hello() {
13. System.out.println("hello()");
14. return "Hello, World!";
15. }
16.
17. }
Hier ist der client, den ich benutze:
1. package com.hardik.stateless;
2.
3. import javax.naming.Context;
4. import javax.naming.InitialContext;
5.
6.
7. /**
8. * This is an example of client code which invokes
9. * methods on a simple, remote stateless session bean
10. * @author hardik
11. *
12. */
13. public class HelloClient {
14.
15. public static void main(String[] args) throws Exception {
16.
17. Context ctx = new InitialContext();
18. //works for Glassfish
19. //Hello hello = (Hello) ctx.lookup("com.hardik.stateless.Hello");
20. //doesn't work for JBOSS
21. Hello hello = (Hello) ctx.lookup("hello-bean/HelloBean/remote");
22.
23. System.out.println(hello.hello());
24. }
25.
26. }
Hier ist die Fehlermeldung bekomme ich beim ausführen der client -
# $ wsrunclient.sh -Djava.naming.factory.initial=org.jnp.interfaces.NamingContextFactory -Djava.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces -Djava.naming.provider.url=jnp://localhost:1099 -cp "lib/hello-bean.jar:dist/hello-client.jar:/home/hardik/apps/jboss/client/*" com.hardik.stateless.HelloClient
# log4j:WARN No appenders could be found for logger (org.jnp.interfaces.TimedSocketFactory).
# log4j:WARN Please initialize the log4j system properly.
# Exception in thread "main" javax.naming.NameNotFoundException: hello-bean 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.GeneratedMethodAccessor260.invoke(Unknown Source)
# 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:722)
# at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:682)
# at javax.naming.InitialContext.lookup(InitialContext.java:392)
# at com.hardik.stateless.HelloClient.main(Unknown Source)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe das problem behoben, nachdem die Suche. Ich hatte, um namespace-Informationen zu meiner ejb-jar.xml Datei.
Ich es geändert
von:
zu:
Fand ich die Antwort hier:
http://www.jboss.org/index.html?module=bb&op=viewtopic&t=157022
ich denke, Sie müssen fügen Sie die Folgende
Properties
imClient/log4j.properties
:Ich bin mir nicht sicher über JBoss 5, aber unter JBoss 4, die JMX-Konsole verfügt über ein MBean genannt JNDIView, die Operationen hat, um einen dump der gesamten JNDI-Struktur auf der Konsole. Wenn das immer noch gibt es in der JBoss 5, Sie sollten in der Lage sein zu finden Ihre EJB auf.