Asynchrone Webservices mit Axis 1.x in Java



Ähnliche Dokumente
Verteilte Systeme: Übung 4

Advoware mit VPN Zugriff lokaler Server / PC auf externe Datenbank

Wiederholung: Beginn

Adminer: Installationsanleitung

Universal Dashboard auf ewon Alarmübersicht auf ewon eigener HTML Seite.

Kommunikations-Parameter

Handbuch. timecard Connector Version: REINER SCT Kartengeräte GmbH & Co. KG Goethestr Furtwangen

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Live Update (Auto Update)

Tutorial -

3M Helth Information Systems. 3M KAPS PEPP Simulation. Installationsanleitung

Durch Doppelklick auf die Zeile der entsprechenden Schnittstelle gelangt man in die Detaileingabe der Schnittstelle.

Auszug aus JAX-WS Folien

WebService in Java SE und EE

Dieser Ablauf soll eine Hilfe für die tägliche Arbeit mit der SMS Bestätigung im Millennium darstellen.

LPT1 Anschluss mit PCMCIA Karte

Powermanager Server- Client- Installation

Planung für Organisation und Technik

Version smarter mobile(zu finden unter Einstellungen, Siehe Bild) : Gerät/Typ(z.B. Panasonic Toughbook, Ipad Air, Handy Samsung S1):

Step by Step Webserver unter Windows Server von Christian Bartl

Anwenderdokumentation AccountPlus GWUPSTAT.EXE

How-to: Webserver NAT. Securepoint Security System Version 2007nx

Auto-Provisionierung tiptel 30x0 mit Yeastar MyPBX

Java: Vererbung. Teil 3: super()

Anleitung zur Webservice Entwicklung unter Eclipse

ecaros-update 8.2 Update 8.2 procar informatik AG 1 Stand: DP 02/2014 Eschenweg Weiterstadt

Installation Collax Server mit Sage New Classic

Installation der Konfigurationsdateien für alle Windows-Versionen bis einschließlich Microsoft Windows 7

Backup der Progress Datenbank

Virtual Private Network

Einführung in die Programmierung

Bkvadmin2000 Peter Kirischitz

Über die Internetseite Hier werden unter Download/aktuelle Versionen die verschiedenen Module als zip-dateien bereitgestellt.

SANDBOXIE konfigurieren

Zustandsgebundene Webservices

INFORMATION MONITOR HSM SOFTWARE GMBH CLIENT-INSTALLATION

Stecken Sie Ihren USB Stick oder Ihre externe USB Festplatte in den USB Steckplatz des Sinus 154 DSL SE.

Programmieren in Java

Installation von NetBeans inkl. Glassfish Anwendungs-Server

Datensicherung EBV für Mehrplatz Installationen

Um zu prüfen welche Version auf dem betroffenen Client enthalten ist, gehen Sie bitte wie folgt vor:

Konfiguration VLAN's. Konfiguration VLAN's IACBOX.COM. Version Deutsch

OP-LOG

INDEX. Öffentliche Ordner erstellen Seite 2. Offline verfügbar einrichten Seite 3. Berechtigungen setzen Seite 7. Öffentliche Ordner Offline

Betriebshandbuch. MyInTouch Import Tool

Übung: Verwendung von Java-Threads

Programmierkurs Java

Icinga Teil 2. Andreas Teuchert. 25. Juli 2014

Konfiguration von Igel ThinClients fu r den Zugriff via Netscaler Gateway auf eine Storefront/ XenDesktop 7 Umgebung

Einrichtung des WS_FTP95 LE

Überprüfung der digital signierten E-Rechnung

OUTLOOK (EXPRESS) KONFIGURATION POP3

Adressen der BA Leipzig

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Outlook 2013

mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank

Installationsanleitung SSL Zertifikat

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

e-books aus der EBL-Datenbank

Installation des GeoShop Redirector für Apache (Stand ) ================================================================

AUTOMATISCHE -ARCHIVIERUNG. 10/07/28 BMD Systemhaus GmbH, Steyr Vervielfältigung bedarf der ausdrücklichen Genehmigung durch BMD!

Wählen Sie bitte START EINSTELLUNGEN SYSTEMSTEUERUNG VERWALTUNG und Sie erhalten unter Windows 2000 die folgende Darstellung:

Step by Step Remotedesktopfreigabe unter Windows Server von Christian Bartl

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Kleines Handbuch zur Fotogalerie der Pixel AG

Installation der SAS Foundation Software auf Windows

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

