# Aus einem Applet eine Datenbankverbindung starten?



## mc_maki (27. Okt 2008)

Hallo,

ich habe ein Prog, dass aus einer Datenbank einträge liest und diese ausgibt.
wenn ich die jar datei starte dann funktioniert alles wunderbar.
ich möchte es aber nun über ein applet starten lassen.
wenn ich aus dem applet starte kommt aber beim versuch des verbindungsaufbaus immer ein fehler bzw. es fliegt eine exception die ich abfange.

mittels ex.getMessage() zeigt er folgendes an : com.mysql.jdbc.Driver

das ist der treiber denich verwende

gibt es da komplikationen beim treiber?


----------



## mc_maki (27. Okt 2008)

das komische ist ja. wenn ich das applet über netbeans starte.
also rechte maustaste run - dann funktioniert es. er kann eine verbindung öffnen, weil die exception nicht fliegt.

aber wenn ich die datei nutze, die netbeans mir erstellt (html-datei), dann funktioniert das nicht mehr!
dann kommt der fehler.


----------



## tfa (27. Okt 2008)

Du solltest auch schreiben, welche Exception fliegt.
Ich nehme an, der JDBC-Treiber ist nicht im Klassenpfad und wird deswegen nicht gefunden.


----------



## FArt (27. Okt 2008)

.. und sobald der Treiber im Klassenpfad ist, wirst du feststellen, dass DB Zugriffe aus einem Applet suboptimal sind...


----------



## mc_maki (27. Okt 2008)

und was soll ich eure meinung nach tun?
das programm braucht einen datenbankzugriff und muss aus dem browser heraus gestartet werden.


----------



## L-ectron-X (27. Okt 2008)

FArt hat gesagt.:
			
		

> ...dass DB Zugriffe aus einem Applet suboptimal sind...


Das stimmt, es wäre sicherer, eine Middleware dazwischen zu schalten, bspw. einen RMI-Server.

Eigentlich könnten nur 2 Exceptions nach deiner Beschreibung in Frage kommen - AccessControlException oder ClassNotFoundException. Um dir zu helfen brauchen wir die komplette Fehlermeldung.


----------



## tfa (27. Okt 2008)

Das Applet sollte sich mit einem (Application-)Server verbinden, der die Daten liefert, also aus der DB liest. Stichwort 3-Schicht-Anwendung.


----------



## The_S (27. Okt 2008)

Dann verwende J2EE! Ein Applet ist Client-seitig. D. h. dass dein Byte-Code zum User transferiert und dort ausgeführt wird. Dadurch hat der User auch ohne Probleme die Möglichkeit dein Programm zu dekompilieren und so den User und das Passwort für deine DB auszulesen und damit jede Menge unsinn zu treiben.


----------



## mc_maki (27. Okt 2008)

was wäre so ein applikationserver?
was muss ich da nehmen? gibt es opensource?
wie installieren?

da bin ich echt überfragt, denncoh habt ihr mich überzeugt, dass es wohl so nicht gehen kann.

wäre fatal wenn jeder die db auslesen kann wie er will weil er das pw hat.


----------



## mc_maki (27. Okt 2008)

classnotfound exception!


----------



## tfa (27. Okt 2008)

Als Server kannst du ein ganz normales Java-Programm verwenden und per Sockets oder RMI kommunizieren. Das wäre für den Anfang am einfachsten. Frei verfügbare Server (wie Tomcat, JBoss) gibt es auch, in denen man seine Appliktionen laufen lassen kann.
Sieh dir auch mal das Spring-Framework (besonders Remoting). Das nimmt einem viel Arbeit ab.


----------



## FArt (27. Okt 2008)

Ein App-Server ist evtl. mit Kanonen auf Spatzen geschossen. Es kommen auch leichtgewichtigere Lösungen in Frage, z.B. JSPs, Servlets, evtl. einfach eine RPC Schnittstelle, vielelicht mit RMI, Hession, Burlap, SIMON, ...
Wichtig: ein Applet kann ohne weiteres nur auf den Server zugreifen, von dem es geladen wurde!


----------



## mc_maki (27. Okt 2008)

ich habe probleme das ganze zu greifen.
muss ich nun eine java-klasse bauen, die dann auf meinem Server läuft, die auf die DB zugreift?
und dann mittels xmlrpc oder so was soll das applet dann mit der klasse kommunizierne bzw. von der klasse die daten aus der dB bekommen?


----------



## mc_maki (27. Okt 2008)

ist es nicht möglich und auch sicherer wenn das applet einfach eine jar-datei vom server ausführt?

geht das?


----------



## The_S (27. Okt 2008)

zu post 1: ja, oder eben gleich anstelle eines applets servlets und jsps verwenden.

zu post 2: auch das jar auf deinem Server kann der User runterladen und dekompilieren.


----------



## mc_maki (27. Okt 2008)

gut dann versuch ich mich mal an servlets!
hoffe das klappt.


----------



## L-ectron-X (27. Okt 2008)

mc_maki hat gesagt.:
			
		

> classnotfound exception!


Wie hast du das Applet und den Treiber in der HTML-Datei eingebunden?

Du brauchst eine Schicht zwischen Applet (Client) und Webserver, damit Zugangsdaten nicht in irgendeiner Weise in die Hände eines Böswilligen gelangen können.
Es wurden oben die meist benutzen Varianten genannt, die allerdings auch Vor- und Nachteile haben.
Wenn du das Ganze mit JSP/Servlets löst, bist du auf dem Client von Java/Applets etc. unabhängig. Der Applicationserver bspw. Tomcat generiert aus den JSPs Webseiten, die er dann zum Browser auf dem Client schickt.
Dazu brauchst du aber einen Webspace-Betreiber oder einen eigenen Server, der JSP/Tomcat etc. unterstützt.

Wenn du das Ganze mit RMI oder SIMON lösen möchtest, brauchst du auch einen Rechner, der mit dem Internet verbunden ist und auf Verbindungswünsche deines Applets wartet. Dieser RMI- oder SIMON-Server kann die Zugangsdaten zur Datenbank kennen und leitet, oder generiert selbst, Anfragen an die Datenbank weiter und empfängt die Ergebnisse der Anfrage und schickt sie zurück zum Applet. Dabei kann sich das Applet nur auf die Anzeige einer Benutzeroberfläche beschränken. Treiber-Dateien (Jar) braucht es nicht zu kennen und einzubinden. Das kann der RMI-Server erledigen.


----------



## p316266 (28. Okt 2008)

ich hab mich nun mal angemeldet!
es ist folgendermaßen.
ich bin praktikant und soll eine weblösung programmieren, die daten aus einer db liest und diese dann in tabellenform aufbereitet.

ich kann java ziemlich gut, deswegen habe ich mich für diese sprache entschieden.

die db liegt auf einem linux server. auf diesem versuche ich gerade java und jboss zu installieren.

bin ich da auf einem richtigen weg?
das ist alles neuland für mich, aber auch interessant und nur so lernt man doch was.


----------



## maki (28. Okt 2008)

>> bin ich da auf einem richtigen weg? 

Wohin?

Zum Mount Everest? Dann ja. 

Ist 'ne steile Lernkurve, aber als Praktikant soltest du ja keinen Zeitdruck haben.


----------



## p316266 (28. Okt 2008)

das lustige ist, das programm als jar datei hab ich schon fertig.
nur leider soll es ja vom browser aufgerufen werden können.


----------



## maki (28. Okt 2008)

>> das lustige ist, das programm als jar datei hab ich schon fertig.

Ist Sicherheit denn wichtig?
Nicht dass deine App nur von ITlern benutzt wird die allesamt das DB Passwort wissen...


----------



## p316266 (28. Okt 2008)

hehe....ja da hast du eigentlich recht!
es wird nur von ITlern benutzt!

kann ich es dann doch mit einem applet machen?
beiße mit dem servelt und middleware .... so interessant das auch ist und ich das gerne so machen würde ... ohne fremde hilfe irgendwie auf granit!


----------



## p316266 (28. Okt 2008)

dann bleibt aber immer noch das problem, dass die html datei, die netbeans erstellt nicht auf den mysql treiber zugreifen kann.


netbeans legt die datei unter build an, aber der treiber bzw. die klassen in der jar datei für die dbconn sind unter dist in lib


----------



## L-ectron-X (28. Okt 2008)

Wie hast du das Applet und den Treiber in der HTML-Datei eingebunden?
Die häufigsten Probleme mit Applets und deren Lösungsansätze sind hier beschrieben: http://www.java-forum.org/de/viewtopic.php?t=4936


----------



## p316266 (28. Okt 2008)

genau das ist ja das problem...ich habe es nicht eingebunden.


----------



## L-ectron-X (28. Okt 2008)

Und wo ist das Problem jetzt eine HTML-Datei zu modifizieren?


----------



## p316266 (28. Okt 2008)

jetzt habe ich gemäß deiner anleitung die jar datei direkt angezapft.


> <applet archive="MeinJar.jar" code="MeinApplet.class" width="400" height="300">
> </applet>


jetzt kommt ein anderer fehler.
ich poste ihn mal hierein!

```
communications link failure
last package sent to server  was 0ms ago.
```


kann ich in nem applet eigentlich irgendwie die console und damit die abgefangene exception anzeigen lassen?

bzw. welcher befehl in java lässt mir mittels new JOptionPane().showMessageDialog(""); die komplette exception anzeigen?

ex.getMessage() zeigt ja nur das was ich oben schon geschrieben habe!


----------

