java enterprise Java EE-Anwendungsmigration Java EE-Anwendungsmigration auf den SAP Web AS, Teil 1 Der Mythos von „Write Once – Run Anywhere“ von helge martin und dr. halil-cem gürsoy Von SAP als die Integrationsplattform zur Realisierung von serviceorientierten Architekturen (SOA) beworben, offeriert NetWeaver mit dem kombinierten ­­­­Ja­­va EE/­ABAP Stack sowohl einen unkomplizierten Zugriff auf ABAP-Funktionen als auch deren nahtlose Integration in einen J2EE 1.3-zertifizierten Container. Eine interessante Option für viele Unternehmen einer ohnehin breiten ERP-Kundenbasis, ihre bestehende Java EEApplikationslandschaft im Zeichen einer allgemeinen Konsolidierungswelle auf den SAP Web AS zu ­migrieren. Die Szenarien für den Einsatz der NetWeaver-Plattform sind so unterschiedlich und vielfältig wie die Unternehmen selbst. Generelles Ziel ist es, die Produkt- bzw. Herstellervielfalt sowie die Anzahl der Serverinstanzen in einer heterogenen Landschaft zu minimieren. Abbildung 1 beschreibt ein mögliches Szenario für die schrittweise Einführung der NetWeaver-Plattform. Hier wird langfristig eine komplette Abdeckung der Betriebsanforderungen durch die NetWeaver-Komponenten Enterprise Portal und Exchange Infrastructure angestrebt. Die Konsolidierung der Application Server stellt hierfür den ersten wichtigen Schritt dar. Nach allen strategischen Managemententscheidungen rund um die Total Cost of Ownership und den Return on Investment, muss die Java EE-Unternehmenssoftware nach theoretischen Überlegungen letztlich auf eine neue Java EEPlattform umziehen. Viele IT-Abteilungen stellt dies vor erhebliche, oftmals neue Herausforderungen und für viele Entwickler, Projektmanager und CIOs hat sich der schöne Schein einer standardisierten „Write Once – Run Anywhere“-Java EE-Welt zum ersten Mal in einem Java EE-Mi­gra- 46 3.2006 tionsprojekt getrübt. Denn neben den organisatorischen Hürden liegen die maßgeblichen Herausforderungen der technischen Java EE-Anwendungsmigration im Spannungsfeld zwischen spezifikationstreuer Implementierung der Applikation und der Umsetzung der Java EE-Spezifikationen auf der Zielplattform. In diesem Artikel wollen wir die Migra­ tionsfreudigkeit des SAP Web AS genauer unter die Lupe nehmen und die wichtigsten, immer wiederkehrenden technischen und organisatorischen Erfahrungen mit Ja­va EE-­Migrationsprojekten vorstellen. Nach der Migration der bestehenden Java EE-Anwendungen bleibt das Rad aber nicht stehen. Welche Implikationen der Umstieg auf NetWeaver und den Web AS für die Entwicklung neuer Java EEAnwendungen hat, ist Thema des nächsten Teils der Migrationsserie. Unter dem Motto „Prozessmigration“ widmen wir uns dann den von SAP bereitgestellten Konzepten und Technologien zur Unterstützung des Entwicklungsprozesses. Der Weg ist das Ziel Der Umstieg auf eine neue Plattform wie NetWeaver ist für ein Unternehmen eine Abb. 1: NetWeaver als Integrationsplattform www.javamagazin.de java enterprise Java EE-Anwendungsmigration Aufgabe mit vielen strategischen Implikationen. Java EE-Migrationsprojekte stellen hierbei einen erfolgskritischen und oftmals unterschätzten Faktor dar. Größere organisatorische und finanzielle Aufwände für ein Migrationsprojekt lassen sich zudem oftmals schlecht an die Geschäftsführung kommunizieren. Hat das Unternehmen doch erst vor kurzem auf aktuelle Java EE-Technologien gesetzt und in diesem Rahmen hohe Investitionen in Hard- und Software sowie in das Know-how der Mitarbeiter getätigt. Ebenso wird die Portabilität der Java EE-Technologie und die suggerierte Produkt- und Herstellerunabhängigkeit bei der Entscheidung seiner Zeit sicherlich eines der führenden Argumente gewesen sein. Um ein tragfähiges Vorgehen entwickeln zu können, das dann sowohl die tech­nischen und fachlichen als auch die politischen, organisatorischen und strategischen Anforderungen des Unternehmens abbildet, muss zunächst ein grundlegendes Verständnis für die Dimensionen des individuellen Migrationsprojekts aufgebaut werden. Die Migration von Unternehmenssoftware auf eine neue Java EE-Plattform umfasst in der Regel die sukzessive Mi­ gration mehrer, zumeist interagierender Anwendungen und Komponenten mit unterschiedlicher Nähe zur Wertschöpfungskette des Unternehmens. Hierdurch können ohne weiteres „Mission Critical“-Szenarien entstehen, die unter hohem Erfolgsdruck stehen. Die Abhängigkeiten zwischen einzelnen Anwendungen und Komponenten stellen somit also auch fachliche und organisatorische Abhängigkeiten zwischen den verschieden Ebenen und Bereichen eines Unternehmens dar. Neben der technischen Analyse dient deshalb auch die genaue Analyse des Projektumfelds dazu, einen klar kommunizierbaren Migra­ tionspfad zu entwickeln, um bestenfalls alle Beteiligten an einem Strang ziehen zu lassen. Im Folgenden wollen wir uns auf die konkreten Projektphasen und auf die technischen Aspekte konzentrieren. Die Abbildung 2 zeigt schematisch die grundsätzlichen www.javamagazin.de Abb. 2: Projektphasen Phasen eines typischen Migrationsprojekts. Pilot gesucht Da bei einer Plattformumstellung häufig mehrere Anwendungen auf die Zielplatt- form migriert werden sollen, hat ein Pilotprojekt wichtige Funktionen innerhalb komplexer Migrationsvorhaben. Neben dem Sammeln von Erfahrungen im Umgang mit der Zielplattform werden in einem abgesteckten Zeitrahmen auch der NetWeaver und Web Application Server Als strategische Technologieplattform der SAP ist NetWeaver die Basis für die Entwicklung aktueller und kommender SAP-Lösungen und die Integration existierender Anwendungen. Dem aktuellen Trend hin zu SOA folgend, liefert SAP mit NetWeaver eine komplette Tool-Palette (NWDS; WebDynpro) und mit der Enterprise Service Architecture (ESA) die entsprechenden Blueprints. Die folgende Abbildung gibt einen Überblick über die fachlichen Komponenten der NetWeaver-Technologieplattform zur Umsetzung von Portal-, Informations- und Prozessintegrationslösungen. NetWeaver und Web AS Der Web AS repräsentiert die Applikationsplattform im NetWeaver-Komponentenmodell. Der kombinierte Java EE/ABAP Stack des Web AS ermöglicht es, Business-Objekte sowohl in ABAP als auch in Java zu implementieren oder bereits existierende Geschäftslogik aus beiden parallel zu betreiben. Der Web AS stellt die zugrunde liegende Infrastruktur für Produkte wie SAP R/3 Enterprise, mySAP ERP, SAP Enterprise Portal, SAP Exchange Infrastructure dar. Der zurzeit aktuelle und bereits weit verbreitete SAP Web AS 6.40 ist J2EE 1.3-konform. Die für das Frühjahr 2006 angekündigte Version 7.x des Web AS wird den J2EE 1.4-Standard erfüllen. Tabelle 1 gibt Aufschluss über die Versionshistorie des SAP Web AS. Version Java EE-Konformität Key Features 6.10 Nur ABAP Nativer HTTP- und XML-Support 6.20 J2EE 1.2 Kombinierter Java EE/ABAP Stack; JSP und BSP; Web Services (WSDL, SOAP, UDDI) 6.30 J2EE 1.3 6.40 J2EE 1.3 7.x J2EE 1.4 Software Lifecycle Management; ABAP-Erweiterungen Versionshistorie SAP Web AS 3.2006 47 java enterprise Java EE-Anwendungsmigration Abb. 3: Pilotprojekt – Komponentenmodell Szenario anhand der einzelnen Phasen des Migrationsprozesses das technische Vorgehen einer Java EE-Anwendungsmigration auf den Web AS vorgestellt werden. In unserem Beispiel soll eine Java EE-­Anwendung von einem WebLogic Application Server auf den Web AS migriert werden (Abb. 3). Einen Ausgangspunkt definieren Aufbau des Migrationsumfelds und insbesondere der zukünftigen Entwicklungsumgebung vorangetrieben. Dazu sollte am besten eine möglichst repräsentative Applikation als Migrationskandidat mit einer durchschnittlichen Anzahl an technischen und fachlichen Schnittstellen gewählt werden, um technische und organisatorische Stolperfallen in Hinblick auf Folgemigrationen zu identifizieren. Ziel ist ein ohne viele Anpassungen reproduzierbarer Migrationsprozess. Aus projektorganisatorischer Sicht gehört solch eine initiale Migration einer Anwendung also mit in die Planungs- und Analysephase und kann als Proof of Concept betrachtet werden. Die Retrospektive auf ein Pilotprojekt ermöglicht neben der Optimierung des Vorgehens konkretere Aufwandsschätzungen für die anstehenden Folgemigrationen. Aufwände für den Wissensaufbau bei den eigenen Mitarbeitern können in einem Pilotprojekt auch übersichtlich gekapselt werden. Ist erst einmal ein idealer Migrationskandidat ausgemacht, kann mit der technischen Migration begonnen werden. Im Folgenden soll mit einem typischen Sun Application Verification Kit Das AVK ist eine Sammlung von Tools, die es dem Entwickler erleichtern, spezifikationstreue Java EE-Anwendungen zu entwickeln. Das AVK prüft eine Applikation und ihre einzelnen Komponenten in statischen und dynamischen Tests. Über die Kompilierbarkeit hinaus prüfen die statischen Tests auf ein konformes Packaging und die Existenz proprietärer Bibliotheken auf Basis von Deskriptoren- und Code-Scans. Darüber hi­ naus wird die web.xml der Webkomponente auf vollständige Servlet Mappings untersucht. Für die dynamischen, sprich Laufzeittests bringt das AVK eine um Test-Tools erweiterte Referenzimplementierung des Sun Application Server mit. •Static Archive Test: überprüft die Java EEKonformität des Packaging der Komponenten. •Introspection: erstellt eine Liste aller öffentlichen Methoden der Bean Interfaces sowie ihrer Create- und Remove-Methoden und bemängelt fehlende oder fehlerhafte Methoden- 48 3.2006 signaturen. Aus den Einträgen in ejb-jar.xml und web.xml werden eine weitere Liste aller EJB- und Webkomponenten generiert und das Vorhandensein der deklarierten Komponenten geprüft. •Code Scan: durchsucht Quellcode und De­ skriptoren nach Referenzen auf proprietäre Bibliotheken. •Runtime Verification: Während der Laufzeit werden alle Aufrufe unter den Komponenten geloggt, um die faktische Codeabdeckung zu ermitteln. Die Kriterien für eine erfolgreiche Verifizierung der Java EE-Konformität erfordern, dass EJBKomponenten alle statischen und dynamischen Tests bestehen und in den Laufzeittests eine ­Codeabdeckung von 80 Prozent ohne Exceptions aufweisen. Die Webkomponenten müssen vollständige Servlet Mappings sowie kompilierbare JSPs und Servlets aufweisen. Eine saubere Codebasis ist die absolute Voraussetzung für die erfolgreiche Mi­ gration. Zunächst sollte die zu migrierende Applikation im Versionsmanagement vom aktuellen Entwicklungszweig getrennt werden (z.B. durch Branchen unter CVS). Von der Weiterentwicklung sollte während der Migration abgesehen werden. Um nach der Migration sicherstellen zu können, dass die Anwendung im vollen Umfang so funktioniert wie vor der Mi­ gration, bietet es sich an, alle funktionalen Tests noch einmal durchzuführen und zu dokumentieren. Idealerweise liegt eine hochgradige Abdeckung des Codes mithilfe von Unit-Tests vor. Nach der Migration wird die Anwendung auf dem Zielsystem gegen die bereits vorliegenden Ergebnisse getestet und optimiert. Zudem solten die nichtfunk­ tionalen Anforderungen umfassend dokumentiert sein, um dann die Anwendung und Serverkonfiguration abschließend für den produktiven Einsatz zu optimieren. Nicht zuletzt lassen sich mit einer guten Testdokumentation die oftmals zähen Abnahmeverfahren erheblich beschleunigen beziehungsweise unnötige Diskussionen vermeiden. Proprietäre Bibliotheken Der stetige Ruf nach aktuellster Java EEFunktionalität und einer breiten FeaturePalette in einem zuweilen Buzzword- und Hype-getriebenen Java EE-Markt drängt die Serverhersteller in immer kürzere Produktzyklen. Und während man in diversen Konsortien, im JCP und nicht zuletzt in der Open-Source-Community an den Standards von morgen laboriert, wird das eigene Produkt mit proprietären Erweiterungen wie PK-Generatoren oder EJB/QL-Erweiterungen garniert. Unter dem Gesichtspunkt der Migration bekommt Kundenbindung schnell www.javamagazin.de java enterprise Java EE-Anwendungsmigration eine neue Bedeutung, denn die Implika­ tionen der Nutzung herstellerspezifischer Bibliotheken in der zu migrierenden Applikation sind als Aufwand mit zu kalkulieren. Hier stellt sich die Frage, ob die Zielplattform das gewünschte Feature schon bereitstellt, ob es integriert werden kann oder ob gar eine umfangreichere Refaktorisierung einer oder mehrerer Komponenten notwendig wird. In der Testphase empfiehlt sich daher der Einsatz von Suns Application Verification Kit for the Enterprise (AVK) [1]. Vor allem bei einer breiten Codebasis können mit dem AVK die spezifikationstreue Implementierung der Anwendung, die Vollständigkeit der Komponenten sowie das Laufzeitverhalten getestet werden (siehe Kasten). Ob die vollständige Migration der Anwendung auf die Sun Java EE-Referenzimplementierung zur Durchführung der Laufzeittests immer sinnvoll ist, ist hinsichtlich des Aufwands von Fall zu Fall fraglich. Die einfach anzuwendenden statischen Tests sollten vor einer Migration jedoch unbedingt durchgeführt werden. Neben den Checks auf Spezifikationstreue und Codeabdeckung ist der Einsatz des AVK auch nützlich, um proprietäre Bibliotheken zu identifizieren. „Out of the box“ erkennt das AVK proprietäre Bibliotheken von Sun One, WebLogic, Web­ Sphere und JBoss. Wurde die zu migrierende Anwendung hingegen auf der Basis von Oracles OC4J entwickelt, kann die AVKKonfiguration in der <AVK_Home>/bin/ lib/asmt-config.xml über einen kleinen Trick wie folgt angepasst werden: <jboss> <!-- Enabling AVK to scan for unportable Packages --> <supported></supported> <unsupported> <name>com.oracle</name> <name>oracle.j2ee</name> <name>com.evermind.server</name> </unsupported> <!-- JBoss-Eintraege auskommentiert <supported></supported> <unsupported> <name>org.jboss</name> </unsupported> --> </jboss> Da die asmt-config.xml kein CostumElement oder Ähnliches vorsieht, müssen die Paketnamen der proprietären Bi­bliotheken wie bereits gezeigt zum Beispiel in das JBoss-Element eingetragen werden. Entwicklungsumgebung – von WebLogic zu NWDS Wenn man auf eine neue Java EE-Plattform umsteigt, ändert sich in der Regel auch die Entwicklungsumgebung. In unserem Beispielprojekt zieht die Codebasis aus der WebLogic IDE in das NetWeaver Deve­loper Studio (NWDS) um. Dabei ist es die einfachste Möglichkeit ist, wenn man die ­Codebasis mittels des SAP J2EE Migra­tion Kit Plug-in in das NetWeaver Developer Studio importiert. Das Plug-in generiert alle SAP-proprietären Deskriptoren und passt die Verzeichnisstruktur den NWDS-Projekten an. So können alle weiteren Anpassungen und das Deployment aus dem Eclipsebasierten NWDS vorgenommen werden. Zurzeit unterstützt das Plug-in den Anzeige www.javamagazin.de 3.2006 49 java enterprise Java EE-Anwendungsmigration Import von WebSphere-, WebLogic- und JBoss-Projekten. Wurde die Applikation in einer anderen IDE, beispielsweise im JDeveloper, entwickelt, müssen die Sourcen händisch importiert werden. Diese Tätigkeit steht leider auch dann an, wenn die Projektstruktur exotisch sein sollte oder z.B. nur der Split Development Directory von BEA folgt. Bei einer breiten Codebasis kann es sich daher durchaus lohnen, einen eigenen Transformator mit XSLT-Stylesheets zur automatisierten Anpassung der De­ skriptoren zu erstellen. Zur Migration weniger umfangreicher Applikationen bietet auch das mit dem Web AS mitgelieferte Deploy Tool eine durchaus brauchbare Alternative, da es unabhängig vom NWDS ist. In der Swing-Anwendung werden DeploymentProjekte angelegt, in denen die einzelnen Java EE-Komponeten, wie WEB und EJB Module, definiert und in deploybaren EARs gepackt werden können. Alle SAPproprietären Deskriptoren werden vom Deploy Tool generiert. Oftmals konnten so kleinere Applikation mit nur geringen Anpassungen an den Deskriptoren schnell migriert werden. Web AS konfigurieren Vor dem ersten Deployment auf den Web AS sollten alle benötigten Konfigurationen für JDBC und JMS Connectivity, falls vorhanden, vorgenommen werden. Die Definition des JMS-Servers und das Anlegen von anwendungsspezifischen Connection Factories sowie der Queues und Topics erfolgen über den JMS Provider Service im Visual Administrator des Web AS. Die Konfiguration von JDBC 1.1- und 2.0-(XA-)Treibern z.B. für verteilte Transaktionen kann sowohl im JDBC Connector Service über den Visual Administrator als auch über den SAP-proprietären Deskriptor data-sources.xml geschehen, die man zusammen mit der zugehörigen Anwendung deployt. Die SQL Engine des JDBC Connector Service unterstützt die SQL-Typen OPEN_SQL, NATIVE_SQL und VENDOR_SQL. OPEN_SQL ist ein SAP-eigener Satz von SQL-Standardanweisungen und wird auch im ABAP-Stack genutzt, um unabhängig vom Hersteller auf Datenbanken zuzugreifen. Nutzt die 50 3.2006 Anwendung allerdings herstellerspezifische Schemata oder Funktionen wie zum Beispiel Stored Procedures, muss NATIVE_SQL respektive VENDOR_SQL gewählt werden. Deskriptoren- und Quellcodeanpassungen Strukturell einfache, aus Stateless Ses­sion Beans, JSP/Servlets und POJOs bestehende Java EE-Applikationen stellen in der Regel keine größere technische He­ rausforderung dar. Es müssen meistens lediglich die Deskriptoren angepasst und, wenn überhaupt, nur geringfügige Änderungen im Code vorgenommen werden. Bei Nutzung des J2EE Migration Kit Plug-in werden die meisten Anpassungen in den Deployment-Deskriptoren automatisch erledigt. Das J2EE Migration Kit Plug-in hat allerdings seine Grenzen, weshalb für die Konfiguration speziell von containernahen Technologien wie Stateful Session und Message Driven Beans sowie CMP Entity Beans oder O/R-Mappern selber Hand angelegt werden muss. Anpassungen im Quellcode werden vom Plug-in nicht vorgenommen. Im Folgenden betrachten wir die Ausstattung und Eigenheiten des Web AS im Querschnitt durch die Schichten unserer Beispielapplikation (Abb. 3). Präsentationsschicht & JNDINamenskonventionen Unsere Beispielanwendung präsentiert sich über eine Struts-basierte Webapplikation. Die Migration des Frameworks stellt sich in der Regel als unproblematisch dar. Allerdings ist darauf zu achten, dass der Web AS im Umgang mit JSP-Tags pingeliger ist als der WebLogic und entsprechend der Spezifikation auf einer korrekten Groß-/­ Kleinschreibung besteht [2]. Des Weiteren sollten Ressourcen wie Message Properties innerhalb einer Servlet-Definition in der web.xml stets über einen voll qualifizierten Pfadnamen referenziert werden: <servlet> <servlet-name>myAction</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet </servlet-class> <init-param> <param-name>Application</param-name> <param-value>de.cdiag.demo.Messages</param-value> </init-param> ... </servlet> Die Ressourcen-Dateien sollten sich dementsprechend im Package de.cdiag. demo unter WEB-INF/classes befinden. Zusätzlich dazu müssen die Ressourcen in gleicher Weise in der struts-config.xml nachgepflegt werden: <message-resources parameter=“de.cdiag.demo.Messages“/>. Der Web AS JNDI Provider erwartet die Einhaltung spezieller Namenskonven­ tionen zur Differenzierung von Komponententypen. Lokale Home Interfaces sind im Lookup nur mit dem Präfix local­ ejbs/... zu finden, während Remote Interfaces ohne dieses Präfix, also unter comp: java/env/ejb im JNDI Tree eingebunden werden. Ressourcen wie z.B. Data Sources erhalten das Präfix jdbc/… und JMS Queues und Topics entsprechend ­jmsqueues/... und jmstopics/.... Die Spezifikation empfiehlt an dieser Stelle nur das Ablegen der EJB-Objekte unter comp:java/env/ejb und der Ressourcen unter comp:java/env [3]. Der Nutzen einer gesonderten Deklaration erschließt sich hier nicht unbedingt auf Anhieb. Die Deklaration in ejb.jar.xml und der entsprechende Lookup eines lokalen EJBObjekts sehen demnach wie folgt aus: <ejb-local-ref> <ejb-ref-name>ejb/LocalDemoBean</ejb-ref-name> <ejb-ref-type>Entity</ejb-ref-type> <local-home>de.cdiag.demo.ejb.LocalDemoHome</ local-home> <local>de.cdiag.demo.ejb.LocalDemo</local> <ejb-link>AnotherDemoBean</ejb-link> </ejb-local-ref> Context jndiContext = new InitialContext(); PersonCMPLocalHome home = (LocalDemoHome) jndiContext.lookup(“localejbs/LocalDemoBean“); Während die Spezifikation hier etwas freier ausgelegt wurde, stellt sich der Web AS auf der anderen Seite wiederum penibler an. So toleriert der Web AS im Gegensatz zum WebLogic keine Context-Präfixe wie java:/comp/env. Auf dem Web AS müssen JNDI Lookups den konformen Context www.javamagazin.de java enterprise Java EE-Anwendungsmigration java:comp/env nutzen (ohne Slash vor comp). Es müssen gegebenenfalls alle JNDIDeklara­tionen in Deskriptoren und Sourcen angepasst werden, um Komponenten auf der neuen Plattform wieder zu finden. Zusätzlich setzt man in allen Clients noch den InitialContextFactory-Parameter auf die SAP-Implementierung com.sap.en­ gine.services.jndi.InitialContextFactory Impl.­ In geclusterten Systemen kann entsprechend com.sap.engine.services.jndi. InitialReplicatingContextFactoryImpl definiert werden, um die Replikation der JNDI-Objekte über alle Cluster Nodes zu gewährleisten. staltet sich hingegen unproblematisch. So muss zur Konfiguration lediglich die Nutzung des Web AS-Transaktionsmanagers in der TopLink session.xml deklariert werden: <toplink-configuration> <session> ... <uses-external-transaction-controller>true</ uses-external-transaction-controller> </login> <external-transaction-controller-class> com.sap.engine. services.ts.jta.impl.TransactionManagerImpl </external-transaction-controller-class> ... </session> </toplink-configuration> Context ctx = null; Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, ”com.sap.engine.services.jndi. InitialContextFactoryImpl“); env.put(Context.PROVIDER_URL, ”localhost:50004“); try { ctx = new InitialContext(env); } catch (NamingException ne) {} Methodensignaturen Der WebLogic erlaubt das Werfen eigener Exceptions in EJB-Methoden wie ejb­ Create(). Nach unserer Einschätzung legt der Web AS die EJB 2.0-Spezifikation hier falsch aus. Im Gegensatz zum WebLogic erlaubt er hier nur CreateExceptions. Sollen eigene Exceptions geworfen werden, müssen diese CreateException erweitern. Nach EJB 2.0 dürfen in der throws-Klausel eigene Exceptions geworfen werden (siehe EJB 2.0 Spec, Kapitel 7.10.3 [4]). Persistenz In unserem Beispiel wird in der Persistenzschicht TopLink eingesetzt. Auf CMP und proprietäre Features wie Type Mapping und PK-Generierung wurde verzichtet. Es sei jedoch kurz erwähnt, dass der Web AS das vom WebLogic bekannte Type Mapping in CMP-Deskriptoren nicht unterstützt. Mappings sind also programmatisch in den Beans selbst vorzunehmen. Auch bei der PK-Generierung und den EJB/QL Statements geht der Web AS eigene Wege, sodass bei Applikationen mit CMP weitere Aufwände zu kalkulieren sind. Die Konfiguration von TopLink ge- www.javamagazin.de Die Migration anderer O/R-Mapper wie z.B. Hibernate gestaltet sich in der Regel ähnlich unproblematisch, da es sich für gewöhnlich um geringe Anpassungen in der Konfiguration handelt. Ganz anders gestaltet sich die Situation, wenn unsere Applikation statt z.B. über TopLink die Persistenzschicht mithilfe von Entity Beans, hier im Speziellen mit CMPs, implementiert. In diesem Fall hängt die Qualität der Migration sehr stark von der Spezifikationstreue des bisher verwendeten Containers ab. Zudem nutzen die meisten Application Server gerade für Entity Beans eigene, proprietäre Deployment-Deskriptoren. Hier wird das konkrete objektrelationale Mapping ausdetailliert. Der WebLogic verwendet hierfür z.B. die Datei weblogic-cmp-rdbms-jar.xml. In dieser Datei finden sich auch sehr viele Details der Engine-Konfiguration. So wird über diese Datei der Zeitpunkt des tatsächlichen Inserts in die Datenbank gesteuert (Element delay-database-insert-until) oder die Cache-Größe bestimmt. Wird das J2EE Migration Kit zur Mi­ grationserleichterung eingesetzt, wird ein großer Teil der Mapping-Informa­tionen, sofern der ursprünglich eingesetzte Container unterstützt wird, in den De­ ployment-Deskriptor persistent.xml des Web AS übernommen. Dennoch bleibt häufig noch einiges bei der Migration von CMPs nachzubearbeiten, falls proprietäre PK-Generatoren oder andere Erweiterungen eingesetzt wurden. Anzeige java enterprise Java EE-Anwendungsmigration Gerade hinsichtlich der EJB-QL entwickelten die meisten Java EE-ContainerEntwickler eine rege Fantasie und dies natürlich auf Kosten der Portabilität der Applikation. In Vorwegnahme der EJB 2.1-Spezifikation wurde z.B. im WebLogic 8.1 die „Orderby“-Klausel aufgenommen. Weiterhin wurden als Extension Subqueries eingeführt, die erst jetzt mit EJB 3 Einzug in die Spezifikation halten. Sicherlich erleichtert dies bei einigen Fragestellungen das Leben des Entwicklers, dürfte aber umso mehr Kopfschmerzen bei der Migration verursachen. Diese Liste ließe sich um einiges verlängern und auch die anderen Hersteller haben sich vor EJB-QL Extensions nicht gescheut. Selbst der bei vielen Entwicklern beliebte JBoss prahlt hier mit seiner JBossQL. Web Services Das NetWeaver Developer Studio stellt komfortable Wizards zur Generierung Der Web AS 6.40 steht seinen Konkur- renten wie WebLogic, WebSphere, JBoss und anderen in Sachen Spezifikations(un)treue in nichts nach. einer serverseitigen Web-Service-Infrastruktur zur Verfügung. EJB- oder ­POJOMethoden können so leicht als Web Service konfiguriert und deployt werden. Dieses Vorgehen setzt natürlich den Einsatz des Developer Studios voraus. Die Migration bestehender Web-ServiceFrame­works ist natürlich auch möglich. In unserer Beispielanwendung kommt Axis zum Einsatz. Für die Migration auf den Web AS mussten keinerlei Anpassungen vorgenommen werden. Standalone Clients Um Standalone Clients via RMI/IIOP mit EJBs auf dem Web AS kommunizieren zu lassen, müssen neben den entsprechenden Bean Interfaces die SAP-Bibliotheken sapj2eeclient.jar, logging.jar und exception.jar im Klassenpfad des Clients liegen. Die Bibliotheken finden sich unter usr\sap\J2E\JC00\j2ee\j2eeclient\ in der Web AS-Installation. Die benötigten Bean 52 3.2006 Interfaces können über den Visual Admin in der Übersicht aller deployten Komponenten über den Button Get Client Jar generiert werden. Da man sich sowieso gerade im Visual Admin befindet, kann gleich geprüft werden, ob der IIOP Provider Service sowohl im Dispatcher als auch auf der aktuellen Serverinstanz gestartet ist. Per Default ist der Service nämlich deaktiviert. Natürlich muss auch bei Standalone Clients die passende Context Factory im Lookup definiert sein (siehe JNDI-Namenskonventionen). Zum guten Schluss Nachdem alle nötigen Änderungen in Deskriptoren und Quellcode vorgenommen worden sind und die Anwendung erfolgreich deployt wurde, ist der Job noch nicht getan. So müssen abschließend alle vorhandenen Tests erneut durchgeführt und mit den Ergebnissen der Testläufe vor der Migration abgeglichen werden. Vor dem Testen sollten alle automatisierten Tests auf die neue Laufzeitumgebung angepasst werden. Fazit Trotz Java EE-Standards und Tool-Support sind Java EE-Anwendungsmigrationen nicht auf Knopfdruck zu realisieren. Der Web AS 6.40 stellt hierbei als Zielplattform keine Ausnahme dar. Als vollwertiger J2EE 1.3 Application Server steht er seinen Konkurrenten wie WebLogic, WebSphere, JBoss und anderen in Sachen Spezifikations(un)treue in nichts nach. Die Erfahrung zeigt, dass der Erfolg von Java EE-Migrationsprojekten vielmehr von einem soliden Vorgehen abhängt und aus technischer Sicht dann sowohl die Eigenheiten der Quell- als auch die der Zielplattform bekannt sein müssen. Dass die Zielplattform in der Regel zunächst noch unbekannt ist, muss natürlich bedacht werden. Hier ist der Entwickler, neben Schulungen und Zertifizierungen, auf eine funktionierende Community angewiesen, um sich bei einem noch recht jungen Produkt wie dem Web AS nicht bei jeder Exception wie der erste Mann auf dem Mond zu fühlen. SAP hat diesen Bedarf erkannt und mit dem SAP Developer Network eine lebendige und ständig wachsende Community etabliert. Als Senior Vice President für das Platform Ecosystem Development, das NetWeaver-Partnernetzwerk, zeichnet hierfür kein geringerer als George Paolini verantwortlich. Der ehemalige Sun-Manager ist Mitbegründer des Java Community Process, des weltweit größten Entwicklernetzwerks. Im SDN-Portal [5] bietet SAP natürlich auch eigene Hilfestellungen speziell zum Thema Java EE-Migration an. Ohne einen Anspruch auf Vollständigkeit zu erheben, hoffen wir einen hilfreichen Überblick über die aus unserer Erfahrung relevanten technischen und organisatorischen Aspekte der Anwendungsmigration auf den SAP Web AS vermittelt zu haben. Natürlich lassen sich diese Erfahrungen auf andere Migra­ tionsszenarien mit alternativen Zielplattformen übertragen. Im nächsten Artikel dieser Serie widmen wir uns den von SAP bereitgestellten Konzepten und Technologien zur Unterstützung des Entwicklungsprozess wie dem DTR und dem NWDI und stellen sie gängigen Konzepten wie Continuous Integration und den entsprechenden Tools wie CVS, Subversion, Ant oder CruiseControl aus der Open-Source-Welt gegenüber. Helge Martin ist Consultant und Coach in Softwareentwicklungsprojekten mit dem Schwerpunkt Java EE bei der CDI Concepts Development Integration AG (www.cdi-ag .de) in Dortmund. Er beschäftigt sich seit mehreren Jahren intensiv mit der Entwicklung und Migration von Java EE-Anwendungen, insbesondere auf dem SAP Web AS. Dr. Halil-Cem Gürsoy ist Senior Consultant bei der CDI Concepts Development Integration AG und ist in diverse Java EE- und WebDynpro-Projekte seit dem Ramp-up des Web AS 6.30 involviert. Er kann auf eine mehrjäh­rige Erfahrung in Java EE-Entwicklung und -Architektur auf unterschiedlichen Plattformen zurückblicken. Sein aktueller Fokus liegt auf der Planung und Implementierung von event-getriebenen Architekturen auf der Basis von SOA und der Erarbeitung von Konzepten zur Migration von Java EE-Applikationen. Sie erreichen die Autoren unter [email protected]. Links und Literatur [1]Sun AVK: java.sun.com/j2ee/avk/ [2]JSP 1.2-Spezifikation: www.jcp.org/aboutJava/ communityprocess/final/jsr053/ [3]J2EE 1.3-Spezifikation: java.sun.com/j2ee/ j2ee-1_3-fr-spec.pdf [4]java.sun.com/products/ejb/docs.html [5]SDN: www.sdn.sap.com www.javamagazin.de