HBCIUtils + URLClassLoader

stefanw

Betreff:

HBCIUtils + URLClassLoader

 ·  Gepostet: 27.08.2009 - 15:57 Uhr  ·  #60196
Hallo Hallo,

ich habe hier gerade was Abenteuerliches vor:

Code
java.net.URL p = new java.net.URL("file:\" + this.plugindir + "lib\\hbci4java.jar");

        URLClassLoader loader = new URLClassLoader(new java.net.URL[]{p},
                Thread.currentThread().getContextClassLoader() );

        HBCIUtils ds = (HBCIUtils) loader.loadClass("org.kapott.hbci.manager.HBCIUtils").newInstance();
        //HBCIUtils.init(null,null,new MyHBCICallback());
        //HBCIUtils.setParam("log.loglevel.default", "5");


Und ich weiß das ihr wisst, dass das nicht geht :lol: .
Also wie kann ich die hbci4java.jar und somit die Klassen laden das mein Plugin damit umgehen kann ? Was ich nicht will ist die Jar bei der Hauptanwendung einzubinden ... weil was soll die damit ?!

@habe gerade in den Source gelesen warum es nicht geht .... aber trotzdem ist die Frage wie ich das umsetzten kann ?

kleiner77

Betreff:

Re: HBCIUtils + URLClassLoader

 ·  Gepostet: 27.08.2009 - 16:16 Uhr  ·  #60198
Das ist eine Frage für ein Java-Forum, nicht für ein Onlinebanking-Forum...
-stefan-

kleiner77

Betreff:

Re: HBCIUtils + URLClassLoader

 ·  Gepostet: 27.08.2009 - 16:17 Uhr  ·  #60199
Davon abgesehen - warum lieferst Du die JAR-Datei nicht einfach mit? Die meisten JARs einer Java-Applikation werden nicht permanent benötigt, sondern nur, wenn bestimmte Funktionen aufgerufen werden...

stefanw

Betreff:

Re: HBCIUtils + URLClassLoader

 ·  Gepostet: 27.08.2009 - 16:35 Uhr  ·  #60200
Naja "hbci4java" einmal ist Java drin ... des weiteren ist das ja die Lib ... und da das die Lib betrieft ... warum sollte ich hier nicht fragen ?
Des weiteren ... was soll die Hauptanwendung damit !?

kleiner77

Betreff:

Re: HBCIUtils + URLClassLoader

 ·  Gepostet: 27.08.2009 - 16:38 Uhr  ·  #60201
Zitat geschrieben von stefanw
Naja "hbci4java" einmal ist Java drin ... des weiteren ist das ja die Lib ... und da das die Lib getrieft ... warum sollte ich hier nicht fragen ?

Das Problem wäre mit

java.net.URL p = new java.net.URL("file:\" + this.plugindir + "lib\\another-lib.jar");

genau das gleiche - hat also NICHTS mit HBCI4Java zu tun.

Zitat
Des weiteren ... was soll die Hauptanwendung damit !?

Was macht denn die Hauptanwendung?

-stefan-

stefanw

Betreff:

Re: HBCIUtils + URLClassLoader

 ·  Gepostet: 27.08.2009 - 16:50 Uhr  ·  #60202
Das Management der Plugins sowie einen TCP Port für Fernwartung =)

kleiner77

Betreff:

Re: HBCIUtils + URLClassLoader

 ·  Gepostet: 27.08.2009 - 16:53 Uhr  ·  #60203
Wie machst Du das denn mit den anderen "Plugins", die die Anwendung managt?

Das Thema wird jetzt jedenfalls eindeutig off-topic.

hibiscus

Betreff:

Re: HBCIUtils + URLClassLoader

 ·  Gepostet: 27.08.2009 - 17:11 Uhr  ·  #60206
Unabhaengig davon, dass das hier in der Tat offtopic ist: (denn was du suchst, ist ein generischer Plugin-Loader fuer Java. Google doch einfach mal danach ;)):

Das hier:

HBCIUtils ds = (HBCIUtils) loader.loadClass("org.kapott.hbci.manager.HBCIUtils").newInstance();

kann gar nicht gehen. Denn das "HBCIUtils ds ..." fuehrt dazu, dass die Klasse "HBCIUtils" via "import" vom Systemclassloader geladen wird, BEVOR du loader.loadClass(...) ueberhaupt aufgerufen hast.

Damit ergeben sich zwei Moeglichkeiten:

a) Die konkrete Angabe von Klassen aus HBCI4Java komplett vermeiden und alles ueber Reflection machen. Das ist natuerlich voellig unsinnig.

b) Die Klasse, die den von dir zitierten Code enthaelt muss bereits von deinem URL-Classloader geladen worden sein. Alle darin enthaltenen Klassen werden dann ebenfalls da drueber geladen.

In aller Regel kommt man - wenn man sich Plugin-Mechanismen bauen will - nicht umhin, einen eigenen Classloader zu implementieren.

stefanw

Betreff:

Re: HBCIUtils + URLClassLoader

 ·  Gepostet: 27.08.2009 - 23:46 Uhr  ·  #60215
Also ich hab mal herumprobiert und bin erstaunt :D

Code

java.net.URL p = new java.net.URL("file:\" + this.plugindir + "lib\\hbci4java.jar");

        URLClassLoader loader = new URLClassLoader(new java.net.URL[]{p},
                Thread.currentThread().getContextClassLoader() );


das reicht schon aus ... aber hier kennt er dann alle Klassen ^^ jear