Domino 9 und frühere Versionen > ND8: Entwicklung - XPages
WebService mit XPage konsumieren
m3:
Die neue Methode, Axis einzubinden (OSGI), ist schöner. moderner, ...
Aber in so einem großen Projekt alle "Seiteneffekte" zu brücksichtigen ist natürlich schwer.
Wie gesagt, PMR aufmachen, damit das Problem mehr Gewicht bekommt.
Markus_8891:
Hi,
ich habe inzwischen mal ein bisschen mit den Webservices gearbeitet.
Folgende Situation:
Ich habe im Java Project die nötigen Axis Jars importiert. Dort gibt es nun auch eine Klasse von mir, mit einer static Methode die den Webservice Call übernimmt ( in der Methode steht etwas sowas ).
--- Code: --- Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(endpoint));
call.setOperationName( method );
call.addParameter("op1", XMLType.XSD_INT, ParameterMode.PARAM_MODE_IN);
call.addParameter("op2", XMLType.XSD_INT, ParameterMode.PARAM_MODE_IN);
call.setReturnType(XMLType.XSD_INT);
call.invoke( new Object [] { i1, i2 });
--- Ende Code ---
In der XPage wird dann diese Methode gerufen:
--- Code: ---importPackage(myPackage)
var ws = new Webservice();
var result = ws.callWebserivce(param1,param2 .... )
--- Ende Code ---
Das ganze funktioniert ganz gut.
Jetzt will ich aber die Performance des Ganzen etwas verbessern:
Ich habe mal gemessen wo die meiste Zeit verloren geht.
Beim ersten Aufruf der Methode ws.callWebserivce(param1,param2 .... ) auf einer XPage kann es zwischen 2 - 4 s dauern bis zu der Stelle im Java Code bevor der eigentliche Webservice gerufen (call.invoke(...)) wird.
Der eigentliche Webservice ist also noch ausgeschlossen und es dauert schon zwischen 2-4 s.
Und das ganze bei jedem Neuladen wieder :(.
Ich schätze mal das es daran liegt das die importieren packages im java, jedes mal frisch aus den jars geladen werden müssen.
So jetzt meine eigentliche Frage was kann ich machen ?
Meine Optionen:
1. Man kann in die notes.ini bei den javauserclasses jars laden, die beim Starten des Domino automatisch mitgeladen werden. Diese sind dann in Agenten und Java Librays verfügbar. Soweit ich weiß läuft mein Code aber in der HTTP JVM des Domino und somit sind die javauserclasses auch nicht erreichbar? Stimmt das soweit? (Nebenbei laufen da zwei verschiedene JVMs ?)
2.Kann ich irgendwo die HTTP JVM dazu bringen die jars beim starten zu laden über irgendein Konfiguration oder so ?
3.Ich könnte mir auch ein echtes Control (wie in der Extension Libray) entwickeln. Hab ich auch schon versucht doch ich bin daran gescheitert das die jars die ich für den axis webservice call hinzugefügt habe. Dabei konnte ich festellen das ein Großteil der jars sowieso schon in einem solchen Control verfügbar sind.
--- Code: --- Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(endpoint));
call.setOperationName( method );
call.addParameter("op1", XMLType.XSD_INT, ParameterMode.PARAM_MODE_IN);
call.addParameter("op2", XMLType.XSD_INT, ParameterMode.PARAM_MODE_IN);
call.setReturnType(XMLType.XSD_INT);
--- Ende Code ---
sowas steht für den Webservice Call in dem Control prinzipell ist das alles kein Problem.
Aber:
XMLType.XSD_INT
ParameterMode.PARAM_MODE_IN
Kann ich leider nicht nutzen, im Eclipse wird mir angezeigt " Access restriction: ParameterMode is not accessible due to restriction on required library"
Hat jemand dazu eine Idee ?
Oder hat jemand noch einen anderen Vorschlage was ich machen könnte ?
Danke im Vorraus
Mit freundlichen Grüßen
Markus
m3:
Ich bekam mal vom Support die Antwort, dass die jars in der DB einen performance-penalty beinhalten, da sie bei jedem Aufruf erst auf die Disk geschrieben werden.
Ev. kannst Du das ganze beschleunigen, wenn Du die jars ins java/lib/ext Verzeichnis am Server legst.
Markus_8891:
Hm... okay
ich bin zur Zeit auf 8.5.2
Kann es sein das es diesen Ordner nicht mehr gibt?(hab grade eben mal gesucht und ihn nicht gefunden)
Mfg
Markus
Navigation
[0] Themen-Index
[*] Vorherige Sete
Zur normalen Ansicht wechseln