Zugriff vom Dominoserver auf einen MS SQL-Server

  • Hallo zusammen,



    momentan habe ich augenscheinlich ein kleines gedankliches Problem.
    Wie muss ich mich anstellen, damit ich in einer Notes DB einen Agent dazu bringen, damit dieser auf einen MS SQL-Server zugreifen kann?
    Der Dominoserver Version 6.5.3, der die DB hält läuft auf einem Suse Linux Server. Von einem Windows Client ist es ja klar, da müsste ich eine ODBC-Verbindung einrichten, mit der ich dann auf den SQL-Server zugreifen kann. Aber der Datenabgleich zwischen SQL und Notes soll vom Server passieren.
    Hat jemand einen Tip, Link oder eine Idee?


    cu


    Jörg

  • Hi,


    hast Du eventuell noch ein paar Tips. Weil irgendwie steckt ich in einer Einbahnstrasse.


    Ich hab jetzt mal JDBC Driver für MySQL auf dem Linux rechner installiert und folgenden einfachen Agent kreiert:


    import lotus.domino.*;
    import java.sql.*;


    public class JavaAgent extends AgentBase {
    private Connection conn = null;
    private String driver = "com.mysql.jdbc.Driver";
    public void NotesMain() {


    try {
    Session session = getSession();
    AgentContext agentContext = session.getAgentContext();


    // (Fügen Sie Ihren Code hier ein)

    Database db = agentContext.getCurrentDatabase();
    final String server = "127.0.0.1:3306";
    final String usr = "user";
    final String pwd = "kennwort";


    Class.forName(driver).newInstance();
    String sqldb = "testdb";
    String connStr = "jdbc:mysql://" + server + "/" + sqldb;
    conn = DriverManager.getConnection(connStr, usr, pwd);
    String sql = "SELECT * FROM `tabelle";
    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery(sql);
    } catch(Exception e) {
    e.printStackTrace();
    }
    }
    }


    Allerdings bekomme ich schon den Fehler "error message: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver" sofern der Agent auf dem Server starten will.


    Und einen ODBC Treiber für MySQL habe ich auch installiert.
    Dann habe ich auch eine DSN mit namen "testdb" eingerichtet und auf der Linuxkonsole kann ich mich damit auch auf die DB verbinden.


    Wenn ich den Agent wie folgt anlege, klappts allerdings nicht:


    Dim con As New ODBCConnection
    Dim qry As New ODBCQuery
    Dim result As New ODBCResultSet
    Dim firstName As String
    Dim lastName As String

    Set qry.Connection = con
    Set result.Query = qry
    If con.ConnectTo("testdb", "user", "kennwort") Then
    qry.SQL = "SELECT * FROM personen"
    result.Execute
    If result.IsResultSetAvailable Then
    Do
    result.NextRow
    firstName = result.GetValue("Vorname")
    lastName = result.GetValue("Nachname")
    msg = msg & Chr(10) & firstName & " " & lastName
    Loop Until result.IsEndOfData
    result.Close(DB_CLOSE)
    Else
    Exit Sub
    End If
    con.Disconnect
    End If


    Dann kommt im Protokoll ein Unkown Lotus Script error


    Hast Du noch eine Idee, einen Tip oder ein Beispiel?


    cu

  • Hast du den MySQL Treiber denn auch entweder über die Notes.ini in JavaUserClasses miteingebunden oder direkt in den Agenten als Java-Klasse importiert ?


    Bei dem Script Agenten. In welcher Zeile kommt denn der Fehler ?
    Bau doch mal ein ErrorHandling mit ein

  • Hi,


    jetzt gehts immerhin schon mal ein Stück weiter. Den Treiber habe ich in die ini eingetragen und der Agent kommt nun mit den Meldungen:



    25.04.2005 11:36:49 AMgr: Agent ('ImportFromSQL-JDBC' in 'Test.nsf') error message: com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: ** BEGIN NESTED EXCEPTION ** java.net.SocketException MESSAGE: java.lang.SecurityException: 127.0.0.1,3306 STACKTRACE: java.net.SocketException: java.lang.SecurityException: 127.0.0.1,3306 at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:151) at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:280
    25.04.2005 11:36:49 AMgr: Agent ('ImportFromSQL-JDBC' in 'Test.nsf') error message: at com.mysql.jdbc.Connection.createNewIO(Connection.java:1830)
    25.04.2005 11:36:49 AMgr: Agent ('ImportFromSQL-JDBC' in 'Test.nsf') error message: at com.mysql.jdbc.Connection.<init>(Connection.java:430)
    25.04.2005 11:36:49 AMgr: Agent ('ImportFromSQL-JDBC' in 'Test.nsf') error message: at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:268)
    25.04.2005 11:36:49 AMgr: Agent ('ImportFromSQL-JDBC' in 'Test.nsf') error message: at java.sql.DriverManager.getConnection(DriverManager.java:543)
    25.04.2005 11:36:49 AMgr: Agent ('ImportFromSQL-JDBC' in 'Test.nsf') error message: at java.sql.DriverManager.getConnection(DriverManager.java:194)
    25.04.2005 11:36:49 AMgr: Agent ('ImportFromSQL-JDBC' in 'Test.nsf') error message: at JavaAgent.NotesMain(JavaAgent.java:23)
    25.04.2005 11:36:49 AMgr: Agent ('ImportFromSQL-JDBC' in 'Test.nsf') error message: at lotus.domino.AgentBase.runNotes(Unknown Source)
    25.04.2005 11:36:49 AMgr: Agent ('ImportFromSQL-JDBC' in 'Test.nsf') error message: at lotus.domino.NotesThread.run(NotesThread.java:215)
    25.04.2005 11:36:51 AMgr: Agent ('ImportFromSQL-ODBC' in 'Test.nsf') error message: Error loading USE or USELSX module: *LSXODBC


    Hört sich ja irgendwie danach an, als wenn ich mich beim MySQL-Server nicht anmelden könnte. Aber in dessen log sehe ich erst keinen Versuch.


    Und der Scriptagent meckert mir das an:


    Error loading USE or USELSX module: *LSXODBC


    Aber das brauche ich doch für eine ODBC Verbindung oder?
    Wenn ich das "use '*lsxodbc'" rausnehme, steht direkt im Agentlog das:


    ERROR: Unknown LotusScript Error


    Und nu?

  • Hi,


    hat leider nichts gebracht. Immer noch das:


    AMgr: Agent ('ImportFromSQL-JDBC' in 'Test.nsf') error message: com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: ** BEGIN NESTED EXCEPTION ** java.net.SocketException MESSAGE: java.lang.SecurityException: 127.0.0.1,3306 STACKTRACE: java.net.SocketException: java.lang.SecurityException: 127.0.0.1,3306 at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:151) at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:280

  • Ändere doch mal die lokale IP 127.0.0.1 in die von "aussen" erreichbare IP-Adresse Deines MySQL Server's. Natürlich muss der MySQL-Server auch auf dieser IP horchen.


    NicoP

  • Hallo zusammen!
    Also um von Domino auf MSSQL zuzugreifen ist der SQL Server 2000 Driver for JDBC erste Wahl. Den solltest du bei M$ downloaden und die jar-Archive in einen Java-Agent einbinden (Projekt bearbeiten und jars hinzufügen). Jetzt weiß schonmal der Client Bescheid. Danach machst du die Dinger dem Server bekannt, indem du die Pfade in der Notes.ini einträgst (JAVAUSERCLASSES = ...) - Wichtig! Dieser Eintrag sollte nicht am Ende der Notes.ini stehen, dann klappts manchmal nicht. Also ich habe mehrere Agenten die das können, allerdings alle in Java. MSSQL ist unsere StandardDB und somit muß ich immer Brücken bauen...also wenn du noch Fragen hast....

  • Hi xillian,


    das hört sich ja alles wunderbar an.


    Punkt 1)


    Ist das der richtige Treiber?


    M$ JDBC


    Weil da gibts dann nur eine tar-Datei


    Punkt 2)


    Und wie binde ich die nun in meinem Agent ein? Wenn ich einen neuen Java-Agent erstelle, sehe ich nirgends eine Importmöglichkeit oder muss ich da einfach das import -Statement verwenden?


    Wäre schön, wenn Du mir noch mal helfen könntest.


    cu


    Jörg