Das Notes Forum

Lotus Notes / Domino Sonstiges => Java und .NET mit Notes/Domino => Thema gestartet von: Tannibal am 16.02.17 - 15:16:44

Titel: SAP Java Connector
Beitrag von: Tannibal am 16.02.17 - 15:16:44
Hallo ihr,

nachdem die COM/librfc.dll-Schnittstelle im SAP-GUI abgekündigt wurde, musste ich mir eine neue Schnittstelle zu SAP suchen.

Ich habe den SAP Java Connector gefunden und auch in Eclipse zum Laufen bekommen.

Nun scheitere ich aber den Test in einem Java Agent nachzustellen.
Der Connector besteht aus den Dateien: sapjco3.dll, sapjco3.jar und sapjco3.pdb

Wo muss denn die Dateien im Agent hinzufügen, damit ich sie sauber verwenden kann?

Wenn ich nur die .jar hinzufüge, erkennt er zwar die Klassen aber bekomme trotzdem eine Exception.

Danke
Titel: Re: SAP Java Connector
Beitrag von: eknori am 16.02.17 - 15:44:43
Und welche?

Vermutlich sind die jars mit Java 8 erstellt.
Titel: Re: SAP Java Connector
Beitrag von: Tannibal am 16.02.17 - 16:08:01
Meistens das:

Code
Exception in thread "AgentThread: JavaAgent" java.lang.NoClassDefFoundError: com.sap.conn.jco.JCoDestinationManager
	at JavaAgent.step1Connect(Unknown Source)
	at JavaAgent.NotesMain(Unknown Source)
	at lotus.domino.AgentBase.runNotes(Unknown Source)
	at lotus.domino.NotesThread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: com.sap.conn.jco.JCoDestinationManager
	at lotus.domino.AgentLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:642)
	... 4 more

Wenn ich die .jar in jvm\lib\ext lege bekomme eine Security-Meldung, nach Anpassung der java.policy lande ich aber beim gleichen Fehler wie oben.


EDIT: jetzt hat es seltsamerweise funktioniert, muss aber noch prüfen unter welcher Konstellation..
EDIT2: es funktioniert, wenn die .jar im Agent hinzugefügt wurde, die java.policy angepasst und die dll über eine Systemvariable eingebunden wird. Eher unschön.
            Ansonsten lande ich in einem: java.lang.UnsatisfiedLinkError: sapjco3 (Not found in java.library.path)
Titel: Re: SAP Java Connector
Beitrag von: Tannibal am 21.02.17 - 09:09:43
Sonst noch eine Idee wie ich das direkt in der Datenbank zum Laufen bekomme?
Titel: Re: SAP Java Connector
Beitrag von: jBubbleBoy am 21.02.17 - 18:07:18
Ich denke es läuft?

Probier mal die DLL in das Notes-Programmverzeichnis anzulegen, wenn das geht, dann kann die DB sich ohne viel Aufwand selber "lauffähig" machen.
Titel: Re: SAP Java Connector
Beitrag von: Tannibal am 22.02.17 - 13:09:14
Problem ist, dass ich die Funktion an den Clients benötige, da wir einige Masken haben die bestimmte Werte aus SAP benötigen.
Daher möchte ich so wenig manuellen Aufwand wie möglich (weltweit und so...)

Aber du hattest Recht, dll ins Programmverzeichnis und jar in jvm/lib/ext.
In die java.pol habe ich ein "permission java.lang.RuntimePermission "getClassLoader";"  gepackt.
Entscheidend war wohl ein "Clean Project"

Weitere Tipps gerne willkommen :)
Titel: Re: SAP Java Connector
Beitrag von: jBubbleBoy am 22.02.17 - 13:26:17
Die jar-Dateien würde ich nicht auf dem PC ablegen, sondern in der aktuellen DB belassen, welchen Vorteil bringt das?
Java-Archive können auch über die notes.ini bekannt gemacht werden; JAVAUSERCLASSES=...
Einen java.policy Eintrag bezüglich ClassLoader musste ich noch nie machen ???
Titel: Re: SAP Java Connector
Beitrag von: Tannibal am 22.02.17 - 13:41:27
Die Jar-Ablage macht keinen Unterschied.

Wenn ich die java-policy im Standard belasse erhalte ich das.
Code
Exception in thread "AgentThread: JavaAgent" java.lang.ExceptionInInitializerError
	at java.lang.J9VMInternals.initialize(J9VMInternals.java:221)
	at com.sap.conn.jco.JCo.createJCo(JCo.java:32)
	at com.sap.conn.jco.JCo.<clinit>(JCo.java:26)
	at java.lang.J9VMInternals.initializeImpl(Native Method)
	at java.lang.J9VMInternals.initialize(J9VMInternals.java:199)
	at com.sap.conn.jco.JCoDestinationManager.getDestination(JCoDestinationManager.java:104)
	at JavaAgent.step1Connect(Unknown Source)
	at JavaAgent.NotesMain(Unknown Source)
	at lotus.domino.AgentBase.runNotes(Unknown Source)
	at lotus.domino.NotesThread.run(Unknown Source)
Caused by: java.security.AccessControlException: Access denied (java.lang.RuntimePermission getClassLoader)
	at java.security.AccessController.throwACE(AccessController.java:121)
	at java.security.AccessController.checkPermission(AccessController.java:194)
	at java.lang.SecurityManager.checkPermission(SecurityManager.java:544)
	at COM.ibm.JEmpower.applet.AppletSecurity.superDotCheckPermission(AppletSecurity.java:1455)
	at COM.ibm.JEmpower.applet.AppletSecurity.checkRuntimePermission(AppletSecurity.java:1317)
	at COM.ibm.JEmpower.applet.AppletSecurity.checkPermission(AppletSecurity.java:1619)
	at COM.ibm.JEmpower.applet.AppletSecurity.checkPermission(AppletSecurity.java:1470)
	at java.lang.ClassLoader.getParent(ClassLoader.java:431)
	at com.sap.conn.jco.ext.Environment.<clinit>(Environment.java:128)
	at java.lang.J9VMInternals.initializeImpl(Native Method)
	at java.lang.J9VMInternals.initialize(J9VMInternals.java:199)
	... 9 more

Liegt bestimmt auch nur irgendwo in meiner Unwissenheit der Java-Entwicklung unter Notes begraben  :P