Glassfish v3 / JNDI-Eintrag kann nicht gefunden werden Probleme!
Ich habe Probleme versuchen, Aufruf einer EJB-Methode aus einer Java-Anwendung Client.
Hier ist der code.
EJB-Remote-Interface
package com.test;
import javax.ejb.Remote;
@Remote
public interface HelloBeanRemote {
public String sayHello();
}
EJB
package com.test;
import javax.ejb.Stateless;
@Stateless (name="HelloBeanExample" , mappedName="ejb/HelloBean")
public class HelloBean implements HelloBeanRemote {
@Override
public String sayHello(){
return "hola";
}
}
Hauptklasse (ein anderes Projekt)
import com.test.HelloBeanRemote;
import javax.naming.Context;
import javax.naming.InitialContext;
public class Main {
public void runTest()throws Exception{
Context ctx = new InitialContext();
HelloBeanRemote bean = (HelloBeanRemote)ctx.lookup("java:global/Test/HelloBeanExample!com.test.HelloBeanRemote");
System.out.println(bean.sayHello());
}
public static void main(String[] args)throws Exception {
Main main = new Main();
main.runTest();
}
}
Na, was ist mein problem? JNDI-Eintrag für diese EJB können nicht gefunden werden!
java.lang.NullPointerException
at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:297)
at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:271)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:430)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at testdesktop.Main.runTest(Main.java:22)
at testdesktop.Main.main(Main.java:31) Exception in thread "main" javax.naming.NamingException: Lookup failed for 'java:global/Test/HelloBeanExample!com.test.HelloBeanRemote' in SerialContext [Root exception is javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext [Root exception is java.lang.NullPointerException]]
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:442)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at testdesktop.Main.runTest(Main.java:22)
at testdesktop.Main.main(Main.java:31) Caused by: javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext [Root exception is java.lang.NullPointerException]
at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:276)
at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:430)
... 3 more Caused by: java.lang.NullPointerException
at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:297)
at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:271)
... 4 more Java Result: 1
Habe ich versucht mit verschiedenen JNDI-Einträge, aber nichts funktioniert (ich habe diese Einträge von NetBeans Konsole):
INFO: Portable JNDI-Namen EJB-HelloBeanExample : [java:global/Test/HelloBeanExample, java:global/Test/HelloBeanExample!com.test.HelloBeanRemote]
INFO: Glassfish-spezifische (Nicht-portable) - JNDI-Namen EJB-HelloBeanExample : [ejb/HelloBean, ejb/HelloBean#com.test.HelloBeanRemote]
Also versuchte ich mit den folgenden Einträgen, aber ich habe die gleiche Ausnahme :
- java:global/Test/HelloBeanExample
- java:global/Test/HelloBeanExample!com.test.HelloBeanRemote
- ejb/HelloBean
- ejb/HelloBean#com.test.HelloBeanRemote
Ich bin mit Netbeans 6.8 und Glassfish v3!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eigentlich Ihr problem ist nicht der Suche nach der JNDI-Referenz Ihres Bohnen-oder würden Sie etwas wie das:
Nein, hier, ich vermute eine einfache classpath problem, du bist einfach fehlen einige jar in den Klassenpfad des client-Projekts. Mit GlassFish v3, hinzufügen
$GF_HOME/modules/gf-client.jar
genug sein sollte, wie erwähnt, in Wie kann ich einen Zugriff auf eine Entfernte EJB-Komponente aus einer stand-alone java-client? in GlassFish ist die EJB-FAQ (mein Verständnis ist, dass diese jar-Datei ersetzen soll$GF_HOME/lib/appserv-rt.jar
ist es aus Gründen der Kompatibilität mit GFv2). Es ist jedoch wichtig zu verweisen, diegf-client.jar
von der GlassFish-installation Verzeichnis oder die Gläser erklärte in seinem manifest nicht gefunden werden.Einmal haben Sie dieses Problem behoben haben, sollten Sie in der Lage sein, um nachschlagen Ihr bean über JNDI-Namen, GlassFish Ausgänge in den logs. Ich würde vorschlagen, die Verwendung der neuen tragbaren globalen JNDI-Namen von Java EE 6.
Nur für den Fall, das Was ist die syntax für tragbare globalen JNDI-Namen EJB 3.1? Eintrag aus dem GlassFish-EJB-FAQ bietet eine schöne Zusammenfassung dieses neue übereinkommen. Und wenn Sie mehr Informationen möchten, check out: http://blogs.oracle.com/MaheshKannan/entry/portable_global_jndi_names.
Habe ich etwas gefunden! Ich denke, es ist eine "Besondere Weise" zum hinzufügen und konfigurieren von Komponenten mit NetBeans! Ich habe gelesen das netbeans die tutorials von web-Seiten und anscheinend war ich die Dinge tun, die falsch sind! Also, das ist nicht wirklich eine Lösung für dieses problem, aber vielleicht wenn du das liest einer von denen http://netbeans.org/kb/trails/java-ee.html finden Sie Ihre aswers!
Hinsichtlich
Ich hatte das gleiche problem. Ich gegoogelt das web und folgte tutorials von Oracle-Linie durch die Linie eine standalone-java-client aber immer noch nichts funktioniert. Ich kam in http://glassfish.java.net/javaee5/ejb/EJB_FAQ.html und es hat eine information, dass ich bereits versucht um das Problem zu beheben.
Werde ich nur starten meine IDE, sauber und das Projekt erstellen; können auch erstellen Sie das Projekt neu. Und wer weiß, wenn der Mond voll ist, wird mein code könnte gut laufen 🙂 So würde vielleicht auch versuchen
Mein stand-alone-client endlich zum laufen! Der trick war, nur Neustart der Netbeans IDE, die deinstallation von Anwendung und bereitstellen der it. Das sollte dein problem lösen(vorausgesetzt es gibt keine anderen Fehler im code und Konfiguration).