"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

J2EE Java-EJB + JBoss4.0.3 Problem

ill 25.10.2006 - 23:10 912 7
Posts

ill

...
Avatar
Registered: Nov 2003
Location: Salzburg
Posts: 2059
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

Moderator
Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11338
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

...
Avatar
Registered: Nov 2003
Location: Salzburg
Posts: 2059
Ja, danke, das hab ich gestern eh einige Stunden lang gemacht, das komische ist:

Im Client:
Code:
            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:

Code:
        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
Avatar
Registered: Feb 2003
Location: Linz
Posts: 400
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

...
Avatar
Registered: Nov 2003
Location: Salzburg
Posts: 2059
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?

Code:
    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:

Code:
    public DataRemote getConnection()
    {
        return data;
    }

und das is eigentlich alles in dieser Klasse...

DKCH

...
Registered: Aug 2002
Location: #
Posts: 3280
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

...
Avatar
Registered: Nov 2003
Location: Salzburg
Posts: 2059
ja, create() wird direkt in der Hilfsklasse aufgerufen

Code:
            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

...
Registered: Aug 2002
Location: #
Posts: 3280
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...
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz