Forum: PC-Programmierung JavaApplet-JDBC


von Rackor (Gast)


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

von Peter II (Gast)


Lesenswert?

du darfst auch nur eine JDBC vebindung zu dem host aufbauen woher das 
Applet geladen wurde, alles andere wird durch die VM verboten.

Außerdem scheitert das ganze eh an proxy in Firmennetzen, also eventuell 
gleich mal überdenken ob JAVA und Applet in Zeiten von HTML5 und 
Javascript noch sinnvoll ist.

von Rackor (Gast)


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

von Peter II (Gast)


Lesenswert?

Rackor schrieb:
> 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

was sagt dann das java log (Fehlerconsole), dort steht eigentlich immer 
was brauchbares drin.

von Rackor (Gast)


Lesenswert?

wo kann ich diese denn einsehen bei der Anwendung des Applets in einem 
Browser?

von Peter II (Gast)


Lesenswert?

Rackor schrieb:
> wo kann ich diese denn einsehen bei der Anwendung des Applets in einem
> Browser?

keine ahnung wie man das aktuell macht, früher wurde mal eine kleines 
Java symbol neben der Uhr angzeigt wenn ein applett geladen wurde. Dort 
konnte man auch die Fehler abfragen.

von Rackor (Gast)


Angehängte Dateien:

Lesenswert?

sooo, geschafft, google weiß alles..
also, die konsole wirft mir bei der problematischen Stelle folgendes:
[textdatei mit der JavaKonsoleRückgabe anbei angehängt]

von Rackor (Gast)


Angehängte Dateien:

Lesenswert?

Anbei noch die Java-Klasse mit der DB-Verbindung

von Rackor (Gast)


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..

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Rackor (Gast)


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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Also wird das hier

Class.forName("com.mysql.jdbc.Driver");

in die Hose gehen.

Tja.

von Peter II (Gast)


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.

von Rackor (Gast)


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

von Läubi .. (laeubi) Benutzerseite


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.

von Rackor (Gast)


Lesenswert?

kk

was ist ein Antskript wenn ich fragen darf?

also wenn ich richtig verstanden habe,
alle libs  (in meinem fall nur den jdbc treiber)  in nen ordner, in den 
selben das eclipse projekt als .jar exportieren..und dazu noch die class 
files, als jar verpacken mit zertifikat? dazu dann wahrscheinlich noch 
die html seite?

von Kai (Gast)


Lesenswert?

Beim Exception stacktrace ist immer das letzte "caused by" wichtig

Caused by: java.security.AccessControlException: access denied 
("java.util.PropertyPermission" "file.encoding" "read")

D.h. der SecurityManager verhindert die gewünschte Aktion. Abhilfe 
schafft man, indem man das Applet signiert.

von Läubi .. (laeubi) Benutzerseite


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...

von Rackor (Gast)


Lesenswert?

kk, werds dann gleichmal probieren

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Rackor schrieb:
> kk, werds dann gleichmal probieren

Wie gesagt kannst du auch beide Jars einzeln signieren.

von Rackor (Gast)


Lesenswert?

so, nach kurzer pause, setzte ich mich ans signieren, mit dem java sdk 
eigenen tool..aber beim signieren mit jarsigner myApplet.jar mykey..und 
nach eingabe des PW, meint die konsole, sie kann das jar file nicht 
öffnen..

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Beschreib mal genau wie du vorgegangen bist (Befehlzeile und so)... 
Liegt das jar auch sicher in dem Ordner aus dem du den Befehl aufrufst?

von Rackor (Gast)


Lesenswert?

hab das signieren wie hier im link gemacht: 
http://blog.mynotiz.de/programmieren/java-applets-signieren-und-lauffahig-machen-605/

jar file lag im selben ordner wie das tool, hab auch versucht pfade 
anzugegeben..irgendwann hats bei einem jar funktioniet, keine ahnung 
wieso..bei anderen gings wieder nicht, es kommt immer "unable to open 
jar file".

von Läubi .. (laeubi) Benutzerseite


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.

von Rackor (Gast)


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!

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Rackor schrieb:
> weil er möglicherweise schon signiert ist?

Mal mit einem Zip Programm reinschauen und das Manifest anschauen, dann 
sollte man das sehen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.