MySQL Communication Link Failure

Strece

Mitglied
Hallo,

ich arbeite derzeit an einem JApplet das eine Verbindung zu einer Datenbank aufbauen soll, damit man dann in der GUI verschiedene SQL Statements durchführen kann.
Derzeit habe ich das Programm soweit programmiert, das ein Login Frame beim Start erscheint über das man die nötigen Daten eingibt.

Ich benutze Netbeans als IDE und habe dem Projekt die MySQL Bibliothek mit dem JDBC Connector hinzugefügt. In Netbeans läuft alles super, also wenn ich dort das Programm per Applet Viewer ausführe, klappt die Verbindung tadellos.

Aber wenn ich das Applet per Html Datei aufrufe, hatte ich am Anfang das Problem das der JDBC Treiber nicht gefunden wurde, habe dann mithilfe von googeln, diesen einfach in das lib Folder von Java kopiert und nun findet er den.

Mein Problem ist aber die Verbindung, den im Browser sagt er mir immer nach eingeben der Daten und dem Druck auf Login: Communication link failure. Last paket sent to the server was 0ms ago", aber in Netbeans per AppletViewer klappt das Verbinden komischerweise.

Weiß vielleicht jemand das Problem, hier nochmal der Code Ausschnitt mit der Verbindung:
Java:
private void cmdLoginActionPerformed(java.awt.event.ActionEvent evt) {                                         
        boolean connect = false;
        try {
            Class.forName( "com.mysql.jdbc.Driver" );
            cn = DriverManager.getConnection( "jdbc:mysql://" + txtServer.getText() + ":" + txtPort.getText() + "/patch_liste", txtUser.getText() ,  txtPassword.getText() );
            st = cn.createStatement();
            connect = true;
        }
        catch( Exception ex ) {
            JOptionPane.showMessageDialog(null,ex.getMessage(),"Fehler", JOptionPane.CANCEL_OPTION);
        }
        if (connect == true)
        {
            lblStatus.setText("Verbindung mit " + txtServer.getText() + " als " + txtUser.getText() + " erfolgreich hergestellt.");
            loginFrame.setVisible(false);
        }
}

Habe durch die Suche keine Lösung gefunden, die mein problem erklären würde.

Mfg,

Strece
 

L-ectron-X

Gesperrter Benutzer
Datenbankverbindungen über Applets funktionieren zwar bürgen aber ein riesiges Sicherheitsproblem.
Den Treiber ins lib-Verzeichnis des Interpreters zu kopieren, ist immer eine schlechte Idee. Er gehört in den Classpath.
Zeig mal den Inhalt des Applet-Tags in deiner HTML-Datei.
 

Strece

Mitglied
Der MySQL Server läuft lokal im Intranet eines Firmennetzwerks, also ist nicht von außen erreichbar. Wieso ist den eine Verbindung vom Applet aus ein Sicherheitsrisiko? Wird da was in Klartext übertragen?
Ja das mit Classpath habe ich mir mal durchgelesen, aber so wie ich das verstanden habe muss man dann das Programm in der Konsole ausführen mit java -c, aber nen Applet geht ja schlecht über die Konsole.

Hier die HTML Datei:
Code:
<html>
<head>
<title>Applet</title>
</head>
<body>
<applet code="PatchListe.class" width="800" height="600">
</applet>
</body>
</html>

EDIT: Ok habe mal kurz Google benutzt und nun mein HTML Code um ein <param> erweitert, der auf den JDBC Connector zeigt, befindet sich im selben Ordner wie die .class Datei und die HTML Datei.
Code:
<html>
<head>
<title>Applet</title>
</head>
<body>
<applet code="PatchListe.class" width="800" height="600">
<param name="archive" value="mysql-connector-java-5.1.6-bin.jar"/>
</applet>
</body>
</html>

Das ist glaube ich dann ne bessere Lösung, als einfach in lib Folder zu kopieren, aber leider besteht das Problem weiterhin.

Mfg, Strece
 
Zuletzt bearbeitet:

L-ectron-X

Gesperrter Benutzer
Wieso ist den eine Verbindung vom Applet aus ein Sicherheitsrisiko? Wird da was in Klartext übertragen?
Das nicht, aber man kann das Applet dekompilieren und kommt so an die Zugangsdaten zur Datenbank. Du müsstest also, wenn es relevant ist, einen Proxy zwischenschalten. Eine Middleware, bspw. einen RMI-Server, der die DB kennt und die Anfragen macht und die Ergebnisse an das Applet zurückliefert.

aber so wie ich das verstanden habe muss man dann das Programm in der Konsole ausführen mit java -c, aber nen Applet geht ja schlecht über die Konsole.?
Was du meinst gilt nur für Applikationen und da auch nur zum Teil. Es kommt immer darauf an, wie man es ausliefert.
Damit der Treiber im Classpath liegt, setzt du ihn einfach ins archive-Attribut des Applet-Tags. Mehr dazu in der FAQ.
Und damit das ganze dann auch noch funktioniert, muss dein Applet, so fern es sich in einer Jar-Datei befindet, und der Treiber signiert werden. Mehr dazu in der FAQ.

Das ist glaube ich dann ne bessere Lösung, als einfach in lib Folder zu kopieren, aber leider besteht das Problem weiterhin.
Ja, weil sie immer noch falsch ist.
 

Strece

Mitglied
Ja, weil sie immer noch falsch ist.

Das war mir natürlich auch klar, da es nicht funktioniert muss ja was falsch sein. ;)

Naja habs jetzt mithilfe von der FAQ geschafft alles zum Laufen zu kriegen, habe die HTML Datei abgeändert:

Code:
<html>
<head>
<title>Applet</title>
</head>
<body>
<applet archive="PatchListe.jar, mysql-connector-java-5.1.6-bin.jar" code="patchliste.PatchListe" width="800" height="600">
</applet>
</body>
</html>

Und natürlich Applet und mysql-connector signiert. Jetzt läuft es perfekt auch im Browser. Danke für die prompte Hilfe.

Mfg, Strece
 

Ähnliche Java Themen


Oben