euro-bis Import von Bestellungen aus Buch- und Aboauskunft Stand

Psyprax GmbH. Netzwerk Installation unter XP. Wichtig für alle Netzwerkinstallationen: Psyprax GmbH

Die Backup-Voreinstellungen finden Sie in M-System Server unter dem Reiter "Wartung".

Artikel Schnittstelle über CSV

FORUM HANDREICHUNG (STAND: AUGUST 2013)

Datenübernahme von HKO 5.9 zur. Advolux Kanzleisoftware

IMAP Backup. Das Programm zum Sichern, Synchronisieren, Rücksichern und ansehen von gesicherten Mails. Hersteller: malu-soft

Wie richten Sie Ihr Web Paket bei Netpage24 ein

Installationsanleitung für CashPro im Mehrbenutzerzugriff/Netzwerkbetrieb

LDAP Konfiguration nach einem Update auf Version 6.3 Version 1.2 Stand: 23. Januar 2012 Copyright MATESO GmbH

Switching. Übung 7 Spanning Tree. 7.1 Szenario

White Paper. Installation und Konfiguration der PVP Integration

Konfiguration Firewall (Zyxel Zywall 10) (von Gruppe Schraubenmeier)

Lokale Installation von DotNetNuke 4 ohne IIS

0. VORBEMERKUNG VORBEREITUNG DES SYSTEMS INSTALLATION UND KONFIGURATION VON PD-ADMIN Installation...3

Benachrichtigungsmöglichkeiten in SMC 2.6

Lizenzen auschecken. Was ist zu tun?

Guide DynDNS und Portforwarding

AnNoText. AnNoText Online-Update. Copyright Wolters Kluwer Deutschland GmbH

GeoPilot (Android) die App

Connecting Content. User Manual. Version: 1.2

Legen Sie nun dieses Verzeichnis mit dem Namen "joomla" hier an: C:xampphtdocs.

AN-0137 Application Note SORCUS-Support-System Benutzung des SORCUS-Support-Systems (für Kunden)

Titel. App-V 5 Single Server Anleitung zur Installation

Umgang mit der Software ebuddy Ändern von IP Adresse, Firmware und erstellen von Backups von ewon Geräten.

teamsync Kurzanleitung

PCE-USM RS USB Logger

Professionelle Seminare im Bereich MS-Office

Hochschulrechenzentrum

2 Die Terminaldienste Prüfungsanforderungen von Microsoft: Lernziele:

Transkript:

Asynchrone Webservices mit Axis 1.x in Java 1. Übersicht Architektur Da Webservices nach relativ kurzen Timeouts Anfragen abgearbeitet haben müsse, sind komplexe Anfragen wie sie in der Bioinformatik üblich sind praktisch nicht möglich. Dieses Java Paket stellt ein Framework für Dokument basierte, asynchrone Webservices bereit. Es basiert auf den HOBIT Empfehlungen und teilt die eigentlich asynchone Anfrage für den Benutzer unsichtbar in drei synchrone Ausrufe auf. Dazu wird der eigentlich Request, an Endpoint übermittelt und eine Id zugeteilt. Anschließend wird von dieser Id regelmäßig der Status abgefragt, wobei die HOBIT Statuscodes verwendet werden. Ist die Anfrage abgearbeitet oder liegt ein Fehler vor wird die letztendlich als Ergebnis an den Benutzer weitergereicht. Dazu ist sowohl eine Client als auch eine Server Komponente erforderlich. Die Client Komponente verwandelt die asynchrone Anfrage wie beschrieben in synchrone Aufrufe. Die Server Komponente hat die Aufgabe, diese synchronen Anfragen engegenzunehmen, in einer Datenbank zwischenzuspeichern und abzuarbeiten. Sie stellt zusätzlich ein einfaches Interface für die Erweiterung um eigene Nutz methoden zur Verfügung. Anforderungen Für den Betrieb ist Server seitig Axis (getestet mit Version 1.1 und 1.3) und eine Datenbank (getestet mit MySQL 4.0) erforderlich. Pakete Für den Client sind folgende externen Pakete erforderlich und müssen vor Betrieb heruntergeladen werden: log4j 1.2.8+, xml apis (ab JDK 1.5 enthalten), jdom 1.0+, xercesimpl, Axis Bibliotheken. Für den Server zusätzlich mysql connector java 3.0.9+ (für MySQL, sonst entsprechend) und Tools (Paket enthalten) erforderlich und müssen im Classpath des Webservers liegen. 2. Server Implementieren eines Webserices Um einen (bestehenden) Webservice asynchron zu machen, ist es in erster Linie nur notwendig, die Klasse AsynchronousCallHandler zu erweitern. Alle öffentlichen Methoden dieser Klasse mit org.w3.dom.document als Ein und Ausgabeparameter werden dann bei entsprechendem Aufruf durch den Client asynchron behandelt: public class Example extends AsynchronousCallHandler { public synchronized org.w3c.dom.document wait(org.w3.dom.document rqst) throws Exception { int time = Integer.parseInt(rqst.getDocumentElement().getAttribute("time")); wait(time); return rqst; Zur Konfiguration sind folgende Methoden verfügbar: setlogger(class, Logger) setzt für die Klasse

Class einen org.apache.log4j.logger, auf dem Logging Informationen ausgegben werden. Per default wird hier der mit der Klasse AsynchronousCallHandler asoziierte Logger gesetzt. Mit setvalidation(class, boolean) kann beeinflusst werden, ob die Anfragen eines Webservices einer bestimmten Klasse validiert werden. Dies ist aktiviert, sofern es nicht geändert wird. Dabei wird nur der Teil der Anfragen validiert, der an den Namespace http://hobit.sourceforge.net/xsds/hobitasyncws.xsd gebunden ist, nicht aber der Inhalt des mitgeschickten Dokuments. Mit setasynchronous(class, List) kann man für eine Klasse eine Liste von Methodennamen übergeben, die als asynchron behandelt werden. Alle anderen Methoden stehen nicht asynchron zur Verfügung. Wird diese Methode nicht aufgerufen werden die geeigneten Methoden (also public, mit org.w3c.dom.document als Ein und Ausgabeparameter) mit Reflection ermittelt. Die beschriebenen Methoden sollten in einem static Konstruktor des Webservices entsprechend aufgerufen werden: static { setlogger(example.class, Logger.getLogger(Example.class); setvalidation(example.class, true); List methods = new ArrayList(); methods.add( wait ); setasynchronous(example.class, methods); Konfiguration der Umgebung Im Hintergrund läuft ein Server, der die eingegangenen Anfragen aus der Datenbank lädt und abarbeitet. Der Server wird statisch beim ersten Zugriff auf den Webservice (z.b. bei Abfrage des wsdl). Der Server loggt in einen org.apache.log4j.logger, der wie üblich über das erste im Classpath gefundene File log4j.properties konfiguriert wird (Beispiel im Paket enthalten). Die Einstellungen des Servers können über die Datei server.properties konfiguriert werden, die im Classpath liegen muss. Folgende Einstellungen sind möglich: SERVER_POLLING_INTERVAL=10000 // alle ~ ms in DB neue Jobs suchen THREAD_COUNT=10 // Anzahl der Jobs, die gleichzeitig laufen Der Server kann auch auf einem anderen Rechner gestartet (und gestoppt) werden. Dazu muss man auf diesem Rechner java jar AsyncWS.jar (start stop) ausgeführt werden. Dazu müssen die oben angegebenen Pakete schon im Verzeichnis lib/ liegen. In der Datei DbManager.xml (die auch im Classpath liegen muss) wird der Zugriff auf die benötigte Datenbank eingestellt. Folgende Zeilen sind dafür wichtig und müssen an die eigene Umgebung angepasst werden. Über den $dbdriver$ und $dbtype$ kann die verwendete Datenbank eingestellt werden (die Klasse muss im Classpath liegen, für MySQL ist das mysql connector java 3.0.9+.jar). Die angegebene Datenbank muss für den Benutzer mit Schreib und Lock Grants angelegt werden, Tabellen werden automatisch erzeugt. <property><name>($dbdriver$)</name><value>com.mysql.jdbc.driver</value></property> <property><name>($dbtype$)</name><value>mysql</value></property>

<property><name>($user$)</name><value>asyncws</value></property> <property><name>($password$)</name><value>mypassword</value></property> <property><name>($host$)</name><value>localhost</value></property> <property><name>($port$)</name><value>3306</value></property> <property><name>($database$)</name><value>profi</value></property> Die Schemas hobitstatuscode.xsd und hobitasyncws.xsd sind im Paket enthalten und müssen im Classpath des Webservice liegen. Diese werden für die Validierung der eingehenden Requests an den asychronen Webservice benötigt. Konfiguration des Webservice Zu einem Webservice gehört als Beschreibung ein wsdl. Für alle abgeleiteten asynchronen Webservices ist im Paket ein Template AsynchronousCallHandlerTemplate.wsdl enthalten, in dem die geerbten und zur asynchronen Betrieb notwendigen Typen, Messages und Operationen definiert sind. Hier muss in erster Linie der Target Namespace sowie eigene Namespaces gesetzt werden (xmlns:tns="http://examplens", xmlns:example= http://myexample ), eigene Typen definiert und/oder importiert werden (<xsd:import namespace="http://myexample" schemalocation="myexample.xsd"/>) sowie für Request und Response Elemente für die neu definierten Methoden erstellt werden <message name="waitrequest"> <part name="request" type="example:waittype"/> </message> <message name="waitresponse"> <part name="request" element="example:waittype"/> </message> und die Operationen in Port und Binding definiert werden: <porttype name="exampletype"> <operation name="wait"> <input message="tns:waitrequest"/> <output message="tns:waitresponse"/> </operation>... <binding name="examplebinding" type="tns:exampletype"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="wait"> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation>... Am Schluss muss noch der Port des Service auf die engültige URL gesetzt werden. Hört sich anstrengend an, ist aber in fünf Minuten erledigt! Neben den üblichen Einstellungen für den Webservice müssen die Methoden des Webservice nun

im Webservice Deployment Descriptor (server config.wsdd) entsprechend eingestellt werden: <! Web Service Administration Service > <service name="promlresolver" provider="java:msg" use="literal" style="document"> <parameter name="allowedmethods" value="*"/> <wsdlfile>/example.wsdl</wsdlfile> <parameter name="classname" value="de.lmu.ifi.bio.hobit.profi.webservice.example"/> </service> Hier ist wichtig, dass in allowedmethods auf jeden Fall die Methoden isasynchronous, getasynchronous, getstatus und getresult enthalten ist, da diese vom AsynchronousCallHandler geerbt und vom Client aufgerufen werden. Für die Konfiguration als Message basierten Webservice müssen unbedingt provider auf java:msg und style auf document gesetzt werden. Außerdem sollte das wie oben beschrieben erzeugte wsdl File statisch erzeugt und angegeben werden. Wie üblich muss der Klassenname gesetzt werden. 3. Client Für die Abfrage eines asynchronen Webservices ist die Klasse AsynchronousCall vorgesehen. Sie erweitert die Klasse org.apache.axis.call von Axis, sodass die gewohnten Funktionen zur Verfügung stehen. So kann man einen Asynchron Call mit einem Endpoint konstruieren, und dann einen Request an den Webservice schicken: org.w3c.dom.document request =... SOAPBodyElement input[] = new SOAPBodyElement[1]; input[0] = new SOAPBodyElement(request.getDocumentElement()); String endpoint = http://services.bio.ifi.lmu.de/localhost:8084/promlresolver/services/promlresolver ; AsynchronousCall ac = new AsynchronousCall(endpoint); Vector response = ac.invoke(input[]); org.w3c.dom.document result = ((SOAPBodyElement)response.get(0)).getAsDocument(); Dabei pollt die Methode invoke() intern solange, bis der Aufruf vom Server abgearbeitet ist und kehrt erst dann wieder zurück! Wie häufig gepollt wird kann über setpollinginterval(int interval) in Millisekunden gesetzt werden. Alternativ dazu ist es auch möglich, den Request zu Fuß abzusetzen, den Status zu pollen und das Ergebnis abzuholen. Dafür sind folgende Methoden vorhanden: public boolean isasynchronous(string methodname); public String getasynchronous(org.w3c.dom.element request); public int getstatus(string id); public org.w3c.dom.element getresult(string id); // ist eine bestimmte Method asynchron? // setzt Request ab und gibt Id zurück // fragt den Status einer Id ab // ruft das Ergebnis zu einer Id ab Bei den Werten des Typs org.w3c.dom.element in den Methoden getasynchronous() / getresult() handelt es sich um die Root Elemente der Anfrage/des Ergebnisses. Alle Methoden werfen eine Exception wenn der Aufruf nicht korrekt abgearbeitet werden konnte. Die Methode getresult() wirft eine InvocationTargetException, wenn der eigentliche Methodenaufruf ein Fehler zurücklieferte. Der zurückgegebene Status der Methode getstatus() richtet sich nach der Hobit Spezifikation für asynchrone Webservices (http://hobit.sourceforge.net/statuscodes_list.html).