Ich habe ein Applet, das soll auf eine MySQL Datenbank zugreifen.
Auf meinem Rechner funzt bisher alles, nun wollte ich das bei einem Freund auf den Webspace bringen, doch er meinte das funzt nicht, hier mal seine Antwort:
Problem ist, dass die Datenbank nur vom Webserver aus erreichbar ist
und nicht von außen. Da das Applet aber auf dem Nutzerrechner läuft
dürfte das ein arges Problem sein. Des weiteren ist das Problem,
dass Passwortdaten grundätzlich nicht so über das Netz ausgetauscht
werden dürfen, ansonsten kommt auf die DB nämlich jeder drauf und
das geht nu nicht. Also im Grunde ist das so nicht machbar.
Kann das jemand entkräften?
Es wäre ein herber Schlag für mich wenn die Arbeit von 5 Tagen völlig sinnlos wäre und das von Pumpkin gelöste Problem ebenfalls entfallen würde. Noch dazu das runterladen von ca. 40MB MYSQL über eine 28k Leitung, alles umsonst?
Sagt mir dass er unrecht hat…
Wiz
Kann das jemand entkräften?
Nein. Wenn nur der Webserver an die DB rankommt, kann ein Applet das nicht.
Moin
Kann das jemand entkräften?
Er hat Recht.
Am einfachsten kann man das über eine java-server-page oder über eine Art Relai-Prog auf dem Web-server „umgehen“.
cu
Ich müsste also mittels JSP die DB ansprechen.
Klappt denn die Kommunikation zwischen JSP und dem Applet?
Ich müsste ja mitten im Programm eine Datenbankabfrage von der JSP machen lassen und das Ergebnis dann an das Applet schicken.
Hab ich das so richtig verstanden?
Moin
Ich müsste also mittels JSP die DB ansprechen.
So in der Art.
Klappt denn die Kommunikation zwischen JSP und dem Applet?
Naja, da muss man ein bisschen basteln:
Den webserver erreicht man auf Port 80, mit ein bisschen http-1.0 kommt man an die JSP-Page. Wenn man die URL kreativ gestaltet kann man in der URL die DB-Anfragen mitschicken. Die Antwort des JSP kann man ja XML-style-mässig halten, das könnte das Applet über die standart-XML-Parser zurückumformen…
ein bisschen Arbeit, aber möglich.
Einfacherer wird’s wenn du gleich beliebige java-Programme auf dem Server laufen lassen kannst und eigene Serverports anlegen darfst: dann könnte RMI interessant werden. Das versteckt die ganze Kommunikation. Würde aber auch die Entwicklung ein bisschen komplizerter machen.
Oder eben auf den SQL-Server verzichen und direkt auf Dateien arbeiten. Je nach dem was du vor hast geht das am schnellsten. Veränderungen kann man ja über einfache JSP’s machen.
cu
ein bisschen Arbeit, aber möglich.
Jo vor allem wenn man keine Ahnung hat wie ich 
Einfacherer wird’s wenn du gleich beliebige java-Programme auf
dem Server laufen lassen kannst und eigene Serverports anlegen
darfst: dann könnte RMI interessant werden. Das versteckt die
ganze Kommunikation. Würde aber auch die Entwicklung ein
bisschen komplizerter machen.
ich glaube so viel erlaubt der Server nicht, der kostet wohl 2€ im Monat.
Oder eben auf den SQL-Server verzichen und direkt auf Dateien
arbeiten.
Genau so lief es bisher, ich wollte aber eine Datenbank weil man die schön verändern kann ausserdem gehen Suchabfragen schön elegant.
Aber ich werde wohl wieder auf die gute alte Text-Datei zurück umsteigen dürfen.
Schade eigentlich, dabei erschien mir Java für das Internet bisher ganz praktisch, von den unterschiedlichen VMs mal abgesehen, aber da ist wohl jetzt schluss mit M$'s variante.
Danke für die Antworten
Wiz
Den webserver erreicht man auf Port 80, mit ein bisschen
http-1.0 kommt man an die JSP-Page. Wenn man die URL kreativ
gestaltet kann man in der URL die DB-Anfragen mitschicken.
Dafür würde ich das ganze als POST gestalten und die Anfrage im entsprechenden HTTP_Header schicken. Das ist etwas weniger anfällig als GET-Requests, weil man sich AFAIK die Spielerei mit der URL-Codierung ersparen kann.
Hi ich versuche immer noch im Netzwerk / Internet auf eine MYSQL Datenbank zuzugreifen.
Ich habe gelesen es funzt solange das Applet vom selben Server geladen wird auf dem die Datenbank liegt, und das Applet muss signiert sein. Dann habe ich gelesen man muss irgendwas in Java.Policy eintragen, aber keine Ahnung was und wo und wie.
Wie gesagt auf einem Rechner läuft das Applet wunderbar, doch nun versuche ich über mein Netzwerk von Rechner2 das Applet auf Rechner 1 zu laden und bekomme immer eine Exception:
java.sql.SQLException: Unable to connect to any hosts due to exception
das hier ist mein QUellcode:
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
} catch (Exception ex) {System.out.println("Fehler beim laden des Treibermanagers"); }
//an die Datenbank andocken
Statement stmt;
ResultSet rSet;
Connection conn;
String host = "192.168.0.2";
String user = "abc";
String xy = "";
try {
String url = "jdbc:mysql://"+host+"/test";
System.out.println( "Zur Datenbank connecten...");
conn = DriverManager.getConnection( url, user, xy);
stmt = conn.createStatement();
String sqlQuery = "select \* from test;";
System.out.println( "Anweisung \""+sqlQuery+"\" ausführen...");
rSet = stmt.executeQuery( sqlQuery );
while(rSet.next())
System.out.println(rSet.getInt(1)+", "+rSet.getInt(2));
stmt.close();
}
catch ( SQLException e ) {
System.out.println( "Fehler ...\n" + e );
}
Moin
Ich habe gelesen es funzt solange das Applet vom selben Server
geladen wird auf dem die Datenbank liegt, und das Applet muss
signiert sein.
? signiert ? nee eigentlich nicht. Signiert oder nicht spielt im realen Einsatz keine Rolle mehr, das Prinzip ist seit 1.1->1.2 für privat nicht mehr interessant.
Dann habe ich gelesen man muss irgendwas in
Java.Policy eintragen, aber keine Ahnung was und wo und wie.
ähm… Ja, da gibts was sehr witziges:
Man kann per policytool eine Permission-Datei erstellen. Permission-Dateien geben bestimmen Codebases (=deine Applet.jar-Datei) Rechte. Permission-Dateien müssen von Hand in die jre/lib/security/security.java eingetragen werden. Das wird kein User machen.
Von CA’s „gegen-signierte“ applets könnten Permission-Datei selbst automatisch eintragen. CAs für java-applets sind Verisign und Twarte. Das Prinzip ist einfach: Du fragst bei denen einen public/private-Schlüssel. Mit dem signierts du deine Applets. Die Browser erkennen dass der Schlüssel von einem CA stammt und lässt das Applet alles machen was es so will.
Nun kostet so ein Schlüssel richtig Geld. Deshalb machen Private das anders:
http://forum.java.sun.com/thread.jsp?forum=63&thread…
Jetzt ist es nur noch dein Problem wie du die User dazu bekommst dich als CA anzuerkennen. Erst dann spielt signieren wieder eine Rolle.
java.sql.SQLException: Unable to connect to any hosts due to
exception
Kuck dir mal mit der Methode: e.getNextException() an was „exception“ genau ist. An sich darf man immer zum Server zurück telefonieren (Also wenn man über this.getCodeBase().getHost() fährt)
cu
1 „Gefällt mir“
Du bist zum knuddeln!!!
Kuck dir mal mit der Methode: e.getNextException() an was
„exception“ genau ist. An sich darf man immer zum Server
zurück telefonieren (Also wenn man über
this.getCodeBase().getHost() fährt)
das mit getHost() muss einem ja mal einer sagen.
So ein n00b wie ich kommt doch auf sowas nicht alleine.
Bei meiner FH die mir freundlicherweise eine DB eingerichtet haben kriege ich immer (auch vorher schon) eine Connection Timeout:
Fehler ...
java.sql.SQLException: Unable to connect to any hosts due to exception: java.net.ConnectException: Connection timed out: connect
\*\* BEGIN NESTED EXCEPTION \*\*
java.net.ConnectException
MESSAGE: Connection timed out: connect
STACKTRACE:
java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158)
at java.net.Socket.connect(Socket.java:426)
at java.net.Socket.connect(Socket.java:376)
at java.net.Socket.(Socket.java:291)
at java.net.Socket.(Socket.java:119)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:124)
at com.mysql.jdbc.MysqlIO.(MysqlIO.java:225)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:1779)
at com.mysql.jdbc.Connection.(Connection.java:450)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:411)
at java.sql.DriverManager.getConnection(DriverManager.java:512)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
at DB.init(DB.java:39)
at sun.applet.AppletPanel.run(AppletPanel.java:347)
at java.lang.Thread.run(Thread.java:536)
\*\* END NESTED EXCEPTION \*\*
Mein anderer Webhoster baut grade die FTPs um kann da nix ausprobieren, muss ich später machen.
Und bei der Rechner zu Rechner bei mir zu Hause testvariante wird kein Host ausgegeben.
Das mit dem Signieren ist gut dass ich das net brauche…
auch beim 2.Anbieter gibs Connection Timeout (owT)
…
Moin
Du bist zum knuddeln!!!
Nich in der Öffentlichkeit…
das mit getHost() muss einem ja mal einer sagen.
kleiner Zusatz: es gibt Browser die „nach-haus-telefonieren“ nur über das Protokoll zulassen über das die jar Datei gekommen ist. D.h. wenn deine jar per http:// von einem Server kommt darf sie auch nur per http:// auf den Server zugreifen. Glücklicherweise sind die Browser am aussterben, aber besonders alte Netscape’s sind da immer für eine Überraschung gut-
java.net.ConnectException
MESSAGE: Connection timed out: connect
OK, das ist kein Rechte-Problem: Der Client-Rechner versucht sich auf die DB zu verbinden (per TCP/IP, also per Socket.connect(…)) und bekommt keine Antwort. Das liegt meistens an routing-Problemen (der Client versteht unter der IP was anderes als dein Home-rechner) oder an dropping-Firewalls (die Firewall erkennt das da einer von aussen auf etwas zugreifen will und antwortet einfach nicht. Normale Firewalls verweigern einfach (Connection refused), dropping wird manchmal gemacht um DDoS-Attacken vorzubeugen, was ich aber für Schwachsinn halte) Oder die DB ist abgestürzt.
cu
kleiner Zusatz: es gibt Browser die „nach-haus-telefonieren“
nur über das Protokoll zulassen über das die jar Datei
gekommen ist.
Bisher wird de Class Daei geladen ist das vielleicht wichtig? Muss es eine Jar Datei sein?
OK, das ist kein Rechte-Problem: Der Client-Rechner versucht
sich auf die DB zu verbinden (per TCP/IP, also per
Socket.connect(…)) und bekommt keine Antwort. Das liegt
meistens an routing-Problemen (der Client versteht unter der
IP was anderes als dein Home-rechner) oder an
dropping-Firewalls (die Firewall erkennt das da einer von
aussen auf etwas zugreifen will und antwortet einfach nicht.
Normale Firewalls verweigern einfach (Connection refused),
dropping wird manchmal gemacht um DDoS-Attacken vorzubeugen,
was ich aber für Schwachsinn halte) Oder die DB ist
abgestürzt.
Hmm, Firewall, das ist blöd, denn man kann ja nich einfach alle IPs freigeben. Oder reicht vielleicht sogar die Freigabe des Ports?
Und wie kriege ich den host von meinem 2. Rechner zu Hause raus?
Weil bei gethost kommt nix, und somit versucht das Applet auf die DB von Rechner 1 zuzugreifen und findet ja dort die DB nicht.
Dann kann ich die verschiedenen Sachen ausprobieren.
Gruß Wizard of War
Moin
Bisher wird de Class Daei geladen ist das vielleicht wichtig?
Muss es eine Jar Datei sein?
Hängt vom Browser ab, kann ich so nicht sagen…
Hmm, Firewall, das ist blöd, denn man kann ja nich einfach
alle IPs freigeben. Oder reicht vielleicht sogar die Freigabe
des Ports?
Ja, die Ports sollten schon frei sein…
Nochwas:
String host = „192.168.0.2“;
Das ist eine lokale IP, die im Internet nicht gefunden werden wird. Die IP gilt nur in lokalen Netzen.
cu
Nochwas:
String host = „192.168.0.2“;
Das ist eine lokale IP, die im Internet nicht gefunden werden
wird. Die IP gilt nur in lokalen Netzen.
Schon klar, das ist die IP von meinem zweiten Rechner im Netzwerk ich hatte versucht das Applet dort zu positionieren mit Db und allem und dann von Rechner 1 aus zu laden übers Netzwerk, bin aber kläglich gescheitert 