Das Notes Forum
Lotus Notes / Domino Sonstiges => Java und .NET mit Notes/Domino => Thema gestartet von: Hrtgpdh am 25.02.09 - 08:22:59
-
Um einen Datenabgleich mit einer Firebird- Datenbank zu gewährleisten, habe ich einen Java- Agenten geschrieben. Der funktioniert so weit gut auf meinem lokalen System, aber bei einer Portierung auf das Live- System bestehen Probleme mit der Registrierung der JDBC- Klassen(jaybird2.1.6 von sourceforge).
Mein Ziel ist es, wenn möglich das JDBC- jar mit in das Projekt zu kompilieren und dann so auszuliefern. Ist das so möglich, und falls ja welche Einstellungen, muß ich vornehmen?
Lokal habe ich das jar im Verzeichnis Notes/jvm/lib/ext liegen, da funktioniert es problemlos.
Das verwendete System ist Notes/Domino 8.02.
Gruß Hartwig
-
Du kannst in dem Java Agenten direkt Jar-Dateien hinzufügen, man kann sich auch eine Java-Bibliothek mit den ganzen Jar Dateien erstellen und dem Projekt hinzufügen.
Das findest Du alles beim Agenten unten links "Projekt bearbeiten"
-
Die Option habe ich bereits gefunden ;), und auch genutzt, aber wenn ich das jar einbinde (für Server- Version richtiger Treiber (laut Doku)) und laufen lassen bekomme ich:
Agent Manager: Agent error: java.sql.SQLException: No suitable driver
Die Frage ist nun, findet er keinen Treiber, ist der Treiber falsch....
Hatte ein ähnliches Problem am Anfang auch lokal, seitdem der Agent einmal gelaufen ist, braucht er nur noch das jar im Projekt,wie gesagt ich habe es einmal unter notes/jvm/lib/ext einbinden müssen??
Bei einem zweiten Test- System war es genau das selbe.
-
Wenn er lokal läuft dann geht es?
Ich hab mal eine Oracle-JDBC Anbindung gemacht und habe die Oracle-JDBC-Klassen in den Agenten gepackt, das hat super funktioniert.
Wobei deine Fehlermeldung deutet ja drauf hin das der Fehler beim SQL-Statement--Ausführen kommt, kannst Du nicht mal prüfen ob das Einbinden des Treibers fehlerfrei läuft?
Hier fehlt jetzt irgendwie der Code um schlauer zu werden ;)
-
Lokal funktioniert es problemlos (seit dem ich das jar einmal in das Bibliotheks- Verzeichnis kopiert habe).
//Versuchen eine Verbindung zur Firebird- Datenbank herzustellen
Class.forName( "org.firebirdsql.jdbc.FBDriver" ).newInstance();
-Der Code-
String m_sDBConn, sUsr, sPwd;
//Pfad und Name der Datenbank sind fix hinterlegt
m_sDBConn = "jdbc:firebirdsql://jk-app2/"+"E:/Scoreline/ILine5/IL5_Server/Data/JKComputer_IL5.GDB";
//Standard User und Passwort einer Interbase/Firebird- Datenbank wird verwendet
sUsr = "SYSDBA";
sPwd = "masterkey";
m_cn = DriverManager.getConnection( m_sDBConn, sUsr, sPwd );
Ich habe den Treiber vor dem laden auch schon explizit registriert --> es wurde keine Exception geworfer, aber der Fehler kam immer noch????
-
Der Agent läuft am Domino, sehe ich das korrekt?
Und Domino läuft auf einer Windows-Box?
Und der Agent will auf eine Datenbank im Netzwerk zugreifen, wenn ich den Connectionsstring korrekt lese.
Daher (wieder einmal) meine Frage: Hat der Windows-Benutzer, unter dem der Domino-Server läuft, ausreichend Rechte, um auf die Ressource im Netzwerk zuzugreifen? (Üblicherweise nicht, da dem SYSTEM Account diese Rechte fehlen).
-
@m3: Dann kommt ja so etwas wie "Verbindung konnte nicht aufgebaut werden" hier kommt aber ein "Treiber nicht korrekt" Fehler
Hast Du die Firebird Bibliothek jetzt im Verzeichnis oder im Agenten? Ich denke Du musst die im Agenten haben und aus dem Verzeichnis löschen, weil dem Domino kann man nicht so ohne weiteres eine Jar-Datei unterschieben ;)
-
Lokal zum testen und entwickeln original auf dem Verzeichnis, nach einiger Zeit(02.02.) habe ich sie lokal gelöscht und im Agenten eingefügt.
Stand der Dinge heute: die Firebird- Bibliothek ist (lokal) nur noch im Agenten, und läuft dort.
Problem ist portierung auf den Server.
Gruß Hartwig
-
Ich würd auf dem Server zunächst einmal das lib/ext Verzeichnis suchen.
Tu dein Firebird-Treiber erstmal da rein.
Starte den Server neu.
Müßte dort sein:
\Notes8_Programm\jvm\lib\ext
-
@axel: Warum funktioniert das nicht mit dem Agent und "All In"?
-
Weiss nicht.
Es könnte vielleicht eher am
<code>
m_sDBConn = "jdbc:firebirdsql://jk-app2/"+"E:/Scoreline/ILine5/IL5_Server/Data/JKComputer_IL5.GDB";
</code>
Das sieht merkwürdig aus.
Müsste man sich mal anschauen, wie man für Firebird solche Strings aufbaut, wenn man auf einem Firebird auf einer anderen Kiste zugreift.
Ich find im Web sowas:
jdbc:firebirdsql:localhost/3050:c:/Temp/Test.FDB
3050 könnte eine Portangabe sein.
Vielleicht so die Art:
jdbc:firebirdsql:<ipAdresse>/3050:E:/Scoreline/ILine5/IL5_Server/Data/JKComputer_IL5.GDB
-
Momentan greife ich auch von meinem Arbeitsplatz aus, auf diesen Server zu. Lokal ist das kein Problem.
Für das Produktiv- System sollte es auch kein Problem darstellen, dieses liegt auf dem gleichen Cluster, und hat auch alle Berechtigungen für den Zugriff.
Danke für die Hilfe :D
-
Habe gestern noch das JDBC- jar auf dem Produktiv- Systeme installiert, seitdem funktioniert es tadellos. Kann sich das irgendwer erklären?????
-
Habe gestern noch das JDBC- jar auf dem Produktiv- Systeme installiert, seitdem funktioniert es tadellos. Kann sich das irgendwer erklären?????
Was hast du getan?
a) du hast das jar File, das wo das JDBC macht, in einen Pfad getan, der in der OS-Umgebungsvariable CLASSPATH definiert ist.
b) du hast das jar File, das wo das JDBC macht, in den lib/ext Pfad des Domino Servers getan.
c) ???
-
Guten morgen,
ich habe das jar- File in den lib/Ext Pfad des Domino- Servers kopiert.
Schönes Wochenende :D
-
Ein ClassNotFound hatte ich mit einer Einbindung des jdbc-Treibers im Agenten selbst hatte ich noch nie. Aber andere kuriose Probleme.
Das war ein Type 2 oder 3 JDBC Treiber und der meldete kuriose Connection Fehler aus dem JNI, sobald das resultset eine bestimmte Größe überstieg. Hatte diese Probleme nicht, nachdem ich den Treiber in lib/ext getan hab.
Ein Agent hat in Notes einen eigenen Classloader.
Hierarchisch drüber liegen die Classloader für CLASSPATH Umgebungsvariable und lib/ext.
Theoretisch ist die Konstruktion nicht schlecht. Macht jeden Agenten unabhängiger von anderen Agenten.
Aber irgendwie ist das auch verzwurbelt.
Ich find, dass man gerade JDBC-Treiber ruhig ins lib/ext tun kann.
Erschwert natürlich das deployment.
Aber ansonsten sind die JDBC-Treiber schon abwärtskompatibel, so dass es da keine Versionierungsprobleme gibt, wenn es andere Anwendungen gibt, die eine frühere Version des JDBC Treibers erwarten.
Die Art wie Notes mit Java umgeht ist schon recht speziell. Merkt man allein dadran, dass es 14 Monate nach der Ankündigung auf der Lotussphere 2008 bezüglich eines Eclipse-gestützten LotusScript Editors immer noch keinen Eclipse basierten JAVA Editor für Notes-Designer 8.5 gibt!!!
Aber Enterprise Software ist halt verzwurbelt. Jede
-
Mal schauen was wir noch an Kuriositäten finden ;), bisher war ich hauptsächlich in C++(VSS) bzw. Java unterwegs und habe mich da schon an die eine oder andere Annehmlichkeit gewöhnt. Den Agenten der jetzt auf dem Produktiv- System läuft, habe ich mittels Eclipse entwickelt, und dann zu Notes portiert.
Danke für die Hilfe :D