WebObjects 5 Alternative Webservice Frameworks (KFK GC/GT) Betreuung Siegfried Benkner Gerhard Engelbrecht Autoren Peter Beran [email protected] 0200945 Martin Köhler [email protected] 0125955 Alexis Robin Rondeau [email protected] 0147005 Wien, am 16. Dezember 2004 Inhaltsverzeichnis 1 PRODUKTSPEZIFIKATIONEN....................................................1 1.1 ALLGEMEIN............................................................................... 1 1.2 FEATURES (LT. HERSTELLER).......................................................... 1 1.3 ANFORDERUNGEN ....................................................................... 2 2 DEVELOPMENT WORKFLOW .....................................................4 2.1 MODELLIERUNG DER DATEN ........................................................... 4 2.1.1 EOModeler ............................................................................... 4 2.2 ERSTELLEN DER APPLIKATION ......................................................... 5 2.2.1 Project Builder .......................................................................... 5 2.3 EINSTELLEN DER APPLIKATION ........................................................ 5 2.3.1 2.3.2 2.3.3 2.3.4 Web Service Assistant ................................................................ 5 Web Object Builder.................................................................... 5 Interface Buidler ....................................................................... 6 Deployment/WebObjects Application Server .................................. 6 3 CODE BEISPIEL........................................................................6 3.1 SERVICE .................................................................................. 6 3.2 CLIENT ................................................................................... 7 3.3 SICHERHEIT.............................................................................. 9 4 VERZEICHNISSE ....................................................................11 4.1 ABKÜRZUNGSVERZEICHNIS .......................................................... 11 4.2 QUELLENVERZEICHNIS ................................................................ 11 KFK GC/GT Alternative Webservice Frameworks 1 Produktspezifikationen 1.1 Allgemein Produktbeschreibung: “WebObjects is Apple's suite of tools and object-oriented frameworks for creating and deploying scalable, reusable web and Java applications for the Internet and intranets.” Hersteller: Apple Preis: 699,-- US Dollar (ca. 525,-- Euro) Produkt Informationen: http://www.apple.com/webobjects/ Produkt Dokumentation: http://developer.apple.com/documentation/WebObjects/WebObjects.html 1.2 Features (lt. Hersteller) Entwicklung (Development) • schnelle Projektentwicklung • Ansprechbarkeit der Web Services mit Klienten in den Programmiersprachen Java, AppleScript, Perl and DotNet • 3 Schichten orientierte Applikationsentwicklung (user interface, business logic, data access) • Web Services basieren am AXIS Framework Unterstützte Technologien • EJB • ORB (z.b. Java RMI-IIOP) • JTA/JTS (J2EE technologies) • SOAP (dynamische Erzeugung von Web Services mittels WSDL, XML) • JDBC und JNDI data sources • JSP und Servlet Support • JNDL Beran, Köhler, Rondeau Seite: 1 KFK GC/GT Alternative Webservice Frameworks Datenmanagement • Tools zur Erstellung, Konfiguration, Reverse Engineering, Testen von Datenbanken • Simultaner Zugriff auf verschiedene Datenbankplattformen (Oracle, MySQL, MSSQL, …) Frontend bzw. Webpräsenz • Templates zur Generierung von HTML, XML, SMIL, Swing • Tool zur schnellen Erstellung von Webseiten (data-driven, multi-lingual) Installation und Einsatz (Deployment) • schnelles Deployment auf J2EE und J2SE „kompatiblen“ Servern • Skalierbarkeit durch Clustering Support 1.3 Anforderungen Development Platforms • Mac OS X Server v10 • Windows 2000 Professional SP3 Deployment Platforms • Mac OS X Server v10 • Windows 2000 Professional SP3 • Solaris 8 Supported Application Types • Database-Driven Web Applications • Web Services • Java Client Web Applications • JavaBeans Web Applications • JavaServer Pages and Servlets Beran, Köhler, Rondeau Seite: 2 KFK GC/GT Alternative Webservice Frameworks Supported Applikation Server • Apache Tomcat 3.2.4 and 4.0.5 • BEA WenLogic 7.0 • IBM WebSphere 4.0.4 Supported Database Server • Microsoft SQL Server 2000 • MySQL 3.23.51 • OpenBase 7.0.8 • Oracle 8.1.7 und 9.2.0.1 • Sybase ASE 12.5 Supported Web Server • Sun ONE Web Server 6.0 SP2 • Apache 1.3.9 und 1.3.26 • Microsoft Internet Information Server 5.0 Beran, Köhler, Rondeau Seite: 3 KFK GC/GT Alternative Webservice Frameworks 2 Development Workflow Auf welche Weise entwickle ich meine eigenen Webapplikation? 2.1 Modellierung der Daten Für die zu modellierende Datenbank, stellt WebObjects ein leistungsfähiges graphisches Werkzeug zur Verfügung, den EOModeler. 2.1.1 EOModeler Mit diesem Tool können neue Datenbanken modelliert werden aber auch ein komplettes Reverse Engineering Datenbanken bereits durchgeführt existierender werden. Die „persistence Engine“ generiert zur Laufzeit automatisch Java Objekte aus JDBC Datenbanken und aus JNDI Services. Es muss dazu kein SQL Code geschrieben werden (vgl. EJB EntityBean). Es muss nur die Business Logik implementiert werden, welche dann mit den generierten Datenmodellen kommuniziert. Somit Beran, Köhler, Rondeau Seite: 4 KFK GC/GT Alternative Webservice Frameworks wird Datenbankplattformunabhängigkeit garantiert und es findet sozusagen eine transparenter Zugriff auf die Datenquellen statt. 2.2 Erstellen der Applikation Der nächsten Schritt im Development Workflow Prozesses ist die grundlegenden Systemkomponenten zu programmieren, sei es nun eine Java Swing Applikation, ein Webservice oder ein Servlet. 2.2.1 Project Builder Mit diesem Tool werden die initialen Web Services, HTML Seiten oder auch Java Applikationen erzeugt. Prototypen ohne Business Logik können für alle Typen automatisch generiert werden. Project Builder erzeugt keinen Code der schwer zu lesen ist, da er sich auf das vorher erzeugte Datenmodell stützt und den Code dynamisch generiert. Applikationskomponenten können einfach wiederbenutz werden und auch inkrementelles Entwickeln wird damit unterstützt. 2.3 Einstellen der Applikation 2.3.1 Web Service Assistant Diese Entwicklungsumgebung für Apple Web Services stellt ein (deaktiviertes) Default Web Service zur Verfügung, von welchem bei der Entwicklung die Methoden abgeleitet werden können. Es kann das XML Interface des Web Services definiert und davon automatisch ein WSDL Dokument generiert werden. Weiters können Client Applikationen zum Testen der Web Services generiert werden bzw in den Programmiersprachen Cocoa, C++, AppleScript und Java implementiert werden. Zudem können hier auch Java Stubs ausgehend von den WSDL Dokumenten erzeugt werden. 2.3.2 Web Object Builder Der WebObjects Builder ist ein visuelles Entwicklungsstudio, eine so genante IDE. Es dient zur Entwicklung von Daten intensiven Web Seiten und inkludiert viele wieder verwendbare Web Komponenten wie zum Beispiel automatisch generierte Tabellen, JavaScript und XML. Beran, Köhler, Rondeau Seite: 5 KFK GC/GT Alternative Webservice Frameworks 2.3.3 Interface Buidler Java Clients offerieren eine dynamische, interaktive Benutzung. Dabei bietet WebObjects die Möglichkeit den Java Client Assistant zur Generierung des Layouts zu verwenden. Mit dem InterfaceBuilder können dann Swing Interfaces erstellt werden, in die man wiederum Tabellen und Datenbank Objekte integrieren und diese mit den Java User Interface Objekten verbinden kann. 2.3.4 Deployment/WebObjects Application Server Für das Deployment kann unter WebObjects unter dem eigens mitgelieferten WebObjects J2SE Application Server und jedem anderen J2EE Application Server gewählt werden, weil die Applikationen den offenen Standards genügen. WebObjects Application Server ist ein 3-tier Applikationsserver. Diese bietet Unterstützung für Clustering, Load Balancing, Session Management und für den automatischen Applikationsneustart. Außerdem sind Tools für die remote Konfiguration, für Logging und Monitoring eingebaut. Eine unlimitierte Lizenz ist beigelegt. Für das Deployment kann trotzdem auch jeder andere J2EE Applikationsserver wie zum Beispiel Apache Tomcat, BEA WebLogic aber auch IBM WebSphere verwendet werden. 3 Code Beispiel 3.1 Service Service Code: nicht anders; ganz normales Java Web Service public class Calculator extends Object { public static double add(double addend1, double addend2) { double sum = addend1 + addend2; return sum; } public static double subtract(double minuend, double subtrahend) { double difference = minuend - subtrahend; return difference; } public static double multiply(double multiplicand1, double multiplicand2) { double product = multiplicand1 * multiplicand2; return product; } Beran, Köhler, Rondeau Seite: 6 KFK GC/GT Alternative Webservice Frameworks public static double divide(double dividend, double divisor) { double quotient = dividend / divisor; return quotient; } } Deployment des Web Services mittels: WOWebServiceRegistrar.registerWebService(Calculator.class, true); Die Klasse WOWebServiceRegistrar (com.webobjects.webservices.appserver) unterstützt Methoden zum Registrieren und Unregistrieren von Web Services. Es können Security delegates, XSLT (Extensible Stylesheet Language Transformations) Scripts usw. eingestellt werden. 3.2 Client Code: invoke Code ist rot dargestellt import java.net.*; import java.util.Enumeration; import com.webobjects.foundation.*; import com.webobjects.webservices.client.*; public class CalculatorClient extends Object { /** * Object through which the Web service's operations are invoked. */ private WOWebServiceClient _serviceClient = null; /** * Address for the Web service's WSDL document. */ private String _service_address = "http://localhost:4210/cgi-bin/WebObjects/Calculator.woa/ws/Calculator?wsdl"; /** */ public CalculatorClient() { super(); } /** * Obtains the Web service's operation names. * @return the Web service's operation names. */ public NSArray operations() { NSArray operations (serviceClient().operationsDictionaryForService(serviceName())).allValues(); NSMutableArray operation_names = new NSMutableArray(); Enumeration operations_enumerator = operations.objectEnumerator(); Beran, Köhler, Rondeau = Seite: 7 KFK GC/GT Alternative Webservice Frameworks while (operations_enumerator.hasMoreElements()) { WOClientOperation operation (WOClientOperation)operations_enumerator.nextElement(); operation_names.addObject((String)operation.name()); } return operation_names; } = /** * Invokes the Web service's operations. * @param operation operation to invoke; * @param arguments argument list; * @return value returned by the operation. */ public Double invoke(String operation, Object[] arguments) { Object result = serviceClient().invoke(serviceName(), operation, arguments); return (Double)result; } /** * Obtains the Web service name. * Normally one WSDL file describes one Web service, * but it could describe one or more services. * @return Web service name. */ public String serviceName() { // 2 return (String)serviceClient().serviceNames().objectAtIndex(0); } /** * Obtains an WOWebServiceClient through which service operations are invoked. * @return Web service-client object. */ private WOWebServiceClient serviceClient() { if (_serviceClient == null) { _serviceClient = clientFromAddress(_service_address); } return _serviceClient; } /** * Obtains a Web service-client object through which * service operations can be invoked. * @return Web service-client object. */ private static WOWebServiceClient clientFromAddress(String address) { WOWebServiceClient service_client = null; // Create the Web service's URL. URL url; try { url = new URL(address); } catch (MalformedURLException e) { Beran, Köhler, Rondeau Seite: 8 KFK GC/GT Alternative Webservice Frameworks url = null; } // Get a service-client object. service_client = new WOWebServiceClient(url); // 3 return service_client; } } Für das WebService wird das Interface WOWServiceClient verwendet. Quasi eine „Hülle zusätzlicher Funktionalität“ über der Axis Schicht von Web Objects. Aufruf des Web Services wie gewohnt über Methode invoke. Es handelt sich ja auch um normale Java Web Services. Es kann auch auf Kontext Informationen des http Requests zugegriffen werden. Dies geht über die Klassen MessageContext und WOContext. Code: import com.webobjects.appserver.WOContext; import org.apache.axis.MessageContext; ... MessageContext message_context = MessageContext.getCurrentContext(); WOContext context (WOContext)message_context.getProperty("com.webobjects.appserver.WOContext"); Ein Servlet zum Webservice könnte dann so aussehen: 3.3 Sicherheit Die Einbindung von Sicherheit funktioniert über security delegates Klassen die Methoden von dem WOSecurityDelegate Interface implementieren. Hier können spezielle Sicherheitsmechanismen processClientResponse, Beran, Köhler, Rondeau für die Methoden processServerRequest, processClientRequest, processServerResponse, Seite: 9 = KFK GC/GT onFaultClientRequest, Alternative Webservice Frameworks onFaultClientResponse, onFaultServerRequest, onFaultServerResponse implementiert werden. Beran, Köhler, Rondeau Seite: 10 KFK GC/GT Alternative Webservice Frameworks 4 Verzeichnisse 4.1 Abkürzungsverzeichnis Abk. Erläuterung EJB HTML J2EE J2SE JDBC JNDI JNLP JSP JTA JTS MYSQL ORB RMI-IIOP SMIL SOAP WSDL XML Enterprise JavaBeans HyperText Markup Language Java 2 Platform, Enterprise Edition Java 2 Platform, Standard Edition Java Database Connectivity Java Naming and Directory Interface Java Network Launching Protocol Java ServerPages Java Transaction API Java Transaction Service My Structured Query Language Object Request Broker Remote Method Invocation - Internet Inter-Orb Protocol Synchronized Multimedia Integration Language Simple Object Access Protocol Web Services Description Language Extensible Markup Language 4.2 Quellenverzeichnis [WebObjectsHome], http://www.apple.com/webobjects/ [WebObjectsDocu], http://developer.apple.com/documentation/WebObjects/WebObjects.html [ServiceProviderExample], http://developer.apple.com/documentation/WebObjects/Web_Services/index.ht ml [ServiceConsumerExample], http://developer.apple.com/documentation/WebObjects/Web_Services/index.ht ml Beran, Köhler, Rondeau Seite: 11