Lotus Notes / Domino Sonstiges > Java und .NET mit Notes/Domino

JDBC Treiber einbinden

<< < (2/4) > >>

qojote:
Hi,

ich hab auch mal eine bisserl probiert.
Ich habs mit dem db2 driver aus der Toolbox für AS400 probiert.
Folgendes trat auf stelle verbindung her werde nach passwort gepromptet geb alles ein und schluss.
Unser 400 Admin war leider nicht da aber normalerweise hab ich zugriff ( auf jeden Fall per client access und odbc )
Da ich mich auf der AS400 nur als Benutzer bewege weiß ich nicht ob da noch was anderes eingestellt bzw freigegeben werden muß.

Ich habs dann mal mit so einem JDBC Test Tool versucht.Und genau dasselbe.
Ich häng das mal hier dran ist ein kleines Applet.
Find ich ganz gut zum lernen weil du da immer den Code angezeigt bekommst den es generiert.

Ich will jetz noch mal ein paar Sachen probieren und werde meiner Ergebnisse nacher nochmal posten.

Gruß
qojote

Axel_Janssen:
Das Tool überzeugt mich persönlich nicht.

AS400. Remote Zugriff?
Das kann, muss aber nicht ein anderes Problem sein als meins.

Mein Unsatisfied LinkError scheint irgendwas mit irgendwelchen JNI-Einbindungs-Details in Java11 zu tun haben. Bin mir aber nicht ganz sicher.

Leider habe ich immer noch kein Domino6 auf diesem Computer.

Ich bin mir ziemlich sicher, dass das dann problemlos funktioniert.

Keine Ergebnisse auch wenn ich in DB2 Java auf Version 11 zurücksetze.

Im Internet gibt es auch keine richtige Lösung.

Axel

Axel_Janssen:
es läuft mit IBM-JDBC treiber. ;D 8) ;D


--- Code: ---import lotus.domino.*;
import java.util.*;
import java.io.*;
import java.sql.*;

public class JavaAgent extends AgentBase {
   
   private final String jdbcUrl = "jdbc:db2:SAMPLE"; // Syntax siehe IBM DB2 JDBC Treiber Doku
   private final String jdbcUser = "db2admin";  // Name von db2-superuser auf meinem Rechner
   private final String jdbcPassword = "kennwort"; // 70% aller meiner kennwörter heissen so :-)
   private Driver jdbcDriver = null;
   public void NotesMain() {
      try {  
         jdbcDriver = new COM.ibm.db2.jdbc.app.DB2Driver();
         Properties props = new Properties ();
         props.put(jdbcUser, jdbcPassword);
         Connection con = jdbcDriver.connect(jdbcUrl, props);
         Statement stmt = con.createStatement();
         String query = "SELECT NAME FROM STAFF ORDER BY SALARY";
         ResultSet rs = stmt.executeQuery(query);
         while (rs.next()) {
            System.out.println(rs.getString(1));
         }
         rs.close();
         stmt.close();
          con.close();
          DriverManager.deregisterDriver(jdbcDriver);
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
}

--- Ende Code ---


Das Problem war, dass der Treiber nicht funktioniert, wenn man db2java.zip in den Agenten über "Edit Project" einbindet.

Man muss db2java.zip in die Notes.ini einbinden.
Und zwar eben von wo aus man den Agenten startet.
Wenn man den Agenten über das Aktionsmenu im Client startet, dann läuft er auf dem Client.
Die Zeile

--- Code: ---JavaUserClasses=D:\SQLLIB\java\db2java.zip;

--- Ende Code ---
muss also in der Notes.ini des Clients stehen.

Für den Produktivbetrieb empfehle ich dringend mit serverseitigen Agenten zu arbeiten. Dann braucht db2java.zip nur in der ini des Servers eingebunden zu werden.

UND ZWAR GENAU AUS DEM SQLLIB\JAVA VERZEICHNIS. Nicht aus java11 oder java12 Verzeichnis von DB2 nehmen!!!
Das habe ich erst falsch gemacht.
So ist sichergestellt, das immer der JDBC-Treiber verwendet wird, der auch aktuell in DB2 unterstützt wird. Wenn man das falsche nimmt, stürzt der Notes-Client grundsätzlich ab.  

DB2 läuft mit unterschiedlichen JDBC Treibern. Standardmässig läuft zumidest DB2 7 mit einem Java Version 1 Treiber. Normalerweise ändert jeder halbwegs ambitionierte Java-User das natürlich direkt auf Java2. Über das file usejdbc2.bat --> befindet sich in SQLLIB\java12).
Das kann man über usejdbc1 wieder zurückgeändert werden.
(bevor man das laufen lässt, alle DB2-Dienste und Notes-Client schliesen (letzteres warum auch immer)).

Die bats bewirken File-Copy-Operationen. Man kann sicher sein, dass im SQLLIB\Java Verzeichnis immer das "richtige" db2java.zip steht.
Notes5 läuft problemlos mit beiden, auch wenn das eine für java12 ist und Notes5 nur Java118 unterstützt.  
Das entsprechende file kann dann natürlich auch von der Box des DB2-Server auf die Box des Notes-Servers kopiert werden. Zumindest wenn beides Windows ist. Bin mir nicht ganz sicher, aber kommen nicht auch DB2Clients mit dem SQLLIB\Java Unterverzeichnissen?


@quojote: Wenn du auf deinem Rechner einen DB2User-Client hast, mit dem du auf dem DB2-Server auf der AS400 zugreifen kannst, dann halte ich es für möglich, dass ein Notes-Agenten-Zugriff via JDBC auf die AS-400 möglich ist, ohne dass du dich mit AS400 Spezifika herumschlagen musst. Sicher bin ich mir nicht. Versuch es einfach mal aus, wenn du willst.
Der remote Zugriff auf die DB2 würde dann der optimierte DB2UserClient machen.
Ansonsten kannst du auch den net-Driver für remote Zugriffe auf das RDBMS verwenden. Remote muss aber grundsätzlich als anderes Wort für "Risiko schlechter Performance" verstanden werden.

Dafür müssten die folgenden Zeilen im code ausgetauscht werden:


--- Code: ---private final String jdbcUrl = "jdbc:db2//<serverAS400>:<DB2_Java_Daemon_Listener_PORT>/DB_NAME";
statt
private final String jdbcUrl = "jdbc:db2:DB_NAME";

und
 
jdbcDriver = new COM.ibm.db2.jdbc.net.DB2Driver();
statt
jdbcDriver = new COM.ibm.db2.jdbc.app.DB2Driver();

--- Ende Code ---

Axel
   

Ralf_M_Petter:
Hallo!

AS/400 DB/2 ist nur bedingt mit den anderen DB/2 Implementationen der IBM zu vergleichen. Diese wird nämlich auch von anderen Leuten programmiert. Obwohl IBM versucht das zu vereinheitlichen. @Quote kannst du mal den Source deines Agenten posten, dann schaue ich mal drüber was da nicht passt. Bei mir funktioniert das nämlich einwandfrei. Eventuell poste noch Release Stand der AS/400. Übrigens emfehlenswert ist es immer wenn man das erste mal mit JDBC auf der AS/400 spielt die Java und Database Gruppen-PTF's einzuspielen. Ausserdem dadurch das sich Java Agents nur sehr schwer debuggen lassen, mache ich es in letzter Zeit nicht mer mit Agenten sondern mit Java Programmen die ich über den Job scheduler ausführen lasse.

Grüße

Ralf

Till_21:

--- Zitat von: Axel_Janssen am 19.06.03 - 09:10:28 ---1. In J2EE Servern wie Tomcat oder Websphere arbeitet man this days mit sogenannten Connection Pools.

--- Ende Zitat ---

Hi Axel,
hier kommt es ganz klar auf den verwendungszweck an !!
habe frueher grundsaetzlich mit conn-pooling gearbeitet...
schau dir dann aber mal die belastung des servers an... ;-(
selbst bei 'nur' 5 offenen Connections...

schoenen gruss

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln