Jar-Ausführung / RMI / Datenbank / NullPointerException

sentence

Grünschnabel
Halli hallo.

also ich habe schon viel auf google gesucht, aber nichts hilfreiches gefunden, darum hier mein problem:


ich habe in java eine kleine applikation mit eclipse gebastelt.

die applikation bindet ein objekt über rmi an die registry und ein client kann sie abrufen und mit ihr methoden benutzen. unter anderem kann man so auch werte in eine mysql datenbank schreiben.

das funktioniert in eclipse auch wunderbar.


ich habe für die bindung an die registry eine spezielle klasse und diverse klassen die methoden ausführen (meine clients)

ich starte also zunächst die klasse für die registry und danach den client der sich das objekt holt.

nun habe ich diese klassen jeweils als jar exportiert um es ausserhalb von eclipse zu testen.

die anbindung der registry funktioniert beim aufruf.

sobald ich aber den client aufrufe bekomme ich eine fehlerausgabe.
der client ruft nebenbei erst methoden auf und greift auch auf die datenbank zu.

ich bekomme eine u.a eine meldung:

Exception in thread "main" java.lang.NullPointerException at <Pfad zu einer Klasse> findbyKey...

alles in allem frage ich mich wieso es in eclipse funktioniert und so nun nicht?

hat jemand tipps, oder anregungen, ich bin für jeden ratschlag dankbar :-)


Beste grüße!
 
Guten Morgen,

hatte gestern ein ähnliches Problem und hab stundenlang rumprobiert!

Habs am Ende so hinbekommen:

- jar Datei mit WinRar öffnen
- Ordner suchen, in dem die betreffende Klasse liegt, Klasse aus Archiv löschen
- Klasse aus deinem Projektverzeichnis (der Workbench von Eclipse) in Archiv kopieren
- schließen und starten.

Probier mal ob das hilft.

Liebe Grüße
 
hallo,

danke für die idee.

funkt so aber leider auch nicht :( die klassen im jar und in meinem normalen klassenverzeichnis sind auch identisch.
die klassen funktionieren ansonsten ja auch in eclipse.

ich glaube mittlerweile auch es liegt nur an der verbindung zur datenbank.

normale abfragen, ohne zugriff auf die datenbank funktionieren.
mit normalen abfragen meine ich rmi aufruf und methoden-nutzung.

ich glaube er kann den treiber nicht finden. ich habe diesen (mysql-connector-java-5.0.7-bin.jar) jedoch explizit im classpath angegeben.
und zwar mit direktem pfad zu ihm.
habe sogar schon die version 3.0 benutzt aber damit gehts auch nicht.



:confused: :(

ideen?

danke & viele grüße
 
Hast du es direkt mit Eclipse oder einem PlugIn als jar-Archiv extrahiert?

Versuch mal das PlugIn FatJar von http://fjep.sourceforge.net/
Achtung: auf Installations Beschreibung achten.

Da kannst du den sql connector zum hinzufügen auswählen, mit dem Eclipse eigenen Extrahieren hat es bei mir auch nicht funktioniert.

Liebe Grüße
 
Bin leider grad im Büro und kann das nicht testen.

Ich habe aber grade in die Jar Datei des Clients reingeschaut und da ist der Connector auch drin :confused:


Hier noch die Fehlermeldung falls das jemandem was sagt =) :


Also ich starte wie gesagt die RMI Anbindung in einem Fenster


dann in einem anderen den client:


Exception in thread "main" java.lang.MullPointerException

at de.we.Project.db.AccountMapper.findByKey
<AccountMapper.java:55>
at de.we.Project.VerwaltungImpl.getAccountbyID <VerwaltungImpl.java:191>
at sun.reflect.NativeMethodAccessorImpl.invoke0 <Native Method>
at sun.reflect.NativeMethodAccessorImpl.invoke <Unknown Source>
at sun.reflect.DelegatingMethodAccessorImpl.invoke< Unknown Source>
at sun.reflect.Method.invoke <Unknown Source>
at sun.rmi.server.UnicastServerRef.dispatch <Unknown Source>
at sun.rmi.transport.Transport$1.run <Unknown Source>
at java.security.AccessController.doPriviledged <NativeMethod>
at sun.rmi.transport.transport.serviceCall <Unknown Source>
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0<Unknown Source>
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run<Unknown Source>
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask<Unknown Source>
at java.util.concurrent.ThreadPoolExecutor$Worker.run<Unknown Source>
at java.lang.Thread.run<Unknown Source>
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer<Unknown Source>
at sun.rmi.transport.StreamRemoteCall.executeCall<Unknown Source>
at sun.rmi.server.RemoteObjectInvocationHandler.invoke<Unknown Source>
at $Proxy0.getAccountbyId<Unknown Source>
at de.we.Project.clients.Client04.main<Client04.java:40>


Im Fenster in dem die Registry gestartet wurde steht ausserdem noch:

java.lang-ClassNotFoundException: com.mysql.jdbc.Driver

at java.net.URLClassLoader$1.run <Unknown Source>
at java.net.URLClassLoader$1.run<Unknown Source>



Beste Grüße!
 
Zurück