Enterprise Application Integration mit XML Thomas Bayer bayer@oio.de Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim www.oio.de 1 Integrator bei der Arbeit 2
Moderne Integration 3 Gemeinsame DB? Fat Clients Application Server Datenbank 4
Integration über Daten? export XML XML import 5 Einführung Einführung Architekturen Integrationsserver mit XML 6
Was is EAI EAI involves sharing information between disparate applications that never were designed to work together Christopher Curry (http://www.diku.dk/teaching/2001e/e01.718/lectures/eaiandxml-1.pdf) 7 Anforderungen für globale Prozesse Kommunikation über Internet standardisiert spontan einfach sicher Web Interface 8
From Enterprise to Economy Integration Kunde Lieferant Hersteller 1.) 2.) 3.) 6.) 5.) 4.) System A System B System C System D 9 Architekturen Einführung Architekturen Integrationsserver mit XML 10
Point to Point I Host ERP B2B DMS CRM CMS Anzahl Schnittstellen = n * ( n - 1) = n² - n 11 Point to Point II Schnittstellen Systeme Kombinatorische Explosion Keine Wiederverwendung Know-How ist auf die einzelnen Schnittstellen verteilt 12
Hub and Spoke Host SAP B2B DMS CRM Middleware XX Konnektoren = Anzahl Systeme Anzahl Schnittstellen = 2n 13 Intregrationsplattform Internet Intranet Kunde Lieferant Integrationsplattform Host CRM DB ERP 14
Gemeinsames Datenmodell? System A System B System C 15 Portale CRM DMS ERP B2B 16
Daten Integration System A System B Daten B Daten Kopie Daten B Daten Daten B Replikation Master/Slave Datenabgleich Userdaten Redundanz Konflikte 17 Funktionale Integration System A Anfrage nach Daten Antwort System B Daten Bitte um Änderung Antwort Daten Daten B Just in Time! 18
Transaktionale Integration System A Anfrage nach Daten Antwort System B Daten Bitte um Änderung Antwort Daten Daten B Transaktions Koordinator 19 Einsatz von Middleware I System A System B? 20
Einsatz von Middleware II System A System B Middleware?? 21 EAI Tools EAI Spezialsoftware Integrationsserver Rein Propriertär Auf Standards basierend Middleware Tools auf Prozeßebene Eigenimplementierung mit XML/Java 22
Integrationsserver mit XML Einführung Architekturen Integrationsserver mit XML 23 Ziel Architektur Internet Intranet Kunde Lieferant Integrationsplattform Kommunikation Sicherheit Entwicklung Validierung Routing Transformation Prozesswissen Backendintegration Management Host CRM DB ERP 24
XML <Frage>Do you Speek XML?</Frage> SMTP HTTP XML SNMP Schlager HTML 25 Verständigung XML TCP/IP 26
Bedeutung Bedeutung XML HTTP Netz (TCP/IP) Abstraktion Bits & Bytes 27 Der XML Laden opentrans XForms Namespaces XLink XML 1.0 Schema DTD XSLT XQuery XPath SOAP XSL-FO BMECat XHTML ebxml 28
Kommunikation Internet Intranet Kunde Lieferant Integrationsplattform Kommunikation Sicherheit Entwicklung Validierung Routing Transformation Prozesswissen Backendintegration Management Host CRM DB ERP 29 Globaler Objekt Bus Objekt C++ Objekt Java Objekt Smalltalk Objekt XXX Objekt Objekt Zog aus Orfali, Harkey, Edwards: The essential distributed survival guide 30
CORBA über das Internet CORBA Client CORBA Server Lösung: HTTP Tunnel oder IIOP Proxys 31 Kommunikation über Tunnel HTTP Response HTTP Response SOAP Client HTTP Request HTTP Proxy HTTP Request Web Service 32
HTTP als Transport Protokoll Einfach Weit verbreitet Statuslos Wird über Firewalls hinweg transportiert (meistens!) Übertragung kann verschlüsselt werden (SSL) 33 Dump eines SOAP Requests 34
Interoperability Java Clients Apache SOAP SOAPDirect SOAP SOAP Server.NET Clients Apache SOAP.NET Clients MS SOAP Toolkit Visual Basic C# SOAP AXIS MS SOAP Tookit Cape Connect Andere SOAP for Python SOAP PerlEx 35 RPC und Dokument Stil Client Server bestelle( 10, SK-001-SW ) int bestelle( anzahl, artikel) Client Server XML Dokument (Bestellung) 36
Synchrone Kommunikation Client Server Request Response 37 Synchrone Kommunikation Client Server Nachricht 38
Einbindung von Clients Client WSDL Integrationsumgebung WSDL Code Generator WSDL Generator Service Proxy bestelle( 10, SK-001-SW ) Server Objekt int bestelle( anzahl, artikel) 39 Web Service Description Language WSDL Sprache um Dienste zu beschreiben Vergleichbar mit IDL Zugriff über email, Web site oder UDDI Wurde von IBM, MS,... entwickelt Beschreibt Dienste als eine Menge von Endpunkten, die Nachrichten arbeiten Die Nachrichten können entweder Dokument oder Aufruf orientiert sein 40
Registry Internet Intranet Kunde Lieferant bind find Integrationsplattform Kommunikation Sicherheit Validierung Routing Transformation Prozesswissen Backendintegration publish UDDI Service Registry Host CRM DB ERP 41 Sicherheit Internet Intranet Kunde Lieferant Integrationsplattform Kommunikation Sicherheit Entwicklung Validierung Routing Transformation Prozesswissen Backendintegration Management Host CRM DB ERP 42
Sicherheit Übertragung SSL ( keine Probleme bei bekannten Kommunikationspartnern) XML Encryption, XML Signature, XML Key Management XML Security Page http://www.nue.et-inf.uni-siegen.de/~geuer-pollmann/xml_security.html 43 Validierung Internet Intranet Kunde Lieferant Integrationsplattform Kommunikation Sicherheit Entwicklung Validierung Routing Transformation Prozesswissen Backendintegration Management Host CRM DB ERP 44
Validierung DTD Schema 45 Validierung <?xml version="1.0" encoding="iso-8859-1"?> <sap:purchaseorder.createfromdata xmlns:sap="urn:sap-com:document:sap:business" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="urn:sap-com:document:sap:business S:\Drafts\XML\eai-mit-xml\beispiele\sap-purchase-order\query.xml"> <PoHeader></PoHeader> <PoItems></PoItems> <PoItemSchedules></PoItemSchedules> </sap:purchaseorder.createfromdata> query.xml Schema mit 115 KByte! 46
XML Relational Mapping 1 1 1 n XML Parser 1 n 1 n 47 Validierung von BMECat Katalogen <ARTICLE_DETAILS> <DESCRIPTION_SHORT>A4 Standard Kopierfolien (1Pck=100Blt)</DESCRIPTION_SHORT> <DESCRIPTION_LONG>Supplies Team Kopierfolien,A4,(1Pck=100Blt),(Supplies Team-Hausmarke)</DESCRIPTION_LONG> <MANUFACTURER_AID>AA52834</MANUFACTURER_AID> <MANUFACTURER_NAME>Supplies Team</MANUFACTURER_NAME> <ERP_GROUP_BUYER/> <DELIVERY_TIME>2</DELIVERY_TIME> <KEYWORD>52834</KEYWORD> <KEYWORD>Kopierfolien</KEYWORD> <KEYWORD>Kopierfolien</KEYWORD> </ARTICLE_DETAILS> 48
Transformation Internet Intranet Kunde Lieferant Integrationsplattform Kommunikation Sicherheit Entwicklung Validierung Routing Transformation Prozesswissen Backendintegration Management Host CRM DB ERP 49 XSLT Prozessor html.xsl csv.xsl news.html txt.xsl docbook.xsl news.xml XSLT Prozessor news.txt (Xalan, Saxon,..) news.csv docbook.xml 50
XSLT Prozessor opentrans2po.xsl opentrans Bestellung XSLT Prozessor (Xalan, Saxon,..) PurchaseOrder.CreateFromData 51 <?xml version = "1.0" encoding = "UTF-8"?> <!DOCTYPE ORDER SYSTEM "opentrans_order_1_0.dtd"> <ORDER version = "1.0" type = "standard"> <ORDER_HEADER> <ORDER_INFO> <ORDER_ID>PO1001</ORDER_ID> <ORDER_DATE>2002-05-13</ORDER_DATE> <ORDER_PARTIES> <BUYER_PARTY> <PARTY><PARTY_ID type = "buyer_specific">2030</party_id></party> </BUYER_PARTY> <SUPPLIER_PARTY> <PARTY><PARTY_ID type = "buyer_specific">s517</party_id></party> </SUPPLIER_PARTY> </ORDER_PARTIES> </ORDER_INFO> </ORDER_HEADER> <ORDER_ITEM_LIST> <ORDER_ITEM> <LINE_ITEM_ID>1</LINE_ITEM_ID> <ARTICLE_ID><SUPPLIER_AID>SK-500-SW</SUPPLIER_AID></ARTICLE_ID> <QUANTITY>10</QUANTITY> <ORDER_UNIT>C62</ORDER_UNIT> <ARTICLE_PRICE type = "net_list"> <PRICE_AMOUNT>5.80</PRICE_AMOUNT> <PRICE_LINE_AMOUNT>58.00</PRICE_LINE_AMOUNT> </ARTICLE_PRICE> </ORDER_ITEM> </ORDER_ITEM_LIST> <ORDER_SUMMARY> <TOTAL_ITEM_NUM>2</TOTAL_ITEM_NUM> <TOTAL_AMOUNT>378.00</TOTAL_AMOUNT> </ORDER_SUMMARY> </ORDER> 52
<?xml version="1.0" encoding="utf-16"?> <sap:purchaseorder.createfromdata xsi:schemalocation="urn:sap-com:document:sap:business S:\Drafts\XML\eai-mit-xml\beispiele\sap-purc xmlns:sap="urn:sap-com:document:sap:business" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"> <PoHeader> <DOC_DATE>2002-05-13</DOC_DATE> <PURCH_ORG>2030</PURCH_ORG> <VENDOR>S517</VENDOR> <PO_NUMBER>PO1001</PO_NUMBER> </PoHeader> <PoItems> <item> <PO_ITEM>1</PO_ITEM> <MATERIAL>SK-500-SW</MATERIAL> <UNIT>C62</UNIT> <NET_PRICE>5.80</NET_PRICE> </item> <item> <PO_ITEM>2</PO_ITEM> <MATERIAL>SK-601-RO</MATERIAL> <UNIT>C62</UNIT> <NET_PRICE>320.00</NET_PRICE> </item> </PoItems> <PoItemSchedules> <item> <PO_ITEM>1</PO_ITEM> <QUANTITY>10</QUANTITY> </item> <item> <PO_ITEM>2</PO_ITEM> <QUANTITY>1</QUANTITY> </item> </PoItemSchedules> 53 </sap:purchaseorder.createfromdata> Mapping <ORDER_ITEM> <LINE_ITEM_ID>1</LINE_ITEM_ID> <ARTICLE_ID><SUPPLIER_AID>SK-500-SW</SUPPLIER_AID></ARTICLE_ID> <QUANTITY>10</QUANTITY> <ORDER_UNIT>C62</ORDER_UNIT> <ARTICLE_PRICE type = "net_list"> <PRICE_AMOUNT>5.80</PRICE_AMOUNT> <PRICE_LINE_AMOUNT>58.00</PRICE_LINE_AMOUNT> </ARTICLE_PRICE> </ORDER_ITEM> <PoItems> <item> <PO_ITEM>1</PO_ITEM> <MATERIAL>SK-500-SW</MATERIAL> <UNIT>C62</UNIT> <NET_PRICE>5.80</NET_PRICE> </item> </PoItems> <PoItemSchedules> <item> <PO_ITEM>1</PO_ITEM> <QUANTITY>10</QUANTITY> </item> </PoItemSchedules> 54
Regelbasierte Konvertierung <xsl:template match="order_item_list"> <PoItems> <xsl:apply-templates mode="item"/> </PoItems> <PoItemSchedules> <xsl:apply-templates mode="shedules"/> </PoItemSchedules> </xsl:template> opentrans SAP <xsl:template match="order_item" mode="item"> <item> <PO_ITEM><xsl:value-of select="line_item_id"/></po_item> <MATERIAL><xsl:value-of select="article_id/supplier_aid"/></material> <UNIT><xsl:value-of select="order_unit"/></unit> <xsl:apply-templates/> </item> </xsl:template> <xsl:template match="order_item" mode="shedules"> <item> <PO_ITEM><xsl:value-of select="line_item_id"/></po_item> <QUANTITY><xsl:value-of select="quantity"/></quantity> </item> </xsl:template> <xsl:template match="article_price[@type='net_list']"> <NET_PRICE><xsl:value-of select="price_amount"/></net_price> </xsl:template> 55 Konvertierung aufwendig X XML XML Einfach X 56
Konvertierung nach XML stylesheet Quelle non XML Konverter -> XML (DOM/SAX) generisches XML XSLT Prozessor Zielformat XML 57 Comma Separated Values CSV CSV Export Nr;Bezeichnung;Menge;Preis 1;Dauerlutscher;10;1,99 2;Kaffee;2;3,8 3;Kuli;100;0,8 58
Konverter (XMLSpy) 59 Ergebnis <Import> <Row> <Nr>1</Nr> <Bezeichnung>Dauerlutscher</Bezeichnung> <Menge>10</Menge> <Preis>1,99</Preis> </Row> <Row> <Nr>2</Nr> <Bezeichnung>Kaffee</Bezeichnung> <Menge>2</Menge> <Preis>3,8</Preis> </Row> <Row> <Nr>3</Nr> <Bezeichnung>Kuli</Bezeichnung> <Menge>100</Menge> <Preis>0,8</Preis> </Row> </Import> 60
61 Routing Internet Intranet Kunde Lieferant Integrationsplattform Kommunikation Sicherheit Entwicklung Validierung Routing Transformation Prozesswissen Backendintegration Management Host CRM DB ERP 62
Message Router Kunde X RPC Konverter ERP Kunde Y Router CRM Lieferant X System X Lieferant Y 63 Native XML Datenbanken Unterscheidung: native DB XML enabled DB Speziell zum Speichern von XML Dokumenten entworfen (besonders für document-centric XML Dokumente) Unterstützung von: Transaktionen Sicherheit Mehrbenutzerzugriffe APIs für den Zugriff aus einer Programmiersprache Abfragesprachen 64
Aufbau einer nativen XML Datenbank Datenbank Collection Dokument XEinf XML Seminare Java XDB Corba Native XML DB / DB 2 Col01 Col02 Dok01 Dok02... DB 3........ 65 XPath Spezifiziert Adressierung eines XML-Dokumentes Enthält 13 Achsenbezeichner (AxisName) es existieren Kurz- und Langformen zur Adressierung W3C Recommendation seit 16. November 1999 Gemeinsame Syntax für Funktionalitäten, die sich XSLT und Xpointer( www.w3c.org/tr/xptr ) teilen 66
XQuery Language Kleine einfache Abfrage Sprache Abgeleitet von vorherigen Vorschlägen, wie XML-QL,YATL, Lorel und Quilt, aber noch keine recommendation Navigationssyntax wurde von XPath übernommen Kein XML - die XML Version heisst XQueryX Teile der SQL-Syntax (SELECT, FROM, WHERE) und von OQL wurden übernommen 67 Beispiel für eine XQuery Abfrage Alle Bücher, die 1994 erschienen sind document("bib.xml")/bib/book[@year="1994"] Alle Bücher, deren Preis von "www.bn.com" stammt FOR $b IN document("prices.xml")//book WHERE $b/source = "www.bn.com" RETURN $b/title 68
FLWR expressions FOR-LET-WHERE-RESULT Verallgemeinerung der SELECT-FROM-WHERE Anweisung aus SQL Beispiel: FOR $p IN document( bib.xml )//publisher LET $b := document( bib.xml )//book[publisher = $p] WHERE count($b) > 100 RETURN $p 69 Was ist XUpdate? Sprache zum aktualisieren von XML Dokumenten Benutzung unabhängig von Implementation macht intensiven Gebrauch von XPath Ausdrücken rein deskriptive Sprache benutzter Namespace hat URI http://www.xmldb.org/xupdate 70
xupdate:append xupdate:append fügt mittels select Attribut angegebenes Element als child an den Kontext Knoten kann optional child Attribut enthalten, daß Position angibt, ansonsten als letztes child eingefügt kann alle Elemente enthalten... <xupdate:append select="/addresses child=last()"> <xupdate:element name="address"> <town>mannheim</town> </xupdate:element> </xupdate:append> 71 Routing mit XML Datenbank Kunde X / Validieren Routen Transformation a in Verarbeiten archiv Backend System X a fehler bestellung anfrage rechnung bestellung anfrage rechnung 72
Prozesswissen Internet Intranet Kunde Lieferant Integrationsplattform Kommunikation Sicherheit Entwicklung Validierung Routing Transformation Prozesswissen Backendintegration Management Host CRM DB ERP 73 74
Prozessbeschreibung in XML <?xml version="1.0"?> <processes> <process dest="de.oio.jax.process.demo.bestellungverarbeitenprocess"> <event src="de.oio.jax.process.demo.bestellungempfangenevent"/> <action src="de.oio.jax.process.demo.holelagerbestandaction"/> <action src="de.oio.jax.process.action.senddebugaction"> <param name="mail-addr" value="bayer@porty"/> </action> <action src="de.oio.jax.process.demo.sendebestandsmeldungaction"/> <action src="de.oio.jax.process.action.generateeventaction"> <param name="event-class" value="de.oio.jax.process.demo.bestellungverarbeite </action> </process> <process dest="de.oio.jax.process.demo.bestellungverbuchenprocess"> <event src="de.oio.jax.process.demo.bestellungverarbeitetevent"/> <action src="de.oio.jax.process.demo.verbuchebestellungimerpaction"/> </process> </processes> 75 Gesamte Anwendung Client processes2initializer.xsl ProcessInitializer processess.xml processes2java.xsl Process ProcessManager generierter Code BestellungVerarbeitenProcess Event Anwendungs Code Framework Code Action BestellungEmpfangenEvent BestellungVerarbeitetEvent SendDebugAction GenerateEvent HoleLagerbestandAction 76
Backendanbindung Internet Intranet Kunde Lieferant Integrationsplattform Kommunikation Sicherheit Entwicklung Validierung Routing Transformation Prozesswissen Backendintegration Management Host CRM DB ERP 77 XSP mit SAP Taglib... <page> <gosap:checklogon> <gosap:executebapi> <BAPIName>BAPI_SFLIGHT_GETLIST</BAPIName> <request><xsp:expr>request</xsp:expr></request> </gosap:executebapi> </gosap:checklogon> </page>... 78
XML Output der XSP <?xml version="1.0" encoding="utf-8"?> <page> <result> <tables> <table name="flightlist"> <row> <field desc="kurzbez. der Fluggesellschaft >LH</field> <field desc="code der Flugverbindung">2407</field> <field desc="flugdatum">2001-10-07</field>... </row>... </table> </tables> <export>... </export> </result> </page> 79 HTML und WML Output 80
Generischer BAPI Aufruf mit Cocoon 81 Generischer BAPI Aufruf mit Cocoon <?xml version="1.0" encoding="utf-8"?> <page xmlns:xsp="http://apache.org/xsp" xmlns:gosap="http://www.gosap.de/taglib" xmlns:log="http://apache.org/xsp/log"> <bapi name="bapi_sflight_getlist"> <tables name="bapi_sflight_getlist"> <table type="table" desc="liste von Flügen" name="flightlist" offset="0" length="10" optional="false"> <field type="char" desc="kurzbezeichnung der Fluggesellschaft" name="carrid" offset="0" length="3" optional="false"/> <field type="num" desc="code der Flugverbindung" name="connid" offset="3" length="4" optional="false">0000</field>... </table> </tables> <import> <param type="char" desc="nachmittags starten (Einschränkung)" name="afternoon" offset="0" length="1" optional="true"/> <param type="char" desc="fluggesellschaft (Einschränkung)" name="airlinecarrier" offset="1" length="3" optional="true"/>... </import> <export> <param type="structure" desc="fehlermeldungen" name="return" offset="0" length="6" optional="false"> <structure name="return"> <param type="char" desc="meldungstyp: S Success, E Error, W Warning, I Info, A Abort" name="type" offset="0" length="1" optional="false"/> <param type="char" desc="nachrichten, Nachrichtenklasse" name="id" offset="1" length="20" optional="false"/>... </structure> </param> </export> </bapi> </page> 82
Generischer BAPI Aufruf mit Cocoon 83 Generischer BAPI Aufruf mit Cocoon 84
85 86
87 Bausteine Parser XSLT Prozessoren XML Datenbanken SOAP Middleware Schema Editoren UML Tools mit XMI Export JAXB XPath Implementierungen 88
Quellen www.oio.de/public EAI Competence Center: www.eai-systeme.de XML Datenbanken xml.apache.org http://xml.apache.org/xindice/ http://exist.sourceforge.net/ http://www.x-hive.com/ http://www.eaiindustry.org/ http://www.eaijournal.com/ SAP Help Portal: http://help.sap.com SAP Interface Repository: http://ifr.sap.com SOAP http://www.w3.org/2002/ws/ XPath Spezifikation http://www.w3.org/tr/xpath XQuery http://www.w3.org/xml/query Cocoon BAPI Lib http://www.oio.de/sap-logicsheet.htm 89 CORBA Internet Intranet Kunde (C++) Lieferant (Java) Integrationsplattform Connector Connector Connector Connector Host CRM DB ERP 90