Ich habe unter 9.0.1 eine "Datenpumpe" geschrieben, die mittels JDBC Daten aus / in relationale Datenbanken pumpt, quasi "IEI für Arme".
Damit das auf dem Server sauber funktioniert, habe ich den JDBC- Treiber unter /opt/hcl/domino/notes/latest/linux/jvm/lib/ext
abgelegt. In der Java Scriptlibrary lade ich dann die Class:
Class.forName(m_strjClassName);
// Connect to the database
if (m_strjUserName != "") {
m_lcConProp.put("user", m_strjUserName);
m_lcConProp.put("password", m_strjPassword);
}
m_lcCon = DriverManager.getConnection(m_strjUrl,m_lcConProp);
Das hat unter 9.0.1 wunderbar funktioniert (ohne Anpassung java.policy / java.pol), aber seit dem Update auf 11.0.1 lädt er die Klasse nicht mehr.
24.02.2021 06:00:08 AMgr: Agent ('java.JDBC_Periodical' in 'apps/DataPump.nsf') error message: Exception in thread "AgentThread: JavaAgent"
24.02.2021 06:00:08 AMgr: Agent ('java.JDBC_Periodical' in 'apps/DataPump.nsf') error message: java.lang.NoClassDefFoundError: com.mysql.cj.jdbc.Driver (initialization failure)
Ich verwende den aktuellsten mySQL- Treiber, der explizit für Java 8 ist (mit Domino 11 wurde ja auf openjvm 1.8 umgestellt). Die Linux- Berechtigungen auf "mysql-connector-java-8.0.23.jar" sind identisch zu denen der anderen jars aus dem Verzeichnis.
Ich meinte irgendwo was gelesen zu haben, dass externe jars in Agenten Probleme machen seit Domino 10 oder 11, kann aber ums Verrecken den/die Artikel nicht mehr finden.
Irgendwelche Tipps für mich?
OK. Jar ist jetzt im ndext. Jetzt bekomme ich tatsächlich eine andere Meldung:
java.security.AccessControlException: Access denied ("java.lang.RuntimePermission" "setContextClassLoader")
Ich habe die java.policy geprüft, da steht folgender Eintrag:
grant codeBase "file:${notes.binary}/ndext/*" {
permission java.security.AllPermission;
};
Aber "AllPermission" ist hier wohl irreführend. Ich habe es mal so ergänzt:
grant codeBase "file:${notes.binary}/ndext/*" {
permission java.security.AllPermission;
permission java.lang.RuntimePermission "setContextClassLoader";
};
Da immer noch die gleiche Meldung kommt, fürchte ich jetzt nur, dass ich den Domino Server für das Einlesen der neuen policy durchstarten muss, denn das durchstarten des AMGR hat keine Änderung gebracht, und in einer Anleitung zu Domino Volt steht, dass man nach Änderung der java.policy den Domino durchstarten soll...
EDIT: Grade geprüft... wenn man in der "alten" Errormessage weiter runterscrollt, dann war schon dort die selbe Ursache "AccessControlException" drin... man sollte einfach die Fehler zu Ende lesen und nicht bei dem ersten Hinweis losrennen... also ist wohl auch in Domino 11 jvm/lib/ext immer noch im Standardpfad, und die Ursache ist eine Änderung in der Policy (oder ich hatte damals beim Einrichten tatsächlich eine java.pol gepflegt und das nicht dokumentiert)