J2EE Java-EJB + JBoss4.0.3 Problem
ill 25.10.2006 - 23:10 912 7
ill
...
|
Hallo Ich suche jetz schon seit einigen Stunden nach einem Fehler, einer NullPointer-Exception um genau zu sein, in einem Programm dass ich für die Schule schreiben muss. Es handelt sich dabei um ein J2EE-Projekt mit Server+Swing-Client, der Server läuft auf JBoss. Die Nullpointer-Exception tritt gleich beim Login auf, und ich finde beim besten Willen den Fehler nicht. Jetz is halt die Frage ob es irgendwas bringt hier Code-stellen zu posten, da es etliche in verschiedensten Klassen sind und bei J2EE die Fehler ja bekanntlich _überall_ sein können. Jetz frage ich mich ob es hier zufällig einen fähigen Programmierer gibt dem ich das gesamte Projekt schicken könnte und der sich das ganze mal schnell ansieht (Entwicklungsumgebung: Netbeans 5.0), vielleicht ist es eh was banales was ich einfach nicht finden kann. Wäre großartig tia
|
that
ModeratorHoffnungsloser Optimist
|
Bei Java-Exceptions gibts eh so schöne Stacktraces, da braucht man nur mehr schauen welche Variable wo Null ist, und dann halt zurückverfolgen warum das so ist.
Ansonsten halt die Standardtaktik: Codeteile auskommentieren bis das Problem nicht mehr auftritt, dann hast du den Fehler eingegrenzt.
|
ill
...
|
Ja, danke, das hab ich gestern eh einige Stunden lang gemacht, das komische ist: Im Client: this.initInitialContext();
Object ref = ctx.lookup("DataBean");
System.out.println("Lookup OK");
pack.DataRemoteHome dRemoteHome = (DataRemoteHome)PortableRemoteObject.narrow(ref, DataRemoteHome.class);
pack.DataRemote data = dRemoteHome.create();
System.out.println(data.getString());
das ist mein Lookup und create von meinem data-object (was die verbindung zum Server darstellt. data.getString() funktioniert hier, das alles läuft in ner eigenen Hilfsklasse ab dann gibts bei mir ein JFrame Login, im Konstruktor steht das: initComponents();
this.data = con.getConnection();
try
{
System.out.println(data.getString());
}
catch(Exception ex)
{
ex.printStackTrace();
}
con.getConnection holt sich einfach von meiner Hilfsklasse das data - Object, nur hier scheint es das data - object dann einfach nicht mehr zu geben, data.getString() wirft eine Nullpointer-Exception Ich hab eben keine Ahnung wo hier dieses data überschrieben oder verworfen werden kann, bin ziemlich ratlos
|
gue
Addicted
|
3 Möglichkeiten (was der kleine Ausschnitt an Code hier zulässt):
1.) con.getConnection() liefert null zurück -> untersuchen. 2.) Im Konstruktor gibt es eine lokale Variable data, die mit null initialisiert wurde. Du weist dann this.data zu aber data ist noch immer null. -> Lokale Variable entfernen. 3.) Die NullpointerException wird _in_ getString() geworfen (Stacktrace wär interessant) -> Fehler dort suchen.
|
ill
...
|
Also, du hast recht, con.getConnection() liefert null zurück, warum das so ist ist mir allerdings schleierhaft eigentlich müsste meine Connection ja passen oder? public Context initInitialContext()
{
// Context initialisation
try
{
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
env.put(Context.PROVIDER_URL, "jnp://localhost:1099");
//env.put(Context.PROVIDER_URL, "jnp://wotan.activenet.at:1099");
env.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
ctx = new InitialContext(env);
return ctx;
}
catch (Exception ex)
{
System.err.println("Fehler beim initialisieren des Context: " + ex.getMessage() );
return null;
}
}
initialContext gibt keinen Fehler zurück und gleihc nach dem .create() kann ich auf data zugreifen getConnection() sieht auch ganz einfach aus: public DataRemote getConnection()
{
return data;
}
und das is eigentlich alles in dieser Klasse...
|
DKCH
...
|
wird das .create() auch mal wo aufgerufen? wenn du data nie was zuweist wirst du auch immer null zurückkriegen, und in deinen etwas verwirrenden segmenten fehlt mir das irgendwie...
|
ill
...
|
ja, create() wird direkt in der Hilfsklasse aufgerufen this.initInitialContext();
Object ref = ctx.lookup("DataBean");
System.out.println("Lookup OK");
pack.DataRemoteHome dRemoteHome = (DataRemoteHome)PortableRemoteObject.narrow(ref, DataRemoteHome.class);
pack.DataRemote data = dRemoteHome.create();
System.out.println(data.getString());
ich hab mich schon gefragt ob dRemoteHome auf nichts verweist, aber es ist einfach ein wenig komisch dass das data.getString() direkt nach dem create() ohne Probleme funktioniert
|
DKCH
...
|
mein lieber, jetzt poste mal bitte die ganze(n) klasse(n) und schnipsel nicht immer so unwesentliche dinge wie die methodennahmen ab, das macht es (zumindest für mich) nicht einfacher herauszufinden, was da wann wie passiert...
|