Enterprise Application Integration mit J2EE

Document Sample
Enterprise Application Integration mit J2EE Powered By Docstoc
					                                                                                        13                            Focus


Harald Müller, iRIX Software Engineering AG

Enterprise Application
Integration mit J2EE

Einleitung                                  einen Transaktionsmanager. Die Steue-      spezielle Form von EIS sind, erfolgt in
                                            rung erfolgt nach dem XA-Protokoll der     den meisten J2EE-Applikationsservern
    Bei vielen durchgeführten und zu-       Open Group [XA], für welches in Java       die Anbindung unter Verwendung der
künftigen IT-Projekten geht es nicht        die Schnittstellen im Package javax.       JCA.
mehr darum, komplett neue Systeme           transaction.xa definiert sind. Das
zu erstellen, sondern unter Einbindung      Protokoll der Commit-Steuerung wird
bestehender Systeme neue Dienste            als 2-Phase-Commit (2PC) bezeichnet.       Web Services
anbieten zu können. Diese Einbindung        Die JDBC-Treiber der beteiligten Da-
wird als Enterprise Application Integra-    tenbanken müssen das XA-Protokoll
tion (EAI) bezeichnet. Die beiden           implementieren. Im Falle von Oracle ist         Der verstärkten Bedeutung von
aktuell wichtigsten Systemplattformen,      als DataSource-Implementierung die         Web Services wird J2EE mit der Unter-
J2EE [J2EE] und .NET [.NET], unter-         Klasse oracle.jdbc.xa.client.              stützung dieser in der EJB 2.1 Spezifi-
stützen die Integration bestehender         OracleXADataSource zu verwenden.           kation [EJB] gerecht. Web Services
Applikationen auf mehrere Arten. Der        An dieser Stelle sei noch kurz erwähnt,    sind Dienste, die mittels entferntem
Artikel stellt die Möglichkeiten von        dass der Oracle 8.1.7-JDBC-Treiber         Methodenaufruf, analog zu RPC (Re-
J2EE kurz vor und geht anschliessend        noch fehlerhaft in der Implementierung     mote Procedure Call), CORBA oder
näher auf Integration mittels Message       des XA-Protokolls ist, was zur Blockie-    COM, benutzt werden können. Das
Oriented Middleware (MOM) ein.              rung ganzer Tabellen (auch für nur         Protokoll ist kein binäres Format, son-
                                            lesende Zugriffe) führen kann. Mit dem     dern das XML-basierte Simple Object
                                            Oracle-9.2-JDBC-Treiber ist dieser         Access Protocol (SOAP)[SOAP]. Die
Zugriff auf mehrere                         Fehler behoben.                            Schnittstellen werden mittels Web
                                                                                       Service Definition Language (WSDL)
Datenbanken                                                                            [WSDL] beschrieben, was der IDL für
                                            Zugriff auf andere                         CORBA entspricht. Aus der Schnitt-
    Der Zugriff auf eine relationale Da-                                               stellenbeschreibung lässt sich Zugriffs-
tenbank aus einer J2EE Applikation er-
                                            externe Systeme                            code für die gewünschte Zielsprache,
folgt mittels JDBC-Schnittstellen [JDBC].                                              z.B. Java generieren. Etwas problema-
Für jede Datenbank bieten die Daten-            Um neben Datenbanken auf andere        tisch ist die Verwendung von komple-
bankhersteller, bzw. Fremdhersteller        externe Systeme wie z.B. SAP R/3           xen Datentypen, da die Umwandlung
die Implementierung der JDBC-Schnitt-       zugreifen zu können, wurde die J2EE        der Datentypen nach XML bzw. deren
stelle in Form eines JDBC-Treibers an.      Connector Architecture (JCA) [JCA]         Rückwandlung beiden Kommunika-
Aus einem J2EE-Applikationsserver           definiert. Im J2EE Sprachgebrauch          tionspartnern bekannt und implemen-
erhält man über eine DataSource eine        werden die externen Systeme auch           tiert sein muss. Ein Verzeichnisdienst,
Verbindung zur Datenbank, worauf            Enterprise Information Systems (EIS)       Universal Description, Discovery and
man die notwendigen SQL-Befehle ab-         genannt. Ohne JCA müsste zur Einbin-       Integration (UDDI)[UDDI] genannt, ver-
setzen kann. Die Zugriffe könnnen der       dung eines jeden EIS für jeden Appli-      öffentlicht die Dienste. Neben J2EE/
Transaktionskontrolle unterliegen.          kationsserver eine eigene Anbindung        .NET Bridges wie [JANEVA] oder
                                            implementiert werden. Mit JCA redu-        [JNBRIDGE] sind Web Services die
    Der Zugriff auf mehrere Datenban-       ziert sich dies auf eine Schnittstelle-    Interoperabilitätstechnologie zwischen
ken erfolgt in gleicher Weise, mit dem      nimplementierung pro EIS, die in jedem     J2EE und .NET.
Unterschied, dass für jede Datenbank        J2EE-Applikationsserver installiert wer-
eine andere DataSource verwendet            den kann. Die Schnittstellenimplemen-
wird. Die Änderungen an mehreren            tierung wird Resource Adapter genannt.     Asynchrone
Datenbanken können ebenfalls unter          Der Zugriff auf ein EIS erfolgt, wie bei
Transaktionskontrolle ablaufen. Dazu        Datenbanken auch unter Transaktions-
                                                                                       Anbindung
ist es notwendig, einen zentralen           kontrolle, falls das EIS bzw. der Re-
Transaktionsmanager zu haben, der           source Adapter dies unterstützt. Für          Bei den bisher vorgestellten Inte-
die Transaktionssteuerung der beteilig-     die Einbeziehung mehrerer EIS in einer     grationen erfolgt die Anbindung syn-
ten Datenbanken, auch Resource-             Transaktion ist hier ebenfalls das XA-     chron, d.h. es ist notwendig, dass die
Manager genannt, koordiniert. Jeder         Protokoll vom Resource Adapter zu          anzubindenden System verfügbar sind
J2EE-Applikationsserver verfügt über        unterstützen. Da Datenbanken eine          und entsprechende Zugriffsrechte be-

                                                                                                SOUG Newsletter 3/2004
Focus                               14




 stehen. Die Fehlerbehandlung ist recht     beliebig viele Interessenten einer Nach-   gewährleistet ist, da der Container frei
 einfach, da der Verwender von EIS-         richt (Publish/Subscribe) dient. Von       ist beliebig viele Instanzen einer MDB
 Funktionalität beim Aufruf Fehlersitua-    einer Queue kann eine Nachricht nur        zu erzeugen, um die Abarbeitung zu
 tionen mitgeteilt bekommt.                 einmal abgeholt werden, von einem          parallelisieren. Wenn erforderlich, kann
                                            Topic kann eine Nachricht an beliebig      dies eventuell Applikationsserver-
     Für viele Integrationen sind diese     viele Interessenten zugestellt werden.     spezifisch gelöst werden. Z.B. kann im
 Anforderungen zu restriktiv. Beispiels-    Eine Nachricht in JMS besteht aus          JBoss-Applikationsserver [JBOSS] die
 weise soll die Anwendung, die ein EIS      einem Kopf mit verschiedenen Attribu-      Anzahl der Instanzen für einen MDB-
 integriert, auch lauffähig sein, wenn      ten und einem Inhalt, der von unter-       Typ auf 1 beschränkt werden. Auch
 das EIS gerade nicht verfügbar ist. Die    schiedlichem Typ sein kann. Zur Verfü-     die Reihenfolge beim Schreiben auf die
 Daten können zu einem späteren Zeit-       gung stehen Nachrichten mit                Queue ist nur innerhalb der Session
 punkt an das EIS übertragen werden.        ■ uninterpretierten Byte-Strömen,          definiert, so dass beim Schreiben mit
 Ein anderer Fall liegt vor, wenn die An-   ■ Streams aus Java-Primitivtypen,          mehreren Sessions die globale Reihen-
 bindung zwischen Systemen aufgrund         ■ serialisierbaren Java-Objekten,          folge nicht definiert ist. Hier kann man
 organisatorischer Grenzen nicht so         ■ Texten in Form von Java-Strings und      sich dadurch behelfen, dass man
 stark wie im synchronen Fall gekoppelt     ■ Hashtables aus Schlüssel/                immer die gleiche Session benutzt. Die
 sein kann. In solchen Fällen empfiehlt        Werte-Paaren.                           Session kann über ein Singleton oder
 sich der Einsatz von Message Oriented                                                 in JBoss über einen JMX-Service zur
 Middleware (MOM). Die Anbindung                Besonders interessant für EAI sind     Verfügung gestellt werden.
 erfolgt durch den asynchronen Aus-         Text-Nachrichten, da hier XML ver-
 tausch von Nachrichten. Dies ergibt        schickt werden kann. Das Zustellen
 eine lose Kopplung zwischen den Sys-       der Nachricht übernimmt das Message        Ausgestaltung im
 temen, macht aber die Fehlerbehand-        System, das auch gewisse Garantien
 lung schwieriger, da der Verwender         für die Zustellung übernimmt. An
                                                                                       konkreten Projekt
 nun nicht sofort über Erfolg oder Miss-    dieser Stelle kann nicht jede Einzelheit
 erfolg eines Aufrufs informiert wird.      von JMS beschrieben werden, sondern           Nach so viel Einführung wird die
                                            es wird auf die Spezifikation in [JMS]     Ausgestaltung der Systemintegration
     In J2EE definiert die Java Message     verwiesen. Es soll nur noch skizziert      an einem konkreten Projekt aufgezeigt.
 Service (JMS) Spezifikation [JMS] die      werden, wie Nachrichten auf eine           Es wurden zwei Systeme mit Hilfe
 Schnittstellen zum Anschluss an ein        Queue gestellt werden können und           von JMS miteinander lose gekoppelt.
 Message System. Alle relevanten MOM-       abzuholen sind. Das folgende Code-         System 1 schickt eine Nachricht an
 Produkte bieten eine Implementierung       Fragment zeigt das Schreiben einer         System 2, welches die Daten der
 zur Integration mit JMS an. Mit der        Nachricht auf eine Queue.                  Nachricht verarbeitet und eine Bestäti-
 EJB 2.0 Spezifikation [EJB] und der
 damit einhergehenden Einführung von        Listing 1:
 Message-Driven Beans (MDB) wurde
 die Bereitstellung eines Message           QueueConnection con;
 Systems im J2EE-Applikationsserver         con = getQueueConnectionFactory().createQueueConnection();
                                            Queue queue = getQueue();
 obligatorisch.                             session = con.createQueueSession(true, 0);
                                            QueueSender sender = session.createSender(queue);
                                            ObjectMessage msg = session.createObjectMessage();
   Im Folgenden wird der Einsatz von        msg.setObject(anObject);
 JMS für EAI näher beschrieben.             sender.send(msg);




 Verwendung von JMS                             Die QueueConnectionFactory
                                            ebenso wie die Queue erhält man in
                                            der Regel durch Aufsuchen im JNDI
     Grundlage von MOM ist der Aus-         Namensdienst [JNDI], in dem die
 tausch von Nachrichten. Die Nachrich-      ConnectionFactory bzw. Queue regi-
 ten, die an einen Empfänger verschickt     striert sind. Das Abholen einer Nach-
 werden sollen, werden diesem nicht         richt geschieht, indem man einen
 direkt zugestellt, sondern in eine Art     MessageListener (eine Klasse, die das
 Briefkasten eingefügt, wo sich der         Interface javax.jms.MessageListener
 Empfänger diese abholen kann. Die          implementiert) registriert oder – bei
 Briefkästen werden Queue oder Topic        Verwendung von EJBs – mit Message-
 genannt, wobei eine Queue für den          Driven Beans arbeitet, die als Message-
 Austausch zwischen zwei Kommunika-         Listener fungieren. Zu beachten ist,
 tionspartner benutzt wird (Point-To-       dass die Reihenfolge der Abarbeitung
 Point), ein Topic für die Verteilung an    der Nachrichten mittels MDBs nicht

SOUG Newsletter 3/2004
                                                                                       15                             Focus




gungsnachricht zurückschickt. Die
Rückmeldung führt zu einer Status-
aktualisierung in einer Datenbanktabelle,
in die zuvor, mit dem Verschicken
der Nachricht an System 2, ein Initial-
eintrag erfolgte. Die positive Rückmel-
dung hängt mit der erfolgreichen
Abarbeitung von Geschäftsregeln zu-
sammen und findet somit auf einer
höheren Ebene statt, als die Quittie-
rung der Nachrichtenauslieferung, wel-
ches das Message System bietet. Es
genügte in diesem Fall nicht, sich auf
die korrekte Zustellung der Nachricht
des MOM zu verlassen, da es notwen-
dig war, eine Verarbeitungsquittung
von System 2 zu erhalten. Das folgende
Bild zeigt die grobe Architektur.




    Process 1 ist eine Methode einer        MDB benötigt nur eine Bean Klasse,
EJB Session Bean, die in einer Trans-       die javax.ejb.MessageDrivenBean
aktion die Nachricht auf die Queue 1        und javax.jms.MessageListener
stellt und den Statuseintrag in eine        implementiert. Die Logik zum Verarbei-
Datenbanktabelle durchführt. Da hier-       ten der Nachricht wird in der Methode
bei zwei Resource Manager, nämlich          onMessage() implementiert. Der De-
die Datenbank und das Message Sys-          ployment-Deskriptor sieht wie folgt
tem beteiligt sind, muss für die Trans-     aus:
aktionssteuerung das XA-Protokoll
benutzt werden. Die Queue 1 liegt auf
                                            <message-driven>
System 1, damit bei Ausfall von Sys-          <description>Process confirmation messages from System2</description>
tem 2, die Verarbeitung fortgeführt           <display-name>System2StatusMDB</display-name>
                                              <ejb-name>System2StatusMDB</ejb-name>
werden kann. Wenn System 2 wieder             <ejb-class>ch.irix.System2StatusMDB</ejb-class>
verfügbar ist, werden die Nachrichten         <transaction-type>Container</transaction-type>
                                              <message-driven-destination>
von Process 2 abgeholt und verarbei-
                                                <destination-type>javax.jms.Queue</destination-type>
tet. Das Message System sorgt durch           </message-driven-destination>
persistente Zwischenspeicherung             </message-driven>

dafür, dass keine Nachricht verloren
geht. Ebenso liegt Queue 2 auf System
2, damit die Rückmeldung auch bei
Nichtverfügbarkeit von System 1 ge-
schrieben werden kann. Das Abholen
der Rückmeldung erfolgt über eine
Message-Driven Bean (MDB). Eine

                                                                                               SOUG Newsletter 3/2004
Focus                                16




     Im Applikationsserver-spezifischen      übergreifendes Datenmodell definiert.     ter oder Web Services zur Verfügung.
 Deployment-Deskriptor wird die Zuord-       Die Daten werden mittels MOM an die       Voraussetzung für das Funktionieren
 nung der MDB zu Queue 2 beschrie-           zuständigen Systeme übertragen, so        der Integration ist die Verfügbarkeit
 ben. Das Abholen der Nachricht und          dass die Systeme lose gekoppelt sind.     aller beteiligten Systeme. Um eine lose
 Aktualisierung des Statuseintrags er-       Als Übertragungsformat eignet sich        Kopplung zu erreichen, bei der diese
 folgt ebenfalls in einer Transaktion mit    XML. Die Systeme werden über Adap-        Restriktion wegfällt, kann in J2EE der
 einem 2PC gemäss dem XA-Protokoll.          ter an den Bus angeschlossen, die die     asynchrone, nachrichtenbasierte
 Geht zum Beispiel der Update auf            Daten aus dem Systemformat in das         Ansatz mittels JMS genutzt werden.
 der Datenbank schief, verbleibt auch        übergreifende Datenformat umwandeln       An einem konkreten Projekt wurde die
 die Nachricht auf Queue 2 und wird          und umgekehrt. Damit reduziert sich       Integration von zwei Systemen mit
 wiederholt von einer MDB-Instanz            der Schnittstellenaufwand von n2 auf n.   JMS gezeigt. Durch die Asynchronität
 verarbeitet. Damit dies in einer Fehler-    Es sind zwei Architekturen möglich,       bedarf es Vorkehrungen, um Fehler-
 situation nicht beliebig oft durchgeführt   eine zentrale oder eine dezentrale. Bei   situationen erkennen und beheben zu
 wird, wird nach einer konfigurierbaren      einer zentralen Architektur übernimmt     können. Bei der Integration mehrerer
 Anzahl von Versuchen der Vorgang            eine Komponente, die in einem J2EE-       Systeme ist die Bus-Architektur mit
 abgebrochen und die Nachricht auf           Applikationsserver läuft, das Verteilen   einer MOM der Weg, um die Menge
 eine so genannte Dead Letter Queue          der Nachrichten an ihren Bestimmungs-     der Schnittstellen in den Griff zu be-
 gestellt. Um solche Situationen erken-      ort. Bei einer dezentralen Architektur    kommen und damit eine wartbare
 nen und bereinigen zu können, benötigt      befindet sich die Routing-Information     Anwendungsintegration zu haben.
 man einen Überwachungsmecha-                in der Nachricht selbst und die Nach-
 nismus mit entsprechender Benach-           richt sucht sich aufgrund der System-
 richtigung der Verantwortlichen. Denk-      konfiguration den Bestimmungsort          Contact
 bar ist die Auswertung des Server-          selbst. Für beide Architekturen sind
 Logfiles oder, wie im Projekt gesche-       Produkte auf dem Markt verfügbar.
 hen, das Schreiben eines Eintrags in                                                  iRIX Software Engineering AG
 eine andere Tabelle bei auftretenden
 Exceptions. Diese Einträge werden           Zusammenfassung                           Dr. Harald Müller
 mittels Oracle Enterprise Manager aus-                                                E-Mail: harald.mueller@irix.ch
 gewertet und die Benachrichtigung
 durchgeführt. Hier wurde der Mecha-             Zur Enterprise Application Integra-
 nismus benutzt, der bereits zum Über-       tion stehen unter J2EE die synchrone
 wachen von Batch-Jobs existierte.           Anbindung über JCA-Resource-Adap-
 Auf alle Fälle muss die Bereinigung
 solcher Situationen beim Applikations-
 design mit bedacht werden. In unse-         Literatur und Links
 rem Beispiel genügt die wiederholte
 Versendung der Nachricht an System           [EJB]:           http://java.sun.com/ejb
 2, nachdem die Ursache des Fehlers
                                              [J2EE]:          http://java.sun.com/j2ee
 behoben ist.
                                              [JANEVA]:        http://www.borland.com/janeva
                                              [JBOSS]:         http://www.jboss.org/
 Integration mehrerer                         [JCA]:           http://java.sun.com/j2ee/connector
 Systeme                                      [JDBC]:          http://java.sun.com/products/jdbc
                                              [JMS]:           http://java.sun.com/products/jms
     Im beschriebenen Beispiel wurden
                                              [JNBRIDGE]:      http://www.jnbridge.com/
 zwei Systeme miteinander integriert.
 Sollen mehrere Systeme miteinander           [JNDI]:          http://java.sun.com/products/jndi
 integriert werden, wird schnell klar,        [.NET]:          http://www.microsoft.com/net
 dass das Konzept der Punkt-Zu-Punkt
                                              [SOAP]:          http://www.w3.org/TR/soap
 Integration bei wachsender Anzahl
 Systeme an seine Grenzen stösst. Für         [UDDI]:          http://uddi.org/
 jedes neu zu integrierende System            [WSDL]:          http://www.w3.org/TR/wsdl
 müssen Schnittstellen zu den bisheri-
                                              [XA]:            Distributed Transaction Processing:
 gen Systemen des Verbundes erstellt
                                                               The XA Specification, ISBN: 1 872630 24 3,
 werden, d.h. es werden für n Systeme
                                                               X/Open Document Number: XO/CAE/91/300.
 n2 Schnittstellen benötigt. Hier ist
                                                               http://www.opengroup.org/products/
 es sinnvoller zu einer Bus-Architektur
                                                               publications/catalog/c193.htm
 überzugehen. Für den Bus wird ein

SOUG Newsletter 3/2004