HBCIUtils + URLClassLoader

 
stefanw
Benutzer
Avatar
Geschlecht: keine Angabe
Beiträge: 37
Dabei seit: 06 / 2009
Betreff:

HBCIUtils + URLClassLoader

 · 
Gepostet: 27.08.2009 - 15:57 Uhr  ·  #1
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
Benutzer
Avatar
Geschlecht:
Beiträge: 779
Dabei seit: 08 / 2004
Betreff:

Re: HBCIUtils + URLClassLoader

 · 
Gepostet: 27.08.2009 - 16:16 Uhr  ·  #2
Das ist eine Frage für ein Java-Forum, nicht für ein Onlinebanking-Forum...
-stefan-
kleiner77
Benutzer
Avatar
Geschlecht:
Beiträge: 779
Dabei seit: 08 / 2004
Betreff:

Re: HBCIUtils + URLClassLoader

 · 
Gepostet: 27.08.2009 - 16:17 Uhr  ·  #3
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
Benutzer
Avatar
Geschlecht: keine Angabe
Beiträge: 37
Dabei seit: 06 / 2009
Betreff:

Re: HBCIUtils + URLClassLoader

 · 
Gepostet: 27.08.2009 - 16:35 Uhr  ·  #4
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
Benutzer
Avatar
Geschlecht:
Beiträge: 779
Dabei seit: 08 / 2004
Betreff:

Re: HBCIUtils + URLClassLoader

 · 
Gepostet: 27.08.2009 - 16:38 Uhr  ·  #5
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
Benutzer
Avatar
Geschlecht: keine Angabe
Beiträge: 37
Dabei seit: 06 / 2009
Betreff:

Re: HBCIUtils + URLClassLoader

 · 
Gepostet: 27.08.2009 - 16:50 Uhr  ·  #6
Das Management der Plugins sowie einen TCP Port für Fernwartung =)
kleiner77
Benutzer
Avatar
Geschlecht:
Beiträge: 779
Dabei seit: 08 / 2004
Betreff:

Re: HBCIUtils + URLClassLoader

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

Das Thema wird jetzt jedenfalls eindeutig off-topic.
hibiscus
Benutzer
Avatar
Geschlecht: keine Angabe
Herkunft: Leipzig
Homepage: willuhn.de/
Beiträge: 10838
Dabei seit: 03 / 2005
Betreff:

Re: HBCIUtils + URLClassLoader

 · 
Gepostet: 27.08.2009 - 17:11 Uhr  ·  #8
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
Benutzer
Avatar
Geschlecht: keine Angabe
Beiträge: 37
Dabei seit: 06 / 2009
Betreff:

Re: HBCIUtils + URLClassLoader

 · 
Gepostet: 27.08.2009 - 23:46 Uhr  ·  #9
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
Gewählte Zitate für Mehrfachzitierung:   0