JavaApplet-JDBC

Gast #3133200
Lesenswert?

Hallo.
ich arbeite gerade an einem Applet, dass Daten über JDBC in eine MySQL 
DB speichert.
In eclipse funktioneirt dies nun schon einwandfrei.
Jedoch gibt es probleme wenn ich das Applet in den Browser einbinde.
Zuerst exportiere ich das Projekt, in dem der JDBC 
driver(mysql-connector-java-5.1.23-bin.jar) eingebunden ist, als jar 
datei. Diese + html seite lege ich auf meinen lokalen Webserver (--> 
xampp = webserver mit mysql datenbank). so, applet wird fehlerfrei 
gestartet. sobald ich aber wörter auf die DB abspeichern will, passiert 
nichts.
Es scheint als würde das Applet, sobald es zu dem Quelltextteil kommt wo 
die JDBC verbindung beginnt, abbrechen.
ich glaube das applet kann aus irgendeinem grund den jdbc treiber nicht 
laden...hab aber schon irgendwie alles mögliche ausprobiert..
bitte um Hilfe

MfG Rackor
Gast #3133214
Lesenswert?

zuerst einmal danke für die schnelle antwort.
und weiters...ist nur für schulische/private zwecke..wird sicher das 
letzte mal gewesen sein, dass ich mich mit java applets 
beschäftige..davon abgesehen von einigen kompatibilitätsproblemen, ist 
es nicht wirklich mehr konkurrenzfähig mit html 5 und JS, wie du ja 
schon erwähnt hattest.

ich versuche eh nur eine Verbindung aufzubauen. nur es scheint, als 
würde er den Treiber garnicht laden/finden, da er nicht einmal eine 
aufbaut
Gast #3133295
Lesenswert?

irgendeine idee woran es liegen könnte? es scheint ja, dass er 
tatsächlich den treiber nicht findet oder nicht laden kann..nur ich 
wüsste echt nicht was ich beim einbinden des treibers oder direkt im 
quellcode zum aufrufen des treibers noch machen könnte...hab scho 
einiges probiert wie man an den kommentaren erkennen kann..
Persönliche Seite #3133299
Lesenswert?

Vielleicht untersagt ja das Sandbox-Modell, in dem JavaApplets im 
Browser laufen, die Verwendung von JDBC-Verbindungen?

Wo exakt in Deinem Quelltext ist die "problematische Stelle"?

Und warum steht das da so da?
1
  Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/", dbUser, dbPw); 
2
  FailMessage();

Das bedeutet doch, daß "FailMessage" immer aufgerufen wird, egal ob 
getConnection geklappt hat oder nicht.
Gast #3133307
Lesenswert?

die problematiscehe stelle ist eigentlich die ganze JavaKlasse für die 
DB-Verbindung. er führt die verbindung nicht aus, speichert nichts in 
der DB. er findet sofort nen fehler, fangt ne exception...wollte auch 
schon probieren mir diese exception auszugeben...ohne erfolg.

"  Und warum steht das da so da?


 Connection con = 
DriverManager.getConnection("jdbc:mysql://localhost:3306/", dbUser, 
dbPw);
  FailMessage();

"

Die Methode "FailMEsssage();" war eigentlich nur zur überprüfung 
gedacht, ob er die connection ausführt oder vorher abbricht. er tuts 
nicht.
Gast #3133341
Lesenswert?

Rufus Τ. Firefly schrieb:
> Also wird das hier
> Class.forName("com.mysql.jdbc.Driver");
> in die Hose gehen.

nein denke ich nicht, laut log


at 
com.mysql.jdbc.AbandonedConnectionCleanupThread.run(AbandonedConnectionC 
leanupThread.java:38)
Exception in thread "AWT-EventQueue-2" 
java.lang.ExceptionInInitializerError
  at 
com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:29 
8)

werden ja schon methoden in der Klasse aufgerufen, also wird die Klasse 
vermutlich da sein.

Ich vermute das Problem mit dem dem verbindungsaufbau. Von welcher url 
lädst du das Applet? Es muss localhost sein, es darf nicht nur eine 
Datei sein, du braucht also einen lokalen webserver sonst geht es nicht. 
(Hatte ich schon oben geschrieben)

Ein Applett darf nur zu dem Host eine Verbindung aufbauen von dem es 
geladen wurde.
Gast #3133346
Lesenswert?

die stelle mit "Class.forName("")" ist soweit ichs beurteilen kann, 
völlig egal...wenn ichs raustu, und über ecplise starte...gibts keine 
probleme..
habe mir xampp runter geladen, hab so einen webserver mit mysql 
datenbank..
das applet liegt auf diesem server unter htdocs..die url zur mysql db, 
wie man schon im quellcode sehen kann, lautet localhost:3306.

das komische ist ja, wenn ichs über eclipse starte (appletviewer), 
funktioneirts einwandfrei...nur übern browser gehts nicht..muss ich vl 
beim einbinden des treibers auf irgendwas achten?

hab diesem im eclipse projekt drinnen..exportiere dieses als .jar datei, 
und lege es aufn webserver mit der dazugehörigen html datei..

html datei inhalt:

<html>
test
<object archive="mysql-connector-java-5.1.23-bin.jar, test.jar" 
code="Dict_Interface_Input.class">
</object>
</html>

test.jar = exportiertes eclipse projekt als .jar file.
Dict_Interface_Input.class = ist die "main" class, das applet mit der 
GUI
Persönliche Seite #3133354
Lesenswert?

Wenn du auf "kritische" Bestandteile des Systems zugreifen willst, muss 
das Applet signiert sein.
Das siehst du am "cause" der message:
1
Caused by: java.security.AccessControlException: access denied ("java.util.PropertyPermission" "file.encoding" "read")
Dir fehlt schlicht das angegebene Recht.
Am einfachsten machst du dir ein Antskript was folgendes tut:
- Alle Libs in einen Ordner extrahieren (z.B. /tmp/applet)
- Deinen als Jar exportieren Anwendungscode in das gleiche Verzeichnis 
entpacken
- Nur die Classfiles (*.class) in ein neues JAR verpacken, diese mit 
einem (selbstsigniertem) Zertifikat signieren.

Alternativ halt jedes Jar einzeln signieren.

Es kommt dann zwar beim starten eine Warnung (wegen selbstsigniertem 
Zertifikat), danach hat dein Applet aber die erweiterten Rechte um auch 
außerhalb der SandBox Rechte zu erlangen.

Rackor schrieb:
> In eclipse funktioneirt dies nun schon einwandfrei

In Eclipse wird es (leider) mit vollen Security permissions ausgeführt.
Persönliche Seite #3133372
Lesenswert?

Rackor schrieb:
> was ist ein Antskript wenn ich fragen darf?

http://ant.apache.org/

Gibt viele Beispiele dazu, du kannst auch aus Eclipse heraus mit 
Signatur exportieren, dann musst du nur vorher das Lib jar entpacken und 
in den Klassenpfad packen.

Rackor schrieb:
> alle libs  (in meinem fall nur den jdbc treiber)  in nen ordner
Entpacken

Rackor schrieb:
> das eclipse projekt als .jar exportieren

Und auch entpacken

Rackor schrieb:
> als jar verpacken

Genau, Ziel ist ein Jarflie, was alle Klassen enthält

Rackor schrieb:
> mit zertifikat

das Zieljar signieren

Rackor schrieb:
> dazu dann wahrscheinlich noch
> die html seite?

Die HTML Seite bleibt wie sie ist...
Persönliche Seite #3133681
Lesenswert?

Versuch mal folgendes:
1
1) Neuen Ordner anlegen
2
2) mysql-connector-java-5.1.23-bin.jar und test.jar reinkopieren
3
3) in die Konsole und in den Ordner wechseln
4
4) keytool -genkey -keystore myKeystore -alias myself
5
5) keytool -selfcert -alias myself -keystore myKeystore
6
6) jarsigner -keystore myKeystore test.jar myself
7
7) jarsigner -keystore myKeystore mysql-connector-java-5.1.23-bin.jar myself
Falls Probleme Fheler auftreten bitte hier genaue Fehlermeldung posten.
Gast #3134294
Lesenswert?

soo, das signieren lief soweit ganz gut. den jdbc treiber konnte aber 
trz nicht signiert werden, wieder der selbe fehler (unable to open jar 
file).
aber es ging auch ohne signierung des treibers...vl ging es deshalb 
nicht weil er möglicherweise schon signiert ist?

jedenfalls nach dem signieren des applets lief alles einwandfrei.
Vielen Dank für eure Bemühungen und Tipps!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren