Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

URLClassLoader auf Datenbanktreiber anwenden

0 views
Skip to first unread message

hermann krauß

unread,
Sep 5, 2007, 10:49:54 AM9/5/07
to
Hallo miteinander,
versuche gerade, zur Laufzeit ein .jar zu laden.
leider krieg ich das irgendwie nicht hin

gibts da irgendwo ein kleines Beispiel für den Aufbau einer Connection,
z.B. mit h2.jar oder hsqldb.jar

Danke!
Hermann

Ingo Menger

unread,
Sep 5, 2007, 11:27:40 AM9/5/07
to
On 5 Sep., 16:49, hermann krauß <hermann.kra...@siemens.com> wrote:
> Hallo miteinander,
> versuche gerade, zur Laufzeit ein .jar zu laden.
> leider krieg ich das irgendwie nicht hin

Das ist schade.
Noch schlimmer ist, daß Du nicht erklärt hast
- was Du versucht hast
- was dabei herausgekommen ist
- inwiefern sich das von dem, was Du erwartest, unterscheidet.
Hättest Du das, dann könnte man Dir nämlich sofort helfen. So jedoch
muß ich erst bei Astro TV anrufen und wenn ich drankomme, werde ich
mir erklären lassen, was H. Krauß wohl gemeint haben mag mit "jar
laden" und "nicht hingekriegt".


> gibts da irgendwo ein kleines Beispiel für den Aufbau einer Connection,

Sischer, sischer.

> z.B. mit h2.jar oder hsqldb.jar

Du willst eine Connection mit oder zu hsqldb.jar?
Ich kann Dir sicher weiterhelfen, wenn Du mir erklärst, was Du unter
dem Satz "X hat eine Connection zu (oder mit) h2.jar" genau verstehst.

Hubert Partl

unread,
Sep 6, 2007, 4:24:17 AM9/6/07
to

> versuche gerade, zur Laufzeit ein .jar zu laden.
> leider krieg ich das irgendwie nicht hin

Java lädt alle Klassen zur Laufzeit,
Du musst also dafür sorgen, dass es das jar-Archiv findet,
entweder, indem es an einer dafür vorgesehen Stelle liegt
wie z.B. in jre/lib/ext
oder indem es im CLASSPATH angeführt ist,
wie z.B. mit java -cp ...

Im CLASSPATH sind auch URLs erlaubt,
nicht nur lokalen Dateinamen.

--


hermann krauß

unread,
Sep 6, 2007, 5:21:59 AM9/6/07
to
Danke, die Info ist schon mal sehr hilfreich

Hubert Partl wrote:
>> versuche gerade, zur Laufzeit ein .jar zu laden.
>> leider krieg ich das irgendwie nicht hin
>

> Java lädt alle Klassen zur Laufzeit,
> Du musst also dafür sorgen, dass es das jar-Archiv findet,
> entweder, indem es an einer dafür vorgesehen Stelle liegt
> wie z.B. in jre/lib/ext
auf meinem PC wäre das kein Problem,
da weiß ich ja wo was liegt und welches Java ich verwende
wenn ich das Projekt weitergebe sieht das ganze schon anders aus

hilfreich wäre hier eine relative (zum Projekt) Pfad-Angabe
-> ist sowas möglich ?
-> wie kann ich das in Eclipse einstellen ?
-> genügt es, wenn das .Jar im selben Verzeichnis,
wie das aufrufene .Jar ?

> oder indem es im CLASSPATH angeführt ist,

> wie z.B. mit java -cp ...
>
> Im CLASSPATH sind auch URLs erlaubt,
> nicht nur lokalen Dateinamen.
>

Hermann

hermann krauß

unread,
Sep 6, 2007, 5:35:06 AM9/6/07
to Ingo Menger
Moin,

Ingo Menger wrote:
> On 5 Sep., 16:49, hermann krauß <hermann.kra...@siemens.com> wrote:
>> Hallo miteinander,
>> versuche gerade, zur Laufzeit ein .jar zu laden.
>> leider krieg ich das irgendwie nicht hin
>
> Das ist schade.
> Noch schlimmer ist, daß Du nicht erklärt hast
> - was Du versucht hast

Vereinfacht das:
public static void main(String[] args) {
String sDrv ="org.h2.Driver";
String sJar = "D:/local/Data/DaBhaR/JavaClasses/h2.jar";
String sUrl =
"jdbc:h2:D:/local/Data/DaBhaR/Interlin/IliRead.H2/IliReadH2";

try {
Connection o = testLoadClass(sDrv, sJar, sUrl);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static Connection testLoadClass(String sDrv, String sJar,
String sUrl) throws Exception {
Connection oConn = null;
File file = new File(sJar);

if(!file.exists())
throw new RuntimeException("Working Directory falsch gesetzt,
kann " + sJar + " nicht finden.");

URL extLibUrl = new URL("file", "localhost", file.getAbsolutePath());

URLClassLoader loader = new URLClassLoader(new URL[]{extLibUrl});
final Class extClass = loader.loadClass(sDrv);

Class.forName(sDrv);
oConn = DriverManager.getConnection(sUrl, "sa", "");

return oConn;
}

> - was dabei herausgekommen ist

java.lang.ClassNotFoundException: org.h2.Driver
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)

> - inwiefern sich das von dem, was Du erwartest, unterscheidet.
> Hättest Du das, dann könnte man Dir nämlich sofort helfen. So jedoch
> muß ich erst bei Astro TV anrufen und wenn ich drankomme, werde ich
> mir erklären lassen, was H. Krauß wohl gemeint haben mag mit "jar
> laden" und "nicht hingekriegt".

will dich nicht zu Okkultismus verleiten ...


>
>
>> gibts da irgendwo ein kleines Beispiel für den Aufbau einer Connection,
>
> Sischer, sischer.
>
>> z.B. mit h2.jar oder hsqldb.jar
>
> Du willst eine Connection mit oder zu hsqldb.jar?

so wies dasteht

> Ich kann Dir sicher weiterhelfen, wenn Du mir erklärst, was Du unter
> dem Satz "X hat eine Connection zu (oder mit) h2.jar" genau verstehst.
>

Hermann

hermann krauß

unread,
Sep 6, 2007, 5:36:00 AM9/6/07
to
Moin,

Ingo Menger wrote:
> On 5 Sep., 16:49, hermann krauß <hermann.kra...@siemens.com> wrote:
>> Hallo miteinander,
>> versuche gerade, zur Laufzeit ein .jar zu laden.
>> leider krieg ich das irgendwie nicht hin
>
> Das ist schade.
> Noch schlimmer ist, daß Du nicht erklärt hast
> - was Du versucht hast

Vereinfacht das:


public static void main(String[] args) {
String sDrv ="org.h2.Driver";
String sJar = "D:/local/Data/DaBhaR/JavaClasses/h2.jar";
String sUrl =
"jdbc:h2:D:/local/Data/DaBhaR/Interlin/IliRead.H2/IliReadH2";

try {
Connection o = testLoadClass(sDrv, sJar, sUrl);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public static Connection testLoadClass(String sDrv, String sJar,
String sUrl) throws Exception {
Connection oConn = null;
File file = new File(sJar);

if(!file.exists())
throw new RuntimeException("Working Directory falsch gesetzt,
kann " + sJar + " nicht finden.");

URL extLibUrl = new URL("file", "localhost", file.getAbsolutePath());

URLClassLoader loader = new URLClassLoader(new URL[]{extLibUrl});
final Class extClass = loader.loadClass(sDrv);

Class.forName(sDrv);
oConn = DriverManager.getConnection(sUrl, "sa", "");

return oConn;
}

> - was dabei herausgekommen ist

java.lang.ClassNotFoundException: org.h2.Driver
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)

> - inwiefern sich das von dem, was Du erwartest, unterscheidet.


> Hättest Du das, dann könnte man Dir nämlich sofort helfen. So jedoch
> muß ich erst bei Astro TV anrufen und wenn ich drankomme, werde ich
> mir erklären lassen, was H. Krauß wohl gemeint haben mag mit "jar
> laden" und "nicht hingekriegt".

will dich nicht zu Okkultismus verleiten ...
>
>

>> gibts da irgendwo ein kleines Beispiel für den Aufbau einer Connection,
>
> Sischer, sischer.
>
>> z.B. mit h2.jar oder hsqldb.jar
>
> Du willst eine Connection mit oder zu hsqldb.jar?

so wies dasteht

> Ich kann Dir sicher weiterhelfen, wenn Du mir erklärst, was Du unter
> dem Satz "X hat eine Connection zu (oder mit) h2.jar" genau verstehst.
>

Hermann

Message has been deleted

Hubert Partl

unread,
Sep 6, 2007, 7:30:49 AM9/6/07
to

> hilfreich wäre hier eine relative (zum Projekt) Pfad-Angabe
> -> genügt es, wenn das .Jar im selben Verzeichnis,
> wie das aufrufene .Jar ?

nein, aber was wäre mit:
Das Driver-jar auspacken und die Pakete/Klasen ins eigene jar hinzunehmen,
also das eigene jar enthält alles, was man für die Ausführung braucht.


--


hermann krauß

unread,
Sep 6, 2007, 7:47:58 AM9/6/07
to
Hallo,

Hubert Partl wrote:
>
>> hilfreich wäre hier eine relative (zum Projekt) Pfad-Angabe
>> -> genĂĽgt es, wenn das .Jar im selben Verzeichnis,


>> wie das aufrufene .Jar ?
>

> nein, aber was wäre mit:

> Das Driver-jar auspacken und die Pakete/Klasen ins eigene jar hinzunehmen,

> also das eigene jar enthält alles, was man für die Ausführung braucht.
das klingt auch ganz gut

hatte es allerdings inzwischen so gelöst:
- .jar in ein Verzeichnis innerhalb des Projekts importiert
- anschließend über
- Project - Properties - Java Build Path
Libraries - Add Jars
registriert

Auf jeden Fall mal herzlichen Dank
du hast mich auf die richtige Idee gebracht

Hermann

Oliver Haupt

unread,
Sep 6, 2007, 9:08:47 AM9/6/07
to
On 6 Sep., 13:47, hermann krauß <hermann.kra...@siemens.com> wrote:
> Hallo,
>
> Hubert Partl wrote:
>
> >> hilfreich wäre hier eine relative (zum Projekt) Pfad-Angabe
> >> -> genügt es, wenn das .Jar im selben Verzeichnis,

> >> wie das aufrufene .Jar ?
>
> > nein, aber was wäre mit:

> > Das Driver-jar auspacken und die Pakete/Klasen ins eigene jar hinzunehmen,
> > also das eigene jar enthält alles, was man für die Ausführung braucht.

>
> das klingt auch ganz gut
>
> hatte es allerdings inzwischen so gelöst:
> - .jar in ein Verzeichnis innerhalb des Projekts importiert
> - anschließend über
> - Project - Properties - Java Build Path
> Libraries - Add Jars
> registriert
>
> Auf jeden Fall mal herzlichen Dank
> du hast mich auf die richtige Idee gebracht
>
> Hermann

Diese Einstellungen sind aber lediglich in Deiner IDE gueltig. Ob
alles nach dem Export in ein .jar uebernommen wird und so verfuegbar
ist wie Du es Dir vorstellst ist damit nicht wirklich sicher gestellt.

Viel Erfolg!

cu,

olli

0 new messages