KONFERENZ Donnerstag, 11. November 2004 11h00, Variohalle 1 Lotus Notes Integration mit Oracle Applicationsserver Arne Brüning, Christian Kühne ORACLE Deutschland GmbH, Hamburg Schlüsselworte: Lotus Notes, Oracle Database, Oracle Application Server, OracleAS Portal, Oracle JDeveloper, Oracle Application Development Framework, JSR-227 Data Binding, JSR-168 Zusammenfassung Dieser Vortrag gibt die Erfahrungen aus einem Oracle presales Projekt wieder. Die Anbieter wurden aufgefordert, zu demonstrieren wie man eine Anwendung auf einem J2EE-konformen Application Server erstellt, die gleichzeitig auf eine Oracle und eine Lotus Notes Datenbank zugreift. Eine Integration der Lösung in ein Portal-Framework sollte möglich sein, hierbei war der Zugriff auf Lotus Mail und Kalender Funktionalität aus dem Portal notwendig. Da das Thema für das Projektteam neu war, Kenntnisse über Lotus Notes waren bislang nicht vorhanden, wurden viele neue Erfahrungen über die Möglichkeit der Anbindung von Lotus Notes an J2EE-konforme Anwendungen gemacht. Leider waren nicht alle Erfahrungen positv. Daher soll dieser Vortrag aufzeigen, welche Möglichkeiten der Anbindung existieren, aber auch, welche Wege in die Sackgasse führen. Gelöst wurde die Aufgabe letztendlich durch zwei parallele Ansätze: Einsatz der für Lotus Notes vorhandenen Standard-Portles sowie der Modifikation eines generischen Lotus Notes Portlets zusammen mit Oracle Portal Einsatz der Oracle-Implementierung des Java Specification Request JSR-227: A Standard Data Binding & Data Access Facility for J2EE im Oracle Application Development Framework (ADF) Einleitung Häufig besteht das Problem, bestehende Lotus Notes Anwendungen in eine moderne Web-, J2EE- und/oder Portalarchitektur zu überführen. Zur Integration von Lotus Notes gibt es verschiedene Ansätze wie z.b. der Einsatz von
17.Deutsche ORACLE-Anwenderkonferenz Standard-Portlets oder die Erstellung von neuen J2EE-Anwendungen mit dem JDeveloper und dem Oracle Application Development Framework (ADF) unter Verwendung des Lotus Notes Datacontrols. Die verschiedenen Ansätze werden hier vorgestellt, gegeneinander abgewogen und z.t. life gezeigt. Typisches Environment bei mehreren Kunden Gewachsene, meist inhomogene Infrastruktur Eindeutiges, klares Commitment zu J2EE als Zukunftsstandard Vorhandene Datenbestände in Domino, die auf Grund ihrer Integration in Betriebsabläufe nicht kurzfristig migrierbar sind In der Praxis bedeutet dies, daß in den J2EE-konformen Applikationen lesend und schreibend auf in Lotus vorhandene Datenbestände zugegriffen werden muß. Dieser Vortrag gibt die Erfahrungen aus einer Analyse der technischen Möglichkeiten zur Integration wieder. Application Server Datenbank -Standardansatz: frameworkunterstützte Entwicklung gegen Oracle DB Daten aber physisch in externer DB Connectivity via Database Link (hier: DBLink zwischen Oracle und Lotus) Vorteil dieser Lösung ist die Transparenz der Lotus DB, d.h. die Applikation sieht nur die Master-DB (Oracle), obwohl die Daten physisch in Lotus abgelegt werden. Die Funktionalität dieses Ansatzes wird entscheidend von der Qualität des ODBC-Treibers bestimmt. Für nahezu alle relationalen Datenbanken liegen entsprechende Treiber vor; der aktuelle für Lotus vorhandene ODBC-Treiber hat jedoch entscheidene funktionale Einschränkungen, die einer produktiven Nutzung entgegenstehen. J2EE -Standardansatz: JDBC-Treiber Dieser Ansatz ermöglicht die Entwicklung nach dem RAD-Prinzip, da alle modernen J2EE-Entwicklungsumgebungen ein auf JDBC-besierendes Framework zur Verfügung stellen. Die Funktionalität dieses Ansatzes wird entscheidend von der Qualität des JDBC-Treibers bestimmt. Für nahezu alle relationalen Datenbanken liegen entsprechende Treiber vor; der aktuelle für Lotus vorhandene JDBC-Treiber hat jedoch entscheidene funktionale Einschränkungen, die einer produktiven Nutzung entgegenstehen. Dieser Ansatz doppelt die in Lotus gespeicherten Daten in eine Oracle-DB, damit die Applikation ausschließlich gegen die Oracle-DB arbeiten kann.
KONFERENZ Vorteil dieser Lösung ist die Transparenz der Lotus DB, d.h. die Applikation sieht nur die Oracle-DB, obwohl die Master-Daten physisch in Lotus abgelegt werden. Dieser Ansatz wurde bereits von einem Partner erfolgreich in Projekten realisiert. Probleme können auftreten, wenn auf beiden Datenbeständen unabhängig voneinader Änderungen vorgenommen werden können. Darüberhinaus muß die Aufdatierung der Slave-Daten administriert werden. Eine Variante besteht darin, die Daten online in Lotus zurückzuschreiben, da der untersuchte ODBC-Treiber in dieser Richtung für alle untersuchten funktionalen Testfälle arbeitete. Daraus sind keine Ausagen über einen produktiven Einsatz ableitbar. Lotus-nativer -Ansatz Alternativ zu den vorgestellten Treibern steht ein natives Interface in Form einer Java-Bibliothek zur Verfügung (NCSO Notes Client Side Objects). Diese Klassen können in beliebige Java-Applikationen eingebunden werden. Sie ermöglichen den Zugriff auf Lotus via DIIOP (Domino Internet Inter Object Request Broker Protocol) über HTTP. Für die weitverbreiteten Lotus-Anwendungen (email, Kalender, ToDo, Kontakte) stehen fertige Portlets als download auf portalstudio.oracle.com (Teil des Oracle Technology Networks) zur Verfügung. Sie ermöglichen im Umfeld eines Portals den direkten Zugriff auf die entsprechenden Datenbestände in Lotus. Für diese Applikationen ist dies die einfachste Möglichkeit der Integration. Abb. 6: fertige Lotus-Portlets
17.Deutsche ORACLE-Anwenderkonferenz Oracle Portal Integration Solutions stellt einen Provider mit vier Portlets zur Integration der Mail-, Kalender-, Kontakt- und ToDo-Informationen aus dem persönlichen Domino-Postfach des Anwenders. Der Provider nutzt als Protokoll zur Kommunikation mit Lotus eine Dominospezifische iiop-erweiterung (diiop Domino iiop) und http; deshalb müssen die entsprechenden Prozesse auf dem DominoServer laufen (diiop und http). Die mit dem Lotus-Provider ausgelieferten Portlets (email, Kalender, To-Do, Kontakte) greifen auf die User-spezifische Mail-Datenbank mail/<user>.nsf zu. Dabei kümmert sich der Provider in erster Linie um die Kommunikation mit dem Portal (runtime), dem Portlet-Repository, dem SSO-Server und dem Domino-Server. Die Portlets definieren, welche Daten von Domino zu holen sind und wie diese dargestellt werden sollen (rendering). Alle Verwaltungsaufgaben werden vom Provider übernommen, der fertig vorliegt. Der Zugriff auf die Domino-Mail-Datenbank erfolgt mit den IBM-Java-API NotesClientSideObjects (ncso.jar). Application Server Die Authentifizierung erfolgt im Single-Sign-On-Server der OracleAS-Infrastructure. Die dort hinterlegten Zugriffsparameter werden im OracleInternet- Directory gespeichert und ermöglichen dem Anwender die automatische Anmeldung (SSO). Abb. 7: Lotus Provider technische Anbindung Technisch gesehen ist dieses Portlet mit den Lotus-Mail-Portlets verwand; beide nutzen die IBM-Javaklassen zum Zugriff auf die Daten (ncso.jar).
KONFERENZ Es ermöglicht den lesenden Zugiff auf jede beliebige Lotus-View (jede Lotus- Tabelle hat mindestens eine View); dabei können die Zugriffsparameter (Host, Server, Lotus-DB, View) im Customize-Dialog (Edit-Mode) des Portlets eingegeben werden. Darüber hinaus kann der Administrator die zu lesenden/anzuzeigenden Spalten festlegen. [Die Nutzung des Single-Sign-On Servers ist noch nicht realisiert; daher sind b.a.w. auch Nutzername und Password im Customize-Dialog (Edit-Mode) des Portlets einzugegeben] Der Code dieses Portlets steht im Knowledge-Exchange des Portalstudio zur Verfügung. Abb. 8: generic Lortus Provider Die Nutzung des NCSO-APIs ohne entsprechendes Framework ist ähnlich mühsam und aufwändig wie die Nutzung des JDBC-APIs. Der Anwendungsentwickler ist vollständig verantwortlich die Erzeugung und Verwaltung der Verbindung zu Lotus und der Iteration über die entsprechenden Abfragergebnisse.
17.Deutsche ORACLE-Anwenderkonferenz Application Server Abb. 9: NCSO in Servlets, JSPs Abb. 10: NCSO-Aufrufe im Code Der Oracle JDeveloper ermöglicht mit seiner intergrierten Entwicklungsumgebung die besonders einfache Entwicklung von Java-Anwendungen und -Komponenten. Die offene Architektur ermöglicht, weitere Tools wie z.b. Wizards einzubinden (Open add-in API). Hierzu wird der aktuell in Entstehung befindliche Standard JSR-198 unterstützt. Das PDK stellt ein Portal Add-In zur Verfügung, mit dem Portlets im JDeveloper entwicklet werden können.
KONFERENZ Framework -Ansatz Kapselung der Lotus-Zugriffe im Framework Deklarativer Ansatz Volle Ausnutzung der IDE und des Frameworks Um in das Oracle Application Development Framework bislang nicht bekannte Datenquellen einzubinden, muß ein sog. DataControl erstellt werden. Sobald dieses eingebunden wird, stehen alle weiteren Möglichkeiten des Frameworks und der Entwicklungsumgebung auch für diese Datenquelle zur Verfügung. Das Model-View-Controller Pattern ist in der modernen Softwareentwicklung stark verbreite (s. z.b. Gamma: Entwurfsmuster). Abb. 13: Model-View-Controller Architektur Im Oracle Application Development Framework wird das Modell geteilt in das Modell-API und die Implementierung der sog. Business Services welche die eigentlichen Datenquellen repräsentieren. Der kommende Java Standard JSR-227 beschreibt, wie eine Datenquelle an das Modell-API angebunden wird. Auf dieser Basis wurde das Lotus Notes Data- Control für das Framework entwickelt und eingebunden. Sobald das Lotus Notes Data Control in das Application Development Framework eingebunden ist, stehen alle anderen Funktionalitäten der IDE und des Frameworks zur Verfügung, wie z.b. die Data Binding Palette oder die Möglichkeit via Drag and Drop Datenquellen direkt in Oberflächen wie z.b. JSP s einzubinden.
17.Deutsche ORACLE-Anwenderkonferenz Application Server Abb. 16: Visual and Declarative Development Ausblick eine Möglichkeit, wie es weiter gehen kann Bei der bisher vorgestellten Lösung ist es bei gleichzeitigen Zugriffen auf Lotus und Oracle notwendig, daß die Anwendung verteilte Transaktionen koordinieren muß. Eine Lösungsmöglichkeit besteht darin, einen weiteren Layer einzuziehen, der die Transaktionkontrolle übernimmt. Eine weitere sinnvolle Erweiterung wäre, einen Lotus Notes Wizard in den JDeveloper zu integrieren. Dieser kann leicht über das javatools-api (JSR 168, www.javatools.org) eingebunden werden.
Abb. 18: Fazit KONFERENZ