Externe Jar zur Laufzeit benutzen

mrburns11

Grünschnabel
Hallo,

ich habe eine RCP Anwendung basierend auf Plugins und will mich per JDBC mit DB2 auf z/OS verbinden.
Um die Verbindung aufbauen zu dürfen ist eine Lizenz in Form einer jar nötig, die vom User nach der Installation bereitgestelt wird.
Gibt es irgend eine Möglichkeit diese jar nach der Installation der Anwendung bekannt zu machen, sodass
sie sich im classpath befindet und die Verbindung aufgebaut werden kann. Ich hatte gehofft, das man zum Beispiel einen Ordner angibt, indem man dann die jar unterbringt und von der Anwendung verwendet wird.
Oder löst man das auf einem ganz anderen Weg?

Gibt es Erfahrungen dazu?

Vielen Dank
 

Bratkartoffel

gebratene Kartoffel
Premium-User
Hi,

JDBC Verbindungen von einem Client sehe ich generell eher negativ. Dies lässt sich nur schwer absichern, das Passwort für die Verbindung muss ja dem Client ja irgendwie bekannt sein. Je nachdem, wer das Programm verwendet und wie du denen vertraust kann das ein Problem sein.

Flexibler lässt sich das über eine Client-Server Architektur abbilden, wobei der Client über eine API mit dem Server kommuniziert und dieser die Datenbank Verbindungen verwaltet. Neben der verbesserten Sicherheit ist dieser Ansatz auch besser skalierbar.

Wenn du das JAR allerdings so wie beschrieben zur Verfügung stellen willst, dann würde ich ein "Dummy"-JAR mit einer Default-Implementierung ausliefern, welche halt dann beim Zugriff einen Fehler generiert oder einfach nichts tut. Wenn der Benutzer dann die Lizenz in Form des Jars bekommt, dann muss er das vorhandene nur ersetzen.

Grüsse,
BK
 

mrburns11

Grünschnabel
Hi,
das Ganze ist ein wenig verzwickt. Die Verbindungsdaten werden vom User über einen Dialog abgefragt. Es ist nur möglich, sich zu verbinden, wenn die Lizenz-Jar sich zur Laufzeit im classpath befindet. Die Lizenz-jar darf ich aber nicht mit ausliefern. Heißt also das der User die Lizenz bei IBM kauft bzw. gekauft hat und diese dann auf irgend einem Weg nach der Installation in den classpath meiner Anwendung bringen muss. Das beste wäre einfach ein Ordner 'lib', wo man die jar hinlegen könnte. Leider geht das nicht. Ich habe in der product configuration eine Variable hinzugefügt, die man später in der config.ini editieren kann, und dem Plugin, das die jar benötigt diesen Pfad als classpath Library definiert. Das klappt leider nicht.
Hat jemand noch eine Idee?
 

Bratkartoffel

gebratene Kartoffel
Premium-User
Hi,

schon ausprobiert was passiert, wenn du im CP eine JAR angiebst, die es nicht gibt?
Startet das Programm trotzdem? Dann wäre das kein Problem, oder?

Grüse,
BK
 

Improof

Erfahrenes Mitglied
Hi,

Das beste wäre einfach ein Ordner 'lib', wo man die jar hinlegen könnte. Leider geht das nicht. Ich habe in der product configuration eine Variable hinzugefügt, die man später in der config.ini editieren kann, und dem Plugin, das die jar benötigt diesen Pfad als classpath Library definiert. Das klappt leider nicht
Vielleicht verstehe ich was falsch, oder aber mir fehlen genauere Infos zu deiner Programmarchitektur. Aber rein nach dem, was du geschrieben hast, sollte es doch genau so gehen? Einen Ordner zum CP hinzufügen und dort nach der Lizenz-Jar suchen. Ist sie nicht da, Fehlermeldung o.ä.

Was genau funktioniert denn an diesem Ansatz nicht?
Und ein paar Infos, wie dein Programm aufgebaut ist, wären auch nicht schlecht, eventuell liegt der Fehler ja da.

Gruß
Daniel
 

mrburns11

Grünschnabel
Hi.
Das Programm besteht aus einzelnen Plugins. Eines davon ist für die Verbindung zu DB2 zuständig und genau dieses benötigt die Lizenz zur Laufzeit. Ich kann im Manifest dieses Plugins eine jar angeben, die es nicht gibt. Das Programm startet. Wenn ich im Programm nun eine Verbindung angelegt habe und mich verbinden will gibt es den Lizenz Fehler, da das Ding ja nicht da ist. Soweit so gut.
Um das zum Laufen zu bringen, kann ich jetzt folgendes machen:
1. Im plugins Ordner unter dem Installationspfad das betreffende jar suchen
2. In dieses jar das Lizenz-jar packen.
Die Jar muss allerdings genauso heißen wie vor dem builden angegeben.

Das löst zwar das Problem, allerdings kann das doch nicht der Weg sein so etwas zu bewerkstelligen.
Es muss doch irgend einen Standard Weg geben, eine JDBC Verbindung zu DB2 auf z/OS aufzubauen.