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
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.
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
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.
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.
sooo, geschafft, google weiß alles..
also, die konsole wirft mir bei der problematischen Stelle folgendes:
[textdatei mit der JavaKonsoleRückgabe anbei angehängt]
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..
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.
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.
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.
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
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.
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?
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.
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...
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..
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".
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!
Rackor schrieb:> weil er möglicherweise schon signiert ist?
Mal mit einem Zip Programm reinschauen und das Manifest anschauen, dann
sollte man das sehen.