Julien Seitz: existierendes Programm erweitern

Hallo,
ich habe ein Programm (nicht von mir geschrieben), welches eine ldap Anbindung bietet, welche mir jedoch nicht genügt.
Daher würde ich gerne diese Funktionalität erweitern.

Das Programm besteht vereinfacht gesagt aus einer core.jar, welche die Grundfunktionalität liefert und eine springframework-ldap.jar, welche eingebunden wird, und die ldap Abfragen übernimmt.

Wenn möglich würde ich gerne die core.jar unangetastet lassen, damit ich bei einem Update nicht wieder an dieser Datei Änderungen vornehmen muss.

Daher würde ich einfach die springframework-ldap.jar durch meine eigene jar datei ersetzen, sodass das programm gar nicht merkt, dass es auf eine andere bibliothek zugreift.

Soweit so gut.
Jetzt das Problem:

Da ich die springframework-ldap.jar jedoch nicht komplett ersetzen will, sondern eine gewisse Grundfunktionalität hilfreich wäre es gut, wenn ich diese trotzdem noch irgendwie einbinden könnte (ebenfalls ohne Änderungen an dieser jar datei zu machen).

Daher meine Frage: wie realisiert man dies am besten?

Gibt es einen dynamischen Classloader, welcher es ermöglicht, den namespace in einem jar-Archiv zu ändern, damit es keinen Konflikt mit meiner eigenen Klasse gibt.

Ist es möglich, von einer dynamisch eingebundenen Klasse eine Unterklasse abzuleiten?

Oder ist mein Ansatz grundsätzlich ungünstig?

Schonmal vorab vielen Dank für eure Mühe
Gruß Julien

  1. Hallo Julien,

    warum erstelltst du nicht eine eigene Klasse MyLdap, welche sich von der Basisklasse ableitet? In dieser Klasse ueberschreibst du entsprechende Methoden, welche du veraendern moechtest.
    Und wenn die Basisklasse auf weitere Klassen den Packages zugreift, du dieses aber unterbinden, oder zumindest durch deine eigenen Klassen ersetzen, moechtest, so ueberschreibst du die jeweiligen Getter.

    Oder habe ich dein Problem nicht korrekt verstanden?

    Gruesze,
    Christopher

    1. Vielen Dank für die Antwort

      Ich habe leider das Problem, dass in core.jar eine Anweisung wie
      import com.springframework.ldap;
      drin steht, von welcher dann eine Objektinstanz erzeugt wird.

      Wenn ich jetzt allerdings meine eigene Klasse nutzen möchte, dann müsste ich sie unter dem gleichen Namespace angeben, was zu Konflikten führt, wenn ich die alte Klasse ebenfalls unter diesem Namespace belasse.

      Vielleicht habe ich ja auch einen Denkfehler drin.

      1. Guten Morgen,

        mein Tipp: versuche nicht, mit einem manipulierten Classloader zu tricksen, sondern regle das ganze sauber: Wenn Du in einer Klasse aus core.jar nicht die Originalklasse verwenden willst, dann ändere die core.jar und importiere und benutze dort Deine Klasse. Alles andere ist Frickelwerk und wird nicht vernünftig funktionieren. Das Thema Classloading ist nicht trivial und hier sollte man nur schrauben, wenn man sich gut auskennt.

        Schöne Grüße,

        Peter

        1. OK vielen Dank.
          Habe auch inzwischen recht viel damit rumgespielt und bin auf diverse Probleme gestoßen, selbst wenn ich von dem Problem mit den Namespaces absehe.

          Zum beispiel ging die Parameterübergabe nicht vernünftig und Vererbung mit dynamisch eingebundenen Klassen scheint in Java auch nicht möglich zu sein.

          Dann werde ich wohl die core.jar anpacken müssen, auch wenn mir das nicht behagt.

          Gruß Julien