Anzeige:
Ergebnis 1 bis 5 von 5

Thema: No suitable driver found (Java vs Sybase)

  1. #1
    Registrierter Benutzer
    Registriert seit
    02.09.2005
    Beiträge
    8

    NoClassDefFound (Java vs Sybase)

    Guten Tag


    Ich bin an einem Java-Programm, das an einer Sybase-Datenbank angebunden ist.
    Dieses Programm lässt sich als Applet über den Browser öffnen.

    Ich habe mal eine Connection erstellt und bin auch in der Lage, SQL-Statements an die DB zu schicken und sie gibt mir Antwort.

    Für die Datenbankanbindung habe ich folgenden Code verwendet:

    Code:
    DriverManager.registerDriver(<sybase-treiber>)
    Connection cn = DriverManager.getConnection(url,user,pass)
    Natürlich noch try-catch darum. Wie gesagt, es funktioniert eigentlich schon, jedoch nur, wenn ich die Applikation aus der Entwicklungsumgebung starte (Netbeans).
    Starte ich die Applikation über den Browser, erhalte ich eine "NoClassDefFound"-Exception.

    Das Applet wird mit einem CLASSPATH gestartet, in dem sich die Datei jconn3.jar befindet, also die Datei, die mir es ermöglicht, mit der DB zu kommunizieren. Entferne ich diese Datei aus dem Projekt-Ordner, habe ich die selbe Exception auch in der Entwicklungsumgebung. Ich gehe davon aus, dass alles korrekt ist, so wie es sein sollte.

    Ich kann mir beim besten Willen nicht erklären, warum es über die Entwicklungsumgebung funktioniert, nicht aber über den Browser auf einem anderen PC.

    Habe ich irgendwas nicht beachtet oder so? Ich bedanke mich für jeden Hinweis.
    Geändert von anquijix (25-09-2008 um 09:59 Uhr) Grund: Das Problem liegt woanders

  2. #2
    Registrierter Benutzer Avatar von fs111
    Registriert seit
    23.03.2002
    Beiträge
    594
    Woher soll denn der andere PC wissen, was für jars Du in Deinem CLASSPATH hast? Du musst schon alle jars mitliefern oder ein "überjar" bauen.

    fs111
    ....::::Mein Blag::::....

  3. #3
    Registrierter Benutzer
    Registriert seit
    02.09.2005
    Beiträge
    8
    Ich muss was berichtigen (Habe den Titel geändert). Das Problem ist nicht "No suitable driver found", sondern "NoClassDefFound". Sprich, das Programm findet die Klasse "com.sybase.jdbc3.jdbc.SybDriver" nicht. Diese Klasse ist vorhanden in jconn3.jar. Daher kann ich es erst recht nicht verstehen, warum es nicht funktioniert.


    Die Applikation wird gestartet auf dem Webserver mit folgendem initscript:

    Code:
    #!/bin/sh -e
    
    JAVABIN=/usr/lib/jvm/java-6-sun-1.6.0.07/bin/java
    LOGPATH=<logpath>
    
    CLASSPATH="/var/www/app/app.jar:/var/www/app/jconn3.jar"
    JAVAOPT="-Xmx128M -cp ${CLASSPATH}"
    STARTCLASS=bla.bliblu.DbServer
    PORT=1026
    CONF="-config /etc/app.properties"
    PID=`ps -ef |grep idistest | head -1 | awk '{print $2}'`
    
    CMD="${JAVABIN} ${JAVAOPT} ${STARTCLASS} ${PORT}"
    
    NAME=app
    N=/etc/init.d/${NAME}
    
    test -x ${JAVABIN} || exit 0
    
    case "$1" in
            start)
                    echo -n "Starting testserver: "
                    cd ${LOGPATH}
                    ${CMD} ${CONF} &
                    echo "done."
                    exit 0
            ;;
            stop)
                    echo -n "Stopping test server: "
                    #echo -ne "\n\n     End $PID: "
                    kill -9 $PID
                    ${CMD} stop
                    echo "done."
                    exit 0
            ;;
            restart)
                    echo "Restarting testserver:"
                    ${N} stop
                    sleep 1
                    ${N} start
                    exit 0
            ;;
            reload)
                    echo "Reloading testserver configration:"
                    ${CMD} reload
                    echo "done."
                    exit 0
            ;;
            *)
                    echo "Usage: ${N} {start|stop|restart|reload}"
                    exit 1
            ;;
    esac
    Hervorzuheben ist der CLASSPATH in diesem Startscript. Darin ist die benötigte jconn3.jar vorhanden. Der im ersten Post beschriebene Code stellt eine manuelle Datenbankverbindung dar, während der Rest der Applikation auf andere Weise mit der DB kommuniziert. Aber zumindest kann ich den Rest der Appi auch im Browser nutzen. Nur meinen manuellen Teil nicht, obschon ich im CLASSPATH des Webservers die benötigte Datei angegeben habe.

    Ich denke nicht, dass ich auf dem Client-PC den CLASSPATH anpassen muss, da die Appi ja auf dem Webserver läuft und somit nur dessen CLASSPATH verwendet.

    Hoffe, einigermassen verständlich mein Problem dargelegt zu haben.
    Geändert von anquijix (25-09-2008 um 10:43 Uhr)

  4. #4
    Registrierter Benutzer Avatar von fs111
    Registriert seit
    23.03.2002
    Beiträge
    594
    Moment, moment, der CLASSPATH auf dem Server hat rein gar nichts mit dem auf dem Client zu tun. Für den Web-Server ist das applet einfach nur eine Datei, die er ausliefert mehr nicht. Das Applet läuft dann aber komplett auf dem Client ab. Das ist Dein Denkfehler.
    ....::::Mein Blag::::....

  5. #5
    Registrierter Benutzer
    Registriert seit
    02.09.2005
    Beiträge
    8
    Naja, diese Applikation wird in einem Spital auf unzähligen Clients genutzt, es kann ja nicht sein, dass ich auf jedem Client den CLASSPATH anpassen muss?

    Wie dem auch sei, ich habe den CLASSPATH auf meinem Windows-Client angepasst und die jconn3.jar darauf abgelegt. Spätestens jetzt sollte der Client die SybDriver-Klasse finden, tut es jedoch nicht.

    Der erheblich grössere Teil (sprich alles ausser diese manuelle Verbindung) der Applikation läuft auch ohne Client-Modifikation.
    Daher muss ich meinen Denkfehler erweitern..
    Der Webserver, der den richtigen CLASSPATH hat, liefert die Applikation mit selbem, zumindest habe ich das bis anhin angenommen. Auf irgendeine Weise muss ja der Webserver die DB-Anbindungs-Klassen liefern können, sonst würde die gesamte Appi nicht funktionieren.

    Habe jetzt gerade mal auf dem Webserver die jconn3.jar in ein anderes Verzeichnis ausserhalb des im Startscript aufgeführten CLASSPATH verschoben. Jetzt erhalte ich auch beim funktionierenden Teil der Applikation die Fehlermeldung "No suitable driver found". Von daher erhärtet sich mein Verdacht, dass das Problem auf dem Webserver zu suchen ist, und nicht nicht auf den Clients, zumindest habe ich keine bessere Erklärung. Am Code (imports etc.) kann es auch nicht liegen..
    Ein netstat -a auf dem Client zeigt mir auch keine direkte Verbindung zur DB an, da alles über den Webserver zu laufen scheint. Ausser dem graphischen Applet scheint sonst nichts auf dem Client zu laufen.

    Wenn es jetzt wirklich am Client läge, warum geht es dann trotzdem nicht, wenn ich auf dem Client die jconn3.jar ablege und in den CLASSPATH aufnehme?

    Ich bin froh um Berichtigungen, da sich mein Verständnis von Java in Grenzen hält und ich in diesem Projekt noch meine liebe Mühe habe. (Habe nur sehr wenig Programmier-Erfahrung und der Hauptverantwortliche für das Projekt ist nicht mehr anwesend, sprich es ist auf mich unerfahrenen Entwickler abgeschoben..)
    Geändert von anquijix (26-09-2008 um 10:04 Uhr)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •