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.
Also wird das hier Class.forName("com.mysql.jdbc.Driver"); in die Hose gehen. Tja.
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
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.
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...
Rackor schrieb: > kk, werds dann gleichmal probieren Wie gesagt kannst du auch beide Jars einzeln signieren.
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..
Beschreib mal genau wie du vorgegangen bist (Befehlzeile und so)... Liegt das jar auch sicher in dem Ordner aus dem du den Befehl aufrufst?
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".
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.