Wie erstelle ich eine Installationsdatei um Treiber zu speichern/laden

Hi Community,

ich hätt da gern mal ein Problem… :smiley:
Mein Problem:
Mein Programm greift auf eine Datenbank auf einem Server zu holt die Daten und schreibt auch gegebenenfalls rein.
Das Funktioniert alles prima… aber nur auf zwei PC’s…:rolleyes:
Habe jetzt herausgefunden, das der Datenbanktreiber connector… in dem Ordner JAVA/jre/lib/ext/ gespeichert sein muss damit es läuft obwohl ich es beim exportieren in eine .jar Datei mit in das Package eingebunden habe.
Meine Frage:
wie löse ich das Problem. :wink:
bzw. ich kann ja nicht von allen Usern die das kleine Spiel spielen wollen erwarten, dass sie den Treiber in das oben beschriebene Verzeichnis kopieren. Daraus folgere ich es muss einen weg geben, wie ich aus dem Package (bzw. aus der .jar) eine Installationsdatei mache, damit der Treiber in das Verzeichnis kopiert wird.

Ich freue mich wahnsinnig über alle Beiträge die mir weiterhelfen, wenn auch nicht das Problem lösen.
ich bin dankbar für jeden Tip oder Vorschlag.

MfG

zaag

Wie ist das Spiel denn aufgebaut? Also wie wird auf den Server zugegriffen?

Also auf dem Server sind einfach 3 Tabellen angelegt und das JAVA-Programm (TicTacToe Spiel)Speichert zunächst den eingegeben Namen in einer Tabelle,
danach kann man einen weiteren Spieler auswählen und diese zwei Spieler werden dann in einer anderen Tabelle gespeichert und somit sind diese Spieler mit einander verknüpft und können gegeneinander spielen. Jeder Spielzug wird mit den notwendigen Parametern in der 3. Tabelle gespeichert. So läuft das Spiel im allgemeinen ab.

Also wie gesagt auf meinem (und auf einem weiteren) Rechner funktioniert der Zugriff auf die DB auch nach dem exportieren in eine . jar und es können zwei gegen einander Spielen. aber auf anderen Rechnern läuft es nicht…

Wie exportierst du denn die jar-Datei? Mit Eclipse kannst du dir eigentlich alles so packen lassen, dass du keine Probleme mit den Libs haben solltest.
Bist du dir überhaupt sicher, dass es an den externen libs liegt - hast du eine konkrete Fehlermeldung vorliegen?

Desweiteren sollten deine Clienten keinen direkten Zugriff auf die Datenbank haben. Wenn jemand dein Spiel dekompiliert, dann kommt er an alle Notwendigen Zugangsdaten für die DB und kann Unfug damit treiben. Normalerweise schaltet man da einen eigenen Server zwischen, welcher die Anfragen kontrolliert abarbeitet.

Grundsätzlich ist es eher eine schlechte Idee den Client direkt auf die DB zugreifen zu lassen, aber für solche Tests/Spielereien akzeptabel.

Meiner meiner der falsche Ort für solche libs. Benutzt Du eine IDE? Diese bitten die Möglichkeit das Programm als runnable Jar zu exportieren, so dass alle benötigten Klassen im jar enthalten und in der Manifest korrekt gelistet sind.
Alternativ das jar mit dem DB Treiber mit ausliefern und z.B. in der Manifest Datei des jars im CLASSPATH auflisten.
Üblich ist auch die Software mit allen abhängigen libs lose auszuliefern und das Programm mit einem Shell Skript zu starten welches entsprechende Einträge im am CLASSPATH usw. vornimmt.

Meine Frage ging auch in die technische Richtung, ich befürchte nämlich das gleiche wie TT, ein direkter Zugriff auf die DB eines Servers ist a) unsicher und b) nicht einfacher zu realisieren.

Was mir gerade noch kam: Kann es sein, dass die Datenbank auf dem Computer läuft, auf dem auch dein Programm läuft? Es kann gut sein, dass deine Datenbank (aus guten Gründen!) so eingestellt ist, dass Sie nur lokale Zugriffe zulässt [MySQL ist z.B. Standardmäßig so eingestellt].

[QUOTE=_Michael;77702]Grundsätzlich ist es eher eine schlechte Idee den Client direkt auf die DB zugreifen zu lassen, aber für solche Tests/Spielereien akzeptabel.

Meiner meiner der falsche Ort für solche libs. Benutzt Du eine IDE? Diese bitten die Möglichkeit das Programm als runnable Jar zu exportieren, so dass alle benötigten Klassen im jar enthalten und in der Manifest korrekt gelistet sind.
Alternativ das jar mit dem DB Treiber mit ausliefern und z.B. in der Manifest Datei des jars im CLASSPATH auflisten.[/QUOTE]

ja habe mit eclipse in eine RunableJar exportiert und auch den Treiber mit reingepackt. daran kann es nicht liegen

*** Edit ***

gute Idee aber nein :slight_smile:
es ist ja auf einem anderen auch schon gelaufen

*** Edit ***

[QUOTE=Tomate_Salat;77701]
Desweiteren sollten deine Clienten keinen direkten Zugriff auf die Datenbank haben. Wenn jemand dein Spiel dekompiliert, dann kommt er an alle Notwendigen Zugangsdaten für die DB und kann Unfug damit treiben. Normalerweise schaltet man da einen eigenen Server zwischen, welcher die Anfragen kontrolliert abarbeitet.[/QUOTE]

das hört sich vernünftig an aber wie realisiere ich das denn? aber das ist denke ich das nächste Problem, zunächst sollte es erstmal auf jedem Rechner laufen, denke ich…

Nein, erst eine vernünftige Struktur asuarbeiten. Zum Beispiel RMI nutzen. Dann läuft auf dem Server eine Java-Klasse und mit dieser kommunizieren deine Spieler. Die DB Problematik ist damit Geschichte.

ach ja hier noch die Exeption die er auf dem anderen Rechener geworfen hat im Anhang

und danach habe ich dann den connector in die lib/ext kopiert und es ist gelaufen… also denke schon das es daran liegt oder?
nur wie kriege ich das programm dazu dat ding da rein zu kopieren…:ka:

*** Edit ***

ok!?!?
was ist eine RMI? und wie mache ich dass, dass die clients mit der Java class auf dem Server kommunizieren?

http://openbook.galileocomputing.de/javainsel9/javainsel_22_001.htm

hast Du denn die Treiber Lib explizit in den Build Path Deines Projektes aufgenommen? Scheinbar ist beim Packen etwas abhanden gekommen.
Die Klasse com.mysql.jdbc.Driver scheint ja nicht drin enthalten zu sein. Schon mal einen Blick ins jar geworfen?

das ist ja das komische an der Geschichte der com.mysql.jdbc.Driver ist in dem package und wird mitgegeben

ouh ouh ouh ouh

da hat sich aber mal wieder jemand das falsch beispiel rausgesucht

JA, es ist möglich den lib-pfad im JDK/JRE zu nutzen, sollte man aber nur machen wenns auch nötig ist, was es, dank anpassung des CP, eigentlich NIE ist

besser ist es libs mit auszuliefern und diese dann im manifest einzutragen
was auch möglich ist alles zusammen in ein jar werfen, heißt dann “FAT-jar”

aber das ganze könntest du dir sparen wenn du dir einen webservice bastelst damit dein client nicht direkt auf die DB zugreift, sonst dürfte die innerhalb kurzer zeit übernommen sein

kannst du mir mal an einem Beispiel zeigen wie ich das mit dem Manifest mache?
hab mir das mal angeschaut, aber nicht so richtig verstanden. :ka:

Im Manifest gibt es einen Eintrag, in dem man den Classpath setzen kann, siehe:
http://docs.oracle.com/javase/tutorial/deployment/jar/downman.html

was auch möglich ist alles zusammen in ein jar werfen, heißt dann “FAT-jar”

Finde ich allerdings keine schöne Lösung, zumal man dafür auch noch einen Classloader benötigt, der sowas kann.