JDBC Zugriff

  • Hallo Zusammen,


    ich bin schon seit geraumer Zeit daran eine einfache Verbindung zu einer JDBC Datenquelle aufzubauen. Und erhalte gerade beim immer wieder eine Fehlermeldung, deren Ursache ich mir nicht erklären kann.


    Folgendes habe ich vorbereitet:


    Lotus Notes Client 6.5.1
    In dem Java Agent neues JAR-File hinzugefügt: mysql java connector 5.1.5


    In dem Java-Agent habe ich folgende Programmierung durchgeführt:



    //********************************************


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


    public class JavaAgent extends AgentBase {


    public void NotesMain() {


    try {

    String usr = "root";
    String pwd = "grobber";
    String sql = "SELECT * from ma";

    Class.forName("com.mysql.jdbc.Driver").newInstance();
    Session session = getSession();
    AgentContext agentContext = session.getAgentContext();
    Database db = agentContext.getCurrentDatabase();


    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/jat", usr, pwd);
    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery(sql);


    while (rs.next() ) {
    System.out.println("Name:" + rs.getString("vname"));
    }

    } catch(Exception e) {
    e.printStackTrace();
    }
    }
    }



    //********************************************


    und erhalte dann folgende Fehlermeldung:


    java.lang.NoClassDefFoundError: java/util/LinkedHashMap
    at java.lang.ClassLoader.defineClass0(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:703)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:627)
    at lotus.domino.AgentLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:448)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:283)
    at java.sql.DriverManager.getConnection(DriverManager.java:543)
    at java.sql.DriverManager.getConnection(DriverManager.java:194)
    at JavaAgent.NotesMain(JavaAgent.java:21)
    at lotus.domino.AgentBase.runNotes(Unknown Source)
    at lotus.domino.NotesThread.run(NotesThread.java:215)


    ******************************************************


    Die Fehlermeldung kommt bei der Methode getConnection.


    Hat jemand eine Idee was ich dort falsch mache? Ich habe schon sehr lange hin und her probiert. Auch mit einem Treiber von MS SQL und ähnlicher Programmierung hat es nicht funktioniert. Ich muß irgendeinen grundsätzlichen Fehler machen und kann diesen einfach nicht erkennen.


    Vielen Dank im Voraus für mögliche Tipps.


    Gruß, Torsten

  • Es würde auch mit älteren Notes Versionen funktioniern, nur sind in deren JRE's die entsprechende Java/util-Klassen nicht enthalten.


    Also entweder diese mit in den Agenten importieren oder ins jeweilige JRE Verzeichnis des Clients/Servers

  • Hallo,


    das Thema mit den Bibliotheken ist schon wieder aktuell. Das Programm muß jetzt doch auf Version 6 bzw. 7 von Lotus Notes lauffähig sein.


    Ich habe verstanden, daß die Klasse java/util/LinkedHashMap eingebunden werden muß. Aber wie macht man das? Ich habe zum Beispiel die Bibliothek core.jar (wird mit der Version 8 mitgeliefert) in das Verzeichnis für den Client der Version 6 kopiert). In core.jar ist die Klasse java/util/LinkedHashMap.class enthalten. Das hilft nicht. Hier ist sehr wahrscheinlich das Jarfile rt.jar das Pendant zum core.jar.
    Mit einigem Hin- und Herkopieren bin ich nicht weitergekommen. Ich weiß wirklich nicht mehr weiter.


    Beispielsweise, wenn ich core.jar in das Lib-Verzeichnis vom 6er-Client kopiere und dann starte, dann stürzt Lotus Notes ab oder ich kriege die Meldung, daß die Virtuelle Maschine nicht gestartet wurde. Das passiert natürlich auch, wenn ich zuvor rt.jar zuvor gelöscht habe.


    Ich finde leider auch nirgends eine Dokumentation zu dem Thema. Beispielsweise würde ich auch gerne einfach nur die Virtuelle Engine komplett austauschen. Gibt es eine Möglichkeit?


    Gruß, Grobber

  • Natürlich kann das niemals gehen, wenn du eine Klasse die für eine neuere Version gedacht ist in eine ältere JRE einfügst.


    Und davon die JVM komplett auszutauschen kann ich dir auch nur abraten, weil du dann Gefahr läufst daß irgendwann gar nichts mehr geht.


    Und wie man das macht: Du holst dir die Klasse bzw das jar-File für die entsprechende Version und bindest dieses ein