Möglichkeiten_der_Server-neutralen_Implementierung_von_Anwendungen Name der Autoren: Hochschule und Studienort: Titel der Arbeit: Betreuer: Mathias Schulze, Henrik Motzkus FOM Hamburg "Möglichkeiten der Server-neutralen Implementierung von Anwendungen" Prof. Dr. Uwe Kern I Inhaltsverzeichnis Inhaltsverzeichnis • 1 Einleitung ♦ 1.1 Motivation ♦ 1.2 Ziel und Vorgehensweise • 2 Grundlagen ♦ 2.1 Komponentenmodelle ◊ 2.1.1 CORBA ◊ 2.1.2 EJB ◊ 2.1.3 DCOM ♦ 2.2 Relevante Techniken ◊ 2.2.1 Webservices ◊ 2.2.2 SOAP ◊ 2.2.3 XML • 3 Plattformen ♦ 3.1 .NET Framework ◊ 3.1.1 Konzept ◊ 3.1.2 Common Language Runtime ◊ 3.1.3 Intermediate Language ◊ 3.1.4 Programmierung ⋅ 3.1.4.1 API ⋅ 3.1.4.2 ASP.NET ⋅ 3.1.4.3 ADO.NET ◊ 3.1.5 Verfügbare Laufzeitumgebungen ♦ 3.2 J2EE/Java EE ◊ 3.2.1 Konzept ⋅ 3.2.1.1 Client Tier ⋅ 3.2.1.2 Web Tier ⋅ 3.2.1.3 Business Tier ⋅ 3.2.1.4 Enterprise-Information-System Tier ⋅ 3.2.1.5 Container ◊ 3.2.2 API ⋅ 3.2.2.1 Assembling Inhaltsverzeichnis 1 Möglichkeiten_der_Server-neutralen_Implementierung_von_Anwendungen ⋅ 3.2.2.2 Übersicht ◊ 3.2.3 Verfügbare Server ◊ 3.2.4 Java EE Compatibility & Java Verification ⋅ 3.2.4.1 Application Verification Kit for the Enterprise ⋅ 3.2.4.2 Java Powered for the Enterprise Programm • 4 Schlussbetrachtung ♦ 4.1 Ergebnisse ◊ 4.1.1 Java ◊ 4.1.2 .NET ♦ 4.2 Fazit ♦ 4.3 Ausblick • 5 Anhang II Tabellenverzeichnis Tabelle Nr. 1 2 3 4 Bezeichnung J2EE Zertifizierte Anbieter Java EE 5 Compatible Implementations Java EE Apis Java EE Versionen III Abbildungsverzeichnis Abb.-Nr. 1 2 3 4 5 6 Abbildung .NET - Schritte vom Quelltext zum Maschinencode Distributed Multitiered Applications Application Packaging Java EE Apis Application Server Platforms Based On Java EE Application Architektur IV Abkürzungsverzeichnis Inhaltsverzeichnis 2 Möglichkeiten_der_Server-neutralen_Implementierung_von_Anwendungen Abkürzung ADO ASP AWT CLI CLR COM CORBA CTS DCOM EAR EIS EJB ERP ESB FLC HTML IDL IIOP OMG Java AVK JavaEE JavaEE JNDI JSP JSR JVM J2EE RAR SOA SOAP UI XML Bedeutung ActiveX Data Objects Active Server Pages Abstract Window Toolkit Common Language Infrastructure Common Language Runtime Component Object Model Common Object Request Broker Architecture Common Type System Distributed Component Object Model Enterprise Archive Enterprise Information System Enterprise Java Bean Enterprise Resouce Planning Enterprise Service Bus Framework Class Library Hyper Text Markup Language Interface Definition Language Internet Inter ORB Protocol Object Management Group Java Application Verfication Kit Java Platform Enterprise Edition 5 Java Platform Enterprise Edition 5 Java Naming Diretory Interface Java Server Page Java Specification Request Java Virtual Machine Java 2 Platform Enterprise Edition Resource Adapter File Service Oriented Architecture Simple Object Access Protocol User Interface Extensible Markup Language 1 Einleitung 1 Einleitung 3 Möglichkeiten_der_Server-neutralen_Implementierung_von_Anwendungen 1.1 Motivation Heutzutage nutzt jedes Unternehmen Software-Anwendungen, um seine Geschäftsprozesse zu unterstützen. Ohne Software ist Unternehmertun heutzutage nicht mehr denkbar. Unternehmen werden dadurch mit zunehmendem Maß abhängig von einer zuverlässigen und kostengünstigen IT-Infrastruktur. Als in den Neunzigern das sog. E-Business Zeitalter anbrach, haben sich die Unternehmen rasant verändert. Diese Entwicklung ist so weit vorangeschritten, dass ohne den Einsatz von IT der Zutritt zu bestimmten Märkten nicht möglich ist. Software-Anwendungen nehmen eine herausragende Rolle in den Unternehmen ein. Die Qualität dieser Software-Anwendungen bestimmt häufig in großem Maße die Qualität der Geschäftsprozesse und der Produkte des Unternehmens. Die Einführung von Software ist ein komplexer Prozess. Abhängig von der Unternehmensgröße, dem Know-how der Mitarbeiter und dem finanziellen Potential kann sich ein Unternehmen dazu entscheiden, sog. Standardsoftware zu kaufen oder selbst Individualsoftware zu entwickeln. Es ist eine Make-or-Buy Entscheidung zu fällen. Der Einsatz von Standardsoftware ist meist kostengünstiger und spart Zeit. Die Entwicklung von Individualsoftware ist meistens teurer. Sie kann die Geschäftsprozesse eines Unternehmens aber meistens besser abbilden. Daher verfolgen Unternehmen meist eine gemischte Software-Beschaffungs-Strategie. Kaum ein Unternehmen wird Software für die Email-Kommunikation selbst entwickeln. Der Trend geht zur Spezialisierung auf die Kernkompetenzen, um dadurch einen Wettbewerbsvorteil zu erlangen. Software muss bei Verfolgung einer gemischten Software-Beschaffungs-Strategie nicht ausschließlich Out-of-the-Box einsetzbar sein. In immer komplexer werdenden Geschäftsprozessen kann es durchaus denkbar sein, dass Teile der zu entwickelnden Software von einem Softwareanbieter beschafft werden und aufbauend darauf ein Customizing stattfindet oder eigene Software entwickelt wird. Anwendungsserver sind ein klassisches Beispiel dafür. Ein Anwendungsserver leistet Standardaufgaben, die nicht immer wieder selbst entwickelt werden müssen. Authentifizierung oder Transaktionsverwaltung sind Aufgaben, die meist nach dem gleichen Muster ablaufen. Das Unternehmen kann in einem Anwendungsserver seine Individualsoftware ablaufen lassen und über Schnittstellen auf die Standardfunktionen zugreifen. Der Markt für Anwendungsserver ist in den letzten Jahren stark gewachsen, so dass ein Unternehmen heute eine große Auswahl hat. Es stehen Open Source-Lösungen und kommerzielle Lösungen bereit. Die Motivation für ein Unternehmen seine Software in einem Anwendungsserver ablaufen zu lassen ist groß. Die Entwicklung von Software wird erheblich kostengünstiger, die Abhängigkeit von einem Softwareanbieter wird im Gegenzug aber größer. Der gemischten Software-Beschaffungs-Strategie nach zu urteilen ist diese Situation ideal. Sie könnte aber besser sein, wenn die Abhängigkeit von einem Standardlieferanten nicht mehr bestünde. Die Motivation seine Software so zu gestalten, dass sie in verschiedenen Anwendungsservern läuft ist demnach gegeben. Davon müssen die Ziele der Softwareanbieter unterschieden werden. Es gibt Softwareanbieter, die ein Interesse daran haben ihre Software so zu gestalten, so dass sie auf möglichst vielen unterschiedlichen Anwendungsservern lauffähig ist. Der potentielle Kundenkreis erweitert sich dadurch signifikant. Andere Anbieter beschränken die Entwicklung auf ein Betriebssystem und haben wenig bis kein Interesse an der Verbreitung auf verschiedenen Systemen. 1.2 Ziel und Vorgehensweise Ziel dieser Arbeit ist es, jene Möglichkeiten und Wege aufzuzeigen, wie eine Server-neutrale Implementierung von Anwendungen erfolgen kann. 1.1 Motivation 4 Möglichkeiten_der_Server-neutralen_Implementierung_von_Anwendungen Als Anwendungsserver bezeichnet man i. w. S. jeden Server, auf dem Serveranwendungen ausgeführt werden und der über ein Netzwerk erreichbar ist. Um eine Serveranwendung zu betreiben, kann eine sog. Plattform (Laufzeitumgebung) für die Anwendung verwendet werden. Diese Arbeit teilt die Plattformen für Serveranwendungen in zwei Bereiche auf: 1. .NET von Microsoft, 2. Java EE von Sun. Für jede Plattform existieren mehrere Anwendungsserver. Eine Server-neutrale Implementierung würde daher implizieren, dass eine Anwendung auch plattformunabhängig sein muss. Da beide Plattformen aber in keiner Weise miteinander vergleichbar sind, werden die beiden Plattformen getrennt voneinander betrachtet. Implementieren bedeutet im allgemeinen Sprachgebrauch: Die Umsetzung einer Programmarchitektur oder eines Algorithmus in tatsächlichen Programmcode. Der Anwendungsentwickler erhält von einem Softwarearchitekt Vorgaben, die er dann in Programmcode umsetzt. Server-Neutralen Implementierung bedeutet, dass bei der Programmentwicklung Regeln eingehalten werden müssen. 2 Grundlagen Im Abschnitt Grundlagen werde alle Begriffe erklärt, die grundsätzlich betrachtet werden müssen, wenn von Server-neutraler Implementierung die Rede ist. Aufbauend auf den Grundlagen, muss ein Verständnis für Techniken und Architekturen geschaffen werden, um bewerten zu können, was möglich ist und was nicht. Um die Möglichkeiten einer Server-neutralen Implementierung von Anwendungen herauszuarbeiten, müssen zwei Plattformen betrachtet werden. Sun hat mit der Plattform Java EE (vorher J2EE) einen Standard für Software und Anwendungsserver geschaffen. Microsoft hat parallel die Plattform .NET entwickelt. Die nachfolgende Betrachtung der beiden Plattformen beginnt mit dem zentralen Thema der Entkoppelung von Techniken in der Anwendungsentwicklung. Zudem soll untersucht werden, ob der Einsatz dieser Technologien in der Lage ist Anwendungen Server-neutral zu implementieren. 2.1 Komponentenmodelle In der Softwareentwicklung werden Grundfunktionalitäten bzw. zusammen gehörende Funktionalitäten in Komponenten gekapselt. Dies hat zum einen den Vorteil, dass häufig benutzte Funktionen zentral zur Verfügung stehen und das mit Hilfe dieser Komponenten eine Entkoppelung einzelner Technologien erreicht werden kann. So kann z.B. ein in Java geschriebenes Programm über Corba mit einem C++ Programm Kommunizieren. 2.1.1 CORBA Die Common Object Request Broker Architecture (CORBA) ist eine serverseitige, plattformunabhängige Spezifikation von der Object Management Group (OMG), welche nicht auf einer spezifischen Programmiersprache basiert. Ziel ist die Kommunikation von verschiedenen Applikationen über Netzwerkprotokolle. Hierfür wird das Internet Inter ORB Protocol (IIOP), ebenfalls von der OMG spezifiziert, 2 Grundlagen 5 Möglichkeiten_der_Server-neutralen_Implementierung_von_Anwendungen eingesetzt. Die Schnittstellen bei CORBA werden mit der Interface Definition Language (IDL) erstellt. Ziel ist es einzelne Programmmodule voneinander logisch zu trennen und interoperabel zu halten[1]. 2.1.2 EJB Eine Enterprise Java Bean (EJB) ist serverseitige Anwendungslogik, die von anderer Anwendungslogik abgekapselt ist. EJBs laufen in einem EJB Container, der wiederum in einem Application Server integriert ist. Der EJB Container hat Zugriff auf systemseitige Services wie die Transaktionsteuerung oder Sicherheitsfunktionen des Applicationservers. Ein Vorteil von EJBs ist, dass Anwendungslogik unabhängig von der übrigen Anwendung entwickelt werden kann. Die Entwicklung von komplexen Anwendungen wird somit vereinfacht, indem sich Arbeitspakete schnüren lassen. Ein Nachteil dieser Art der Anwendungsentwicklung ist, dass Mehraufwand beim Definieren von Schnittstellen zu anderen Komponenten entsteht. Sind die einzelnen Komponenten fertiggestellt, müssen sie zu einer Gesamtanwendung zusammengestellt (assembling) werden.[2] 2.1.3 DCOM Das Distributed Component Object Model (DCOM) ist eine von Microsoft entwickeltes System, welches die Basis für die Implementierung von verteilten Anwendungen auf dem .NET Framework ist. Es ist eine von Microsoft entwickelte Technologie, um das proprietäre Component Object Model (COM), ebenfalls von Microsoft entwickelt, über Netzwerk kommunizieren zu lassen. COM ist ebenfalls eine von Microsoft entwickelte Technologie, um Interprozesskommunikation zu ermöglichen. Die COM Objekte bieten Schnittstellen und können als DLLs oder Executables vorliegen. Da beide Technologien Eigenentwicklungen von Microsoft sind, werden diese auch nur von Microsoft eingesetzt. Es sind auch Adapter, z.B. JCOM, verfügbar, die eine Schnittstelle zwischen Java und DCOM herstellen.[3] 2.2 Relevante Techniken 2.2.1 Webservices Ein Webservice ist ein plattformunabhängiger Dienst, mit dem Zweck anderen Diensten Informationen und Funktionen zur Verfügung zu stellen. Die Kommunikation erfolgt über ein Netzwerk unter der Verwendung von Protokollen wie HTTP oder SOAP. Die Dienste arbeiten nach dem Frage Antwort Prinzip. Es lassen sich dadurch plattform- bzw. Orts unabhängige Dienste lose miteinander koppeln und wie ein Gesamtsystem erscheinen lassen. Ein Vorteil ist, dass man schnell auf sich verändernde Gegebenheiten reagieren kann. Fallen einzelne Dienste aus, so kann das Gesamtsystem m. E. weiter betrieben werden. Eine Nachteil ist ein Verwaltungsoverhead, der notwendig ist, um die Dienste miteinander kommunizieren zu lassen.[4] 2.2.2 SOAP Simple Object Access Protocol (SOAP) ist eine auf XML basierende Definition für den Austausch von Nachrichten. Die Nachrichten können frei definiert sein (Messages) oder einem vorgegebenem Aufbau folgen (Remote Procedure Calls). Die Übertragung der SOAP Nachricht kann mit jedem beliebigen Protokoll erfolgen, in der Praxis hat sich der Transport via HTTP durch gesetzt.[5] 2.1.1 CORBA 6 Möglichkeiten_der_Server-neutralen_Implementierung_von_Anwendungen 2.2.3 XML Die Extensible Markup Language (XML) ist eine abstrakte Beschreibungssprache für Dokumente und im allgemeinen Daten. Die Daten werden mit Hilfe von Tags beschrieben und mit Werten versehen, z.B. <tag>Wert</tag>. Hierbei findet eine hierarchische Gliederung statt, d.h. es werden Tags ineinander verschachtelt und somit Strukturen aufgebaut. 3 Plattformen Es existieren zwei konkurrierende Technologien. Zum einen die .NET Plattform von Microsoft und zum anderen die J2EE basierten Server. 3.1 .NET Framework Das .Net Framework wurde von der Firma Microsoft definiert und Entwickelt. Mit diesem Framework können Client-Server, Web-, Server und mobile Anwendungen entwickelt werden. Aktuell werden 30 Programmiersprachen unterstützt[6]. Zum .NET Framework zählen im Sprachgebrauch die Laufzeitumgebung, die API, die Entwicklungsumgebung Visual Studio .NET und das .NET Software Development Kit (SDK). 3.1.1 Konzept Die elementare Grundlage des .Net Frameworks ist die Common Language Infrastructure (CLI). Die CLI wurde im Jahr 2000 von Microsoft, Intel und Hewlett Packard entwickelt und 2001 durch die ECMA, eine private internationale Normungsorganisation (für Informations-, Kommunikationssysteme und Unterhaltungselektronik), international als ECMA 335 Standard verabschiedet[7]. Somit können Hersteller bei vorhandenem Interesse eine Implementierung einer Runtime für eine beliebige Geräteklasse umsetzen. Die Umsetzung der CLI wird in der Common Language Runtime (CLR) realisiert. Die CLR kapselt den Just in Time (JIT) Compiler , die Code-, Fehler und Speicherverwaltung. So wird u.a. der Speicher mit Hilfe eines Garbage Collectors realisiert. Außerdem ist in der CLR ein einheitliches System von Datentypen implementiert, das Common Type System (CTS). Die erstellten Anwendungen werden nicht direkt in Maschinensprache umgesetzt, sondern in eine Zwischensprache, die Microsoft Intermediate Language (MSIL), umgesetzt. Hier besteht eine Analogie zu dem Konzept von Sun mit der Java Plattform. Somit ist die Voraussetzung gegeben, dass eine .NET Runtime für ein beliebiges Zielsystem implementiert werden kann. Aktuell existieren Implementierungen von Microsoft für Windows PCs (.NET Framework), für Windows Mobile und Windows CE (.NET Compact Framework) und für embedded Systeme (.NET Micro Framework). Daneben existiert eine alternative Implementierung, das Projekt Mono von der Firma Ximian initiiert und von Novell nach dem Aufkauf der Firma fortgeführt wird. Damit kann das .NET Framework auf Unix und Mac OS X Umgebungen ausgeführt werden. Das Software Development Kit (SDK) wird nur von Microsoft zur Verfügung gestellt, als Entwicklungsumgebung wird das Microsoft Visual Studio .NET angeboten. Es können aber auch alternative Entwicklungsumgebungen für die Sprachen ASP, VBA, WSH, C++, C# genutzt werden. Es werden auch auch VisualBasic.NET, Microfocus und Delphi8 unterstützt. Java ist kein Bestandteil von .NET[8] Das .NET Framework bietet eine Vielzahl von Klassen für die objektorientierte Entwicklungen. Es können auf Basis des .Net Frameworks verschiedene Arten von Anwendungen erstellt werden, z.B. Windowskonsolen-, Webanwendungen, Services oder Webservices. 3 Plattformen 7 Möglichkeiten_der_Server-neutralen_Implementierung_von_Anwendungen Das .NET Framework besteht aus zwei Hauptbestandteilen und als Plattform wird ein Windows Betriebssystem voraus gesetzt. Die beiden Hauptbestandteile sind zum einen die Common Language Runtime (CLR) und zum anderen die .NET Framework-Klassenbibliothek (Framework Class Library (FLC)). Die CLR ist eine virtuelle Maschine welche den Bytecode des .NET Programmes ausführt. Beim Kompilieren von .NET Quelltext wird Objektcode erzeugt. Dieser Objektcode wird dann lokal über die Runtime ausgeführt. Es werden von der CLR Basisfunktionen wie Speicherverwaltung (Garbage Collection), Threadverwaltung und Exceptionhandling bereitstellt. Von diesen Verwaltungsaufgaben ist der Programmierer somit entbunden. [9] Als Produkt der Entwicklung entstehen so genannte Assemblies. Dies ist die "kleinste verteilbare Einheit in .NET"[10]. In diesem Assemblies sind Informationen über den Quellcode im Manifest und weitere referenzierte Assemblies hinterlegt. Unter den Windows Betriebssystemen liegen die Assemblies als exe Dateien bzw. unter Unix als Binaries vor. Des Weiteren können auch nicht ausführbare Assemblies erzeugt werden. Diese liegen dann als statische bzw. dynamische DLLs (Dynamic Link Library) vor. Des Weiteren findet zur Laufzeit eine Unterscheidung zwischen Managed und Unmanaged Assemblies statt. Bei Managed Code wird während der Laufzeit über Zugriffsbeschränkungen entschieden. 3.1.2 Common Language Runtime Die Common Language Runtime ist die Laufzeitumgebung für .NET Anwendungen. Durch den offenen Standard kann die .NET Common Language Runtime theoretisch auf ein beliebiges Betriebssystem aufsetzen. Aktuell liegen Implementierung für verschiedene Windows Versionen (Server, Workstation, mobile Endgeräte), FreeBSD und Linux (Projekt Mono) vor. Auf Basis der CLR können verschiedene Programmiersprachen ausgeführt werden. Die CLR stellt, ähnlich wie die Java Virtuelle Maschine, einige Dienste zur Verfügung. Als wichtigste Merkmale sind die Sicherheit, das Sandbox Prinzip und die Garbage Collection zu erwähnen. Die CLR setzt die Common Language Infrastructure (CLI) um. Die CLR von .NET dient für mehrere Programmiersprachen als Laufzeitumgebung. Dies ist ein Alleinstellungsmerkmal gegenüber der Java Runtime. Grundlage dafür ist das Common Type System (CTS), welches die Datentypen von allen Programmiersprachen in die gemeinsamen Datentypen der CLR umsetzt. Die grundlegende Voraussetzung dafür ist aber, dass für die gewünschte Programmiersprach ein Kompiler vorliegt, welcher die Erzeugung von .NET Kompilaten unterstützt. Damit die CLR die Kompilate ausführen kann müssen ein paar Randbedingungen eingehalten werden. So muss ein .NET Assemblie erzeugt werden, damit die CLR die Klassen laden und den Bytecode generieren kann. Dies ist im klassischen Sinne ein Binary, eine ausführbare Datei. Des Weiteren muss das Assemblie eine eindeutige Versionsnummer erhalten und mit dem Public Key des Herstellers signiert werden. Das eigentlich Ausführen der Assemblies wird durch den Classloader realisiert. Nachdem der die Assemblies verifiziert wurden (Verifier) führt der Classloader den Bytecode aus und dieser wird dann intern in Maschinencode übersetzt[11]. 3.1.3 Intermediate Language Wie im Kapitel zur CLR beschrieben, können Assemblies verschiedener Programmiersprachen mit der CLR ausgeführt werden. Damit dies technisch möglich ist, haben die verschiedenen Programmiersprachen eine gemeinsame Grundlage, eine Zwischensprache welche als Intermediate Language (IL) bezeichnet wird. Mit Hilfe der Programmiersprachen spezifischen Compiler wird der Quellcode in die IL Sprache übersetzt, neben den Meta Informationen in das Assemblie gepackt und kann dann mkit der CLR ausgeführt werden. Vor der Ausführung wird die IL in Maschinencode umgesetzt und kann dann auf dem Zielsystem ausgeführt werden. Wie der gesamte Prozess von dem Schreiben des Quelltextes, dem Kompilieren mit einem .NET fähigen Kompiler und der Ausführung durch die CLR erfolgt ist in Abbildung 1 zu sehen. 3.1.1 Konzept 8 Möglichkeiten_der_Server-neutralen_Implementierung_von_Anwendungen Abbildung 1 : .NET - Schritte vom Quelltext zum Maschinencode 3.1.4 Programmierung 3.1.4.1 API Der zweite Bestandteil des .NET Frameworks ist die eigentliche API (Application Programming Interface). Die FLC bietet eine Vielzahl an Klassen- und Bibliotheken. Diese decken sowohl Grundfunktionalitäten, wie auch grafische Benutzeroberflächen, .NET Remoteting bis hin zu Web Forms und XML-Webdiensten ab. Aus dieser API kann sich der Entwickler bedienen. Auf den allgemeinen Basisklassen bauen die .NET Klassen, XML und die verschiedenen Ausprägungen der Forms auf. Die zwei Module ASP.NET und ADO.NET werden in zwei getrennten Unterpunkten genauer betrachtet. [12] Der Ablauf von .NET Programmen kann auf zwei unterschiedliche Arten vonstattengehen. Zum einen überwacht durch die CLR und zum anderen nicht überwacht. Wird der ablaufend Code durch die CLR überwacht wird dieser als managed/verwalteter Code bezeichnet. Nicht überwachter Code wird als unmanaged/nicht verwalteter Code definiert. In einigen Fällen kann es sinnvoll sein, Quellcode nicht überwacht ablaufen zu lassen, z.B. wenn ein Treiber programmiert und die Windows API und nicht de FLC genutzt werden soll. 3.1.4.2 ASP.NET Active Server Pages (ASP).NET ist eine Technologie zum Erstellen von Webanwendungen auf Basis des Microsoft-.NET-Frameworks. Es ist die Nachfolge der ASP Technologie von Microsoft, welche 1996 veröffentlicht wurde. Unter der Bezeichnung ASP.Net werden eine Vielzahl von Klassen für die Entwicklung von Webanwendungen zusammengefasst. Somit stehen dem Entwickler eine Vielzahl von Klassen zur Implementierung zur Verfügung, ohne sich auf eine bestimmte Programmiersprache festlegen zu müssen. Es wird HTML und ASP.Net Quellcode in einer Datei gemischt. So erfolgt eine Bündelung verschiedener Skript- und Programmiersprachen. So können ASP.Net Webseiten mit Hilfe von C#, VB.Net, Perl, PHP ... etc. erstellt werden[13]. Ein entscheidender Vorteil von ASP.Net gegenüber anderen Sprachen für Webanwendungen ist, dass ASP.Net kompiliert wird und nicht erst zur Laufzeit interpretiert und in Maschinensprache übersetzt werden muss, wie es z.B. bei PHP der Fall ist. 3.1.4.3 ADO.NET ADO steht für ActiveX Data Objects und "ist ein Client-seitiger Cache"[14]. Es stellt aus Programmiersicht eine Abstraktionsschicht in dem .NET Framework dar, welche auf Grundlage von einer Datenquelle abstrahiert. Es wird mit einer Datenquelle gearbeitet, diese kann aber im Hintergrund auf verschiedene Datenquellen zugreifen. Dabei handelt es sich um eine verbindungslose Datenbankarchitektur[15]. Als Datenquellen werden in diesem Zusammenhang sowohl Datenbanken als auch andere Formate, z.B. XML Dateien, verstanden. Dieser Zugriff kann parallel erfolgen und das Ergebnis wird durch die ADO.NET Klassen als eine Ergebnistabelle repräsentiert. 3.1.3 Intermediate Language 9 Möglichkeiten_der_Server-neutralen_Implementierung_von_Anwendungen Die aus den Datenquellen geladenen Daten werden für jeden Client (Prozess) geholt und pro Client zwischengespeichert. Jeder Client hat seinen eigenen Zwischenspeicher. Wenn mit den Klassen von ADO.NET programmiert werden soll muss hierfür der Namespace System.Data verwendet werden. 3.1.5 Verfügbare Laufzeitumgebungen Da das .NET Framework von Microsoft selbst entwickelt wurde gibt es die breite Unterstützung im vollem Umfang nur für die Microsoft Produktpalette. So werden für den Internet Information Server, den Datenbank SQL Server und sämtliche Microsoft Server Betriebssysteme (Server 2003, 2008) .NET Runtimes angeboten. Diese umfassen das .Net Framework Windows (XP, Vista, Server), .Net Mobile und .Net Micro (embedded). Daneben hat Microsoft das Projekt ROTOR aufgesetzt, welches eine Implementierung für Win2000, FreeBSD für akademische Zwecke zur Verfügung stellt. Die kommerzielle Nutzung ist untersagt[16]. Daneben existieren mehrere freie Implementierungen. Des Weiteren ist das Projekt Mono erwähnen. Initiiert durch die Firma Ximian und dessen Gründer Muguel de Icaza entstand und weiter fortgeführt durch die Firma Novell. Des Weiteren gibt es noch das DotGNU Projekt, welches eine Implementierung für Windows, Linux und Solaris bereit stellt[16]. 3.2 J2EE/Java EE Java ist eine objektorientierte Programmiersprache, die 1996 (Release JDK 1.0) von Sun Microsystems auf den Markt gebracht wurde. 1991 wurde eine Projektgruppe namens "Green Projekt" gebildet, die sich zunächst mit den kommenden Trends der Computertechnologie auseinander setzen sollte. Mitarbeiter dieser Projektgruppe waren Mike Sheridan, Patrick Naughton und James Gosling. Die unterschiedlichen Anstrengungen eine Programmiersprache zu entwerfen, die objektorientiert, klein, plattformunabhängig und robust ist, haben zunächst zu der Programmiersprache OAK geführt, die später aus markenrechtlichen Gründen in Java umbenannt wurde.[17] "J2EE (Java EE) ist das am weitesten verbreitete Betriebssystem für Webanwendungen" [18] Java EE ist weniger ein einzelnes Produkt, sondern vielmehr eine Zusammenstellung von Technologien und Spezifikationen. Java EE ermöglicht es stabile, portable und sichere Business Anwendungen zu entwerfen. Die Technologien und Spezifikationen werden von kommerziellen Anbietern oder der OpenSource Gemeinde genutzt, um eigenen Implementationen zu entwickeln. Der Kern von Java EE ist ein modulares und komponentenbasiertes System, das über Schnittstellen miteinander verbunden ist.[18] Version 1.0 der Java 2 Platform Enterprise Edition ist im Dezember 1999 von Sun auf den Markt gebracht worden. Im Mai 2006 wurde J2EE in Java Platform, Enterprise Edition (Java EE) umbenannt und stellt Version 6 dar. "The major theme for the next version of Java EE is ease of development." [19] Mit der aktuellen Version 6 soll die Entwicklung von komplexen Enterprise Anwendungen vereinfacht und beschleunigt werden. Viele J2EE Entwickler haben den Wunsch nach vereinfachter Entwicklung an Sun herangetragen. Sun's Antwort darauf ist eine erhebliche Vereinfachung im Entwicklungsprozess, die im Java Specification Request (JSR) 175 (A Metadata Facility for the JavaTM Programming Language) beschrieben ist. Die neue Kerntechnologie ermöglicht es Entwicklern viele Spezifikationsaufgaben im Code erheblich abzukürzen. Deklarationen die vorher in vielen zusätzlichen Dateien gepflegt werden mussten, werden nun direkt im Java Code durch sog. Annotations eingefügt. Bei Deployment der Anwendung im Server werden anstelle der zusätzlichen Konfigurationsdateien die Annotations direkt aus dem Code verwendet.[19] 3.1.4.3 ADO.NET 10 Möglichkeiten_der_Server-neutralen_Implementierung_von_Anwendungen Daraus kann man ableiten, dass eine Server-neutrale Implementierung durch die letzten Optimierungen seitens Sun aufwendiger wird. Später in dieser Kapitel wird deutlicher warum der Aufwand steigt. Im Folgenden soll auf die einzelnen Komponenten der Java EE Plattform eingegangen werden. Java EE Versionen Veröffentlichungsdatum Version Ausführlicher Name Dezember 1999 1.0 Java 2 Platform Enterprise Edition, v 1.0 2000 1.2 Java 2 Platform Enterprise Edition, v 1.2 23. Mai 2000 1.2.1 Java 2 Platform Enterprise Edition, v 1.2.1 24. September 2001 1.3 Java 2 Platform Enterprise Edition, v 1.3 24. November 2003 1.4 Java 2 Platform Enterprise Edition, v 1.4 11. Mai 2006 5 Java Platform, Enterprise Edition, v 5 Tabelle 4 3.2.1 Konzept Abbildung 2:Distributed Multitiered Applications[20] Die in Abbildung 2 dargestellte Architektur ist die Basis einer verteilten mehrschichtigen Anwendung. Die Anwendungslogik ist entsprechend ihrer Funktion auf mehreren Schichten verteilt. Die unterschiedlichen Schichten können durchaus auf mehreren autarken Systemen installiert sein. In Abbildung 2 sind zwei Anwendungen (Java EE Application 1 und Java EE Application 2) dargestellt, die auf die verschiedenen Schichten aufgeteilt wurde.[21] 3.2 J2EE/Java EE 11 Möglichkeiten_der_Server-neutralen_Implementierung_von_Anwendungen 3.2.1.1 Client Tier Komponenten die auf dem Client System laufen nennt man Client-Tier-Components. Als Komponenten bezeichnet man Software, die nicht eigenständig lauffähig ist und in die Gesamtarchitektur integriert werden müssen. Der Client kann entweder ein Web-Client oder eine eigenständige Java Application sein. Die Java EE Spezifikation legt eindeutig fest welche Komponenten als Client-Komponenten bezeichnet werden.[21] • Application Clients • Web Clients (Applets) Ein Webclient besteht aus zwei Teilen. Die Webschicht (Servlet) erzeugt Informationen, die an den Webclient übermittelt werden. Der Webclient (Browser) wertet die Informationen aus und zeigt das Ergebnis an. Es ist zu Vergleichen mit dem Request-Response Verfahren. Man nennt den Webclient auch "Thin Client", weil er ausschließlich Anfragen an die Webschicht schickt und auf eine Antwort wartet. Der Webclient führt normalerweise keine Datenbankzugriffe oder komplexe Logik aus. Informationen, die an den Webclient geschickt werden, können aber komplexe Logik in Form eines Applets enthalten. Ein Applet ist ein kleines Java Programm, das in der Java Virtual Machine (JVM) der Browsers ablaufen muss. Der Browser führt dieses kleine Java Programm in einer sog. Sandbox aus.[21] Wird komplexere Logik oder ein ausgereifteres User Interface auf dem Clientsystem benötigt, so entwickelt man meist eine eigenständige Anwendung (Fat Client). Ist die Hyper Text Markup Language (HTML) nicht mehr ausreichend, um die Anforderungen an die Anwendung abzudecken, so kann man zu diversen anderen Darstellungstoolkits wie SWING oder das Abstract Window Toolkit (AWT) greifen. Es wird eine Anwendung entwickelt, die mit der Webschicht des Servers kommuniziert. [21] 3.2.1.2 Web Tier Komponenten der Webschicht sind Java Server Pages (JSP) oder Java Servlets und generieren zur Laufzeit statische Inhalte wie HTML, die in einem Browser angezeigt werden können. Diese Komponenten laufen in dem Server ab. JSPs sind HTML Dokumente die Java Code enthalten. Servlets sind Java Klassen die HMTL Code enthalten.[22] JSPs und Servlets setzten einen Servlet-Container voraus, der meist im Java EE abläuft. Besonders zu erwähnen ist eine Technologie, die in Java EE 5 Einzug gehalten hat. Java Server Faces (JSF) ist ein Framework, das die Entwicklung von webbasierten User Interfaces (UI) erleichtert. Das Framework stellt umfangreiche Methoden zur Entwicklung eines UI bereit, die nah an die Möglichkeiten eines Fat Clients heranreichen.[23] 3.2.1.3 Business Tier Die sog. Geschäftslogik enthält gekapselte Programmlogik, die die Geschäftsprozesse abbildet. Sie wird in Enterprise Java Beans (EJBs) gekapselt. EJBs werden zur Laufzeit im Java EE Server im Bean Container verwaltet und sind über Schnittstellen ansprechbar. Der Server übernimmt alle Verwaltungstätigkeiten, wie der Instanziieren oder Zerstören von EJBs. EJBs müssen eine Fülle von Funktionen abdecken und erfordern bei der 3.2.1.1 Client Tier 12 Möglichkeiten_der_Server-neutralen_Implementierung_von_Anwendungen späteren Portabilitätsbetrachtung eine besondere Aufmerksamkeit.[21] 3.2.1.4 Enterprise-Information-System Tier Die Datenhaltungsschicht deckt alle Anforderung an die Datenhaltung der Anwendung ab. Zum Einsatz kommen hier entweder Datenbanken oder andere Systeme die Daten persistent speichern können. Enterprise Resource Planning (ERP) Systeme wie auch Legacy Systeme können hier in die verteilte Architektur Einzug halten. Durchaus denkbar ist auch der Betrieb der Datenhaltungsschicht auf dem System, auf dem auch die Geschäftslogik läuft. Grundsätzlich sind die Systeme getrennt und kommunizieren miteinander über ein Netzwerk. [20] 3.2.1.5 Container Der Container in einem Application Server beinhaltet, jene Laufzeit-Komponenten, welche als Schnittstelle zu den niedrigeren Platform spezifischen Funktionen fungieren. Während der Entwicklung muss für eine Komponente, die bspw. auf eine Datenbank zugreift, festgelegt werden, ob eine Transaktionssteuerung verwendet werden soll und wenn ja welche. Auch kann hier festgelegt werden auf welche Ressourcen ein autorisierter Benutzer zugreifen darf.[24] Container spielen in unserer Betrachtung eine besondere Rolle, weil Portabilität nur dann gewährleistet werden kann, wenn die Arbeitsweise der Container von unterschiedlichen Application Server die gleiche ist. 3.2.2 API 3.2.2.1 Assembling 3.2.1.3 Business Tier 13 Möglichkeiten_der_Server-neutralen_Implementierung_von_Anwendungen Abbildung 3:Application Packaging[25] In Abbildung 3 ist die Verzeichnisstruktur dargestellt, nach der eine Java EE Anwendung aufgebaut sein muss. Diese Verzeichnisstruktur wird in eine JAR-Datei komprimiert verpackt und mit der Dateiendung ".EAR" (Enterprise Archive) versehen. Die Zusammenstellung der verschiedenen Komponenten in ein Enterprise Archive (EAR) bietet eine hohe Flexibilität. Einmal entwickelte Komponenten (EJBs) können so wiederverwendet werden. Das EAR-File enthält zudem auch Konfigurationsdateien im Extensible Markup Language (XML) Format, in denen das Zusammenspiel der Komponenten konfiguriert wird. Diese Konfigurationsdateien (application.xml) nennt man Deployment Descriptoren, die vom Application Server beim Start ausgewertet werden. Es gibt zwei Typen von Deployment Descriptoren. Der Java EE Deployment Descriptor enthält alle Einstellungen bezüglich der Java EE Platform. Der Laufzeit Deployment Descriptor beinhaltet alle Einstellungen für die Java EE Spezifische Implementation. Das ist z.B.: der Application Server. [26] Zudem enthält das "EAR-File" weitere Komponenten. Die Unterverzeichnisse EJB-Module, Web Module, Application Client Module, Resource Adapter Module enthalten die eigentliche Anwendungslogik. In diesen Verzeichnissen liegen die Komponenten aus der eine Anwendung besteht.[26] 3.2.2.2 Übersicht 3.2.2.1 Assembling 14 Möglichkeiten_der_Server-neutralen_Implementierung_von_Anwendungen Abbildung 4:Java EE Apis[27] In Abbildung 4 wird dargestellt, welche Standard Apis von der Java EE Platform mitgeliefert werden. Portabilität erfordert die ausschließliche Verwendung dieser Apis bei der Entwicklung einer Java EE Applikation.[26] Werden von der Java EE Anwendung zusätzliche Fremd-Apis verwendet (bspw. Fehler-Logging mit den LOG4J Klassen), so muss vor Portierung der Anwendung geprüft werden, ob diese Klassen auf der Zielplattform lauffähig sind.[26] EJBs sind Software Komponenten, die ausschließlich in einem Application Server lauffähig sind. Besonders hervorzuheben ist die Möglichkeit diese Komponenten wiederzuverwenden. Unterschieden wird zwischen: • Session Beans und • Message Driven Beans. Session Beans dienen dazu eine Benutzersession persistent zu machen. Als Beispiel ist hier der klassische Warenkorb in einem Onlineshop zu nennen.[26] Message Driven Beans dienen dazu auf Ereignisse zu horchen, um darauf zu reagieren. Tritt ein Ereignis ein, so wird die Message Driven Bean aktiv und führt die Programmlogik aus.[26] 3.2.2.2 Übersicht 15 Möglichkeiten_der_Server-neutralen_Implementierung_von_Anwendungen 3.2.3 Verfügbare Server Abbildung 5:Application Server Platforms Based On Java EE[28] Forrester hat 2007 in einer Studie festgestellt, welche Teilnehmer sich den Markt der Java EE Application Server teilen. In Abbildung 5 ist dargestellt wie stark die Position der Anbieter ist. Diese Gegenüberstellung bezieht sich auf die Java EE Server der einzelnen Anbieter. Kriterien der Gegenüberstelllung sind: • Current Offering: Auf dem Makrt befindliche Produkte dieses Herstellers • Strategy: Preis des Produktes, Unternehmensstrategie, Produktstrategie • Market Presence: Anzahl Kundeninstallationen, Kundenservices[29] Marktführer sind Oracle und IBM, die sich deutlich von den anderen Anbietern absetzen.[30] 3.2.3 Verfügbare Server 16 Möglichkeiten_der_Server-neutralen_Implementierung_von_Anwendungen 3.2.4 Java EE Compatibility & Java Verification [31] "Write Once, Run Anywhere" Portabilität ist einer der attraktivsten Aspekte, den die Java Platform mitbringt.[32] Das bedeutet, dass ein Java-Programm auf jeder Plattform, für die es eine Java Virtual Machine gibt, ohne Anpassung lauffähig ist.[31] Diese bedeutende Eigenschaft verspricht Sun auch für die Java Enterprise Edition, wenn die Enterprise Anwendung bestimmte Anforderungen erfüllt. Java EE Compatibility & Java Verification ist ein Paket an Maßnahmen seitens Sun, um Enterprise Anwendungen auf Plattformunabhängigkeit zu überprüfen. In diesem Kontext bedeutet Plattformunabhängigkeit nicht Portabilität über Betriebssystem-Grenzen hinweg, sondern Portabilität über alle Java EE konformen Application Server. Für Unternehmen bedeutet das einen verringerten Aufwand in der Entwicklung von Enterprise Anwendungen und Investitionsschutz. Die Unabhängigkeit von einem Plattform Lieferanten verspricht eine verbesserte Verhandlungsposition und fördert den Wettbewerb. 3.2.4.1 Application Verification Kit for the Enterprise Sun hat ein Toolkit entwickelt[31], das überprüft, ob eine Enterprise Anwendung den Anforderungen der Portabilität gewachsen ist. Das Toolkit überprüft, ob die Enterprise Anwendung die Java Enterprise Apis korrekt nutzt und, ob die Enterprise Anwendung auf allen Java Enterprise Application Server lauffähig ist.[31] Mit einer Ausnahme ist keine Anpassung an der Enterprise Anwendung notwendig. Zur Überprüfung der Portabilität wird die Sun Java System Application Server Platform Edition 9 benötigt, die einen eigenen Application Server mitbringt. Die Application Server spezifischen Deployment Descriptoren müssen daher vorher an die des Sun eigenen Application Server angepasst werden.[32] Das Tooolkit kann frei von der Website http://java.sun.com/j2ee/avk/ von Sun heruntergeladen werden und ist für die Versionen Java EE und J2EE verfügbar. Es ist auf den folgenden Platformen lauffähig.[31] • Sun Solaris 9 and 10 (SPARC), Solaris 9 and 10 (x86) • 64-bit Sun Solaris 10 (SPARC, x86) • Red Hat Enterprise Linux 3.0 Update 1 and 4.0 3.2.4 Java EE Compatibility & Java Verification 17 Möglichkeiten_der_Server-neutralen_Implementierung_von_Anwendungen • Windows 2000, Windows 2000 Advanced Server, Windows Server 2003, Windows XP Pro Das Java EE 5 Verification Toolkit überprüft u. a die korrekte Anwendung aller neuen Java EE 5 Technologien:[31] • Enterprise JavaBeans (EJB) 3.0 • JAXB 2.0 • Java Persistence • JavaServer Faces (JSF) 1.2 • JavaServer Pages (JSP) Standard Tag Library (JSTL) 1.2 • Streaming API for XML (StAX) • Web Services Metadata • Java API for XML based Web Services 2.0 (JAX-WS 2.0) Features Mit dem Toolkit wird der Sun Java System Application Server PE 9 mitgeliefert, welcher den Java EE 5 Spezifikation entspricht. Die neue Version des Java EE 5 AVK verspricht überdies eine vereinfachte Bedienung und erweiterte Features, wie das Überprüfen einzelner Anwendungen im Server. Vorher war nur eine gesamte Überprüfung aller installierten Anwendungen gleichzeitig möglich. Desweiteren werden die Überprüfungs-Ergebnisse nun während der Laufzeit zur Verfügung gestellt. Erweiterte Kommandozeilen Tools stehen nun auch zur Verfügung. Das Application Server Migration Tool 2.0, das Bestandteil des Java EE AVK ist, hilft dabei Enterprise Anwendungen, die für andere Application Server entwickelt wurden, auf den Überprüfungsprozess vorzubereiten.[31] Das Java EE 5 AVK prüft den zu scannenden Code auf properitären Code. Es überprüft ob, die Java Archive den Java EE Spezifikationen entsprechen und konvertiert Anwendungs-Server spezifische Deployment Descriptoren.[33] Mit properietärer Code sind Funktionen gemeint, die über den Funktionsumfang von Java EE hinausgehen. Beispiel: Wird von den IBM Websphere Application Server 6 eigenen Scheduler Klassen Gebrauch gemacht, so ist der Code nicht mehr auf anderen Application Servern lauffähig. Der Scheduler Service wird ausschließlich im Websphere Application Server angeboten und setzt einen Scheduling Deamon voraus.[34] Der Scheduling Service von IBM im Websphere Application Server ist ein Scheduler, der Tasks zu einer bestimmten Uhrzeit im Server ausführt.[34] Voraussetzungen Folgende Software wird auf dem System, auf dem das Java EE AVK eingesetzt werden soll, vorausgesetzt: Java Platform Standard Edition Development Kit kurz JDK der Version 5.0 Update 6 oder höher. Ferner wird der Sun Java System Application Server Platform Edition 9 benötigt.[32] Einschränkungen Eine Java Enterprise Anwendung ist eine Komposition aus mehreren Modulen(siehe Abbildung 3). Jedes Modul enthält mindestens einen Deployment Descriptor. Zu beachten ist, dass das Java EE 5 Verification Toolkit zur 3.2.4.1 Application Verification Kit for the Enterprise 18 Möglichkeiten_der_Server-neutralen_Implementierung_von_Anwendungen Zeit keine RAR-Module (Resource Adapter) überprüfen kann.[32] Prüfumfang/Testkriterien Ein guter Programmierstil zeichnet sich dadurch aus, dass unabhängig von der eigentlichen Kernlogik auch zusätzlicher Code in die Programme fließt. So fließen Testmethoden, Debugmethoden oder Exceptionhandling in die Programme mit ein, die schwer bis gar nicht zu evaluieren sind. Um die Testfähigkeit und Flexibilität zu erhalten, hält Sun eine Testabdeckung von mindestens 80% aller Methoden in dem Programm für anstrebenswert. Die Testabdeckung kann an die jeweiligen Gegegebenheiten angepasst werden.[31] Im Folgenden sind die einzelnen Testkriterien aufgeführt.[32] • EJB Komponenten ♦ Alle statischen Tests müssen erfolgreich durchgeführt werden ♦ Mindestens 80% aller Business-Methoden müssen ohne System Exceptions ausgeführt werden • Web Komponenten ♦ Alle statischen Tests müssen erfolgreich durchgeführt werden ♦ Alle Servlets und JSPs müssen ohne Kompilierungs-Fehler und Runtime-Fehler ausgeführt werden ♦ Alle JSPs müssen die Endung .jsp haben oder müssen im entsprechenden Deployment Descriptor deklariert sein ♦ Alle Servlets müssen ein Mapping on der web.xml haben Prüfprozess An einem theoretischen Überprüfungsprozess soll skizziert werden, wie eine Enterprise Anwendung auf Portabilität überprüft wird.[32] 1. Installation des JAVA EE AVK auf dem Testsystem 2. Statische Prüfung des Anwendungscodes, mittels dem Tool Ant 1. Konfigurieren und Anpassen von Java EE AVK an die zu prüfende Anwendung 2. Ausführung des Tools Ant 3. Dynamische Prüfung des Anwendungscodes 1. Vorbereitung der Anwendung zum Betrieb im Application Server 2. Starten der Anwendung im Application Server 3. Ausführung des Anwendungsspezifischen Codes, mittels Benutzung der Anwendung 4. Ausführung des Reporting Tool 4. Auswertung der Ergebnisse Ergebnis Das Ergebnis ist ein Report, der aus zwei Teilen besteht. Zum einen wird aufgelistet welche EJB-Methoden aufgerufen wurden und ob eine Testabdeckung von 80% erreicht wurde. Zum anderen werden alle getesteten Web-Komponenten aufgelistet.[32] 3.2.4.1 Application Verification Kit for the Enterprise 19 Möglichkeiten_der_Server-neutralen_Implementierung_von_Anwendungen 3.2.4.2 Java Powered for the Enterprise Programm Abbildung 6:Java Powered for the Enterprise Logo[35] Unternehmen, die J2EE Lösungen wie z.B.: Application Server entwickeln, können an dem "Java Powered for the Enterprise Programm" teilnehmen, um sich von Sun zertifizieren lassen. Die Zertifizierung bestätigt, dass die angebotene Lösung allen Ansprüchen an die Portabilität von Sun entspricht. Die Zertifizierung so verspricht Sun kann genutzt werden, um sich am Markt von anderen Lösungen abzuheben. Kunden können an dieser Zertifizierung erkennen, dass die angebotene Lösung den Ansprüchen an Portabilität von Sun entspricht. Ab Version Java EE 5 wird dieses Programm von Sun allerdings nicht weiter fortgesetzt. Nun ist jeder dazu berechtigt sein Produkt mit diesem Logo zu schmücken.[31] J2EE Zertifizierte Anbieter[36] Apache Software Foundation ATG Borland Corp. Caucho Technology, Inc. Fujitsu IBM JBoss Group Hewlett-Packard IONA Technologies Kingdee Middleware NEC Nokia ObjectWeb SAP Sonic Software Corporation Sybase, Inc. TongTech Co., Ltd Oracle Corporation SAS Institute, Inc. SpiritSoft TIBCO Software Inc. Trifork Technologies Tabelle 1 BEA Systems DataDirect Technologies Hitachi IronFlare Macromedia (Novell) SilverStream Pramati SeeBeyond Sun Microsystems Tmax Soft webMethods Diese Entwicklung ist folgenden Umstand geschuldet. Anbieter von großen J2EE Platformen haben ein großes Interesse daran sich nicht auschließlich durch die Zertifizierung von Sun vom Markt abzuheben. Sie müssen weitere Alleinstellungsmerkmale entwickeln. Große Anbieter wie IBM bieten neben einer J2EE Platform eine Reihe von anderern Technologien an. Ist der Kunde in der Lage viele dieser angebotenen Technologien miteinander zu kombinieren, so entsteht für den Kunden ein Mehrwert. IBM bietet zu seiner Websphere Application Server Platform auch eine Reihe kompatibler Produkte wie eine Entwicklungsumgebung http://www-01.ibm.com/software/awdtools/developer/application/ oder eine Enterprise Messaging Platform http://www-01.ibm.com/software/de/websphere/mq/ mit an. Die Kombination der J2EE Platform mit weiteren Hersteller spezifischen Technologien geht aber stark zu Lasten der Portabilität. Eine Enterprise Anwendung die im Rational Application Developer for WebSphere Software (die Entwicklungsumgebung von IBM für den Websphere Application Server) entwickelt wurde ist nur mit großem 3.2.4.2 Java Powered for the Enterprise Programm 20 Möglichkeiten_der_Server-neutralen_Implementierung_von_Anwendungen Aufwand auf einen anderen von Sun zertifizierten Application Server portierbar. "Is integrated and optimized for IBM WebSphere® Application Server and IBM WebSphere Portal Server products and includes test environments for these products."[37] 4 Schlussbetrachtung 4.1 Ergebnisse 4.1.1 Java Im Folgenden soll eine Zusammenfassung zeigen, welche Teildisziplinen in der Java-Anwendungslandschaft beleuchtet wurden. Die Architektur der gesamten Anwendungslandschaft nimmt erheblichen Einfluss auf ihre Einzel-Komponenten. Die Komponenten teilen sich ein Netzwerk, um miteinander kommunizieren zu können. Sie greifen auf eine gemeinsame Datenbasis zu oder sie sind nach einheitlichen Sicherheitsstandards entworfen. Soll eine Anwendung auf Portabilität untersucht werden, so müssen zwangsläufig alle mit ihr in Relation stehenden Komponenten betrachtet werden. Ist die Zielplattform mit einer anhängigen Komponente nicht kompatibel so entsteht Anpassungsaufwand. Ein Programm, das in Java geschrieben ist, ist generell ohne Anpassungsaufwand plattformunabhängig. Eine Java EE Anwendung besteht hingegen aus vielen Teilen, die über Schnittstellen miteinander kommunizieren. Schnittstellen müssen definiert werden und die Anwendung selbst muss beschrieben werden. Deployment Descriptoren sind Dateien, in denen diese Beschreibung generell vorgenommen wird. Deployment Descriptoren werden vom Server zur Laufzeit interpretiert. Jeder Hersteller hat diesbezüglich ein eigenes Konzept. Daher ist besonders die Anpassung der Deployment Descriptoren an den neuen Anwendungsserver zu untersuchen. Nähere Betrachtung verdient auch die Java-Anwendung selbst. Wird eine Java-EE-Anwendung ausschließlich mit den Java Standard APIs entwickelt, so ist der Teil der Anwendung der in Java geschrieben ist ohne Anpassungsaufwand portabel. Sind allerdings Fremd-APIs in die Entwicklung eingeflossen, so muss deren Portabilität überprüft werden. Das Zusammenstellen (Assembling) einer Anwendung erfolgt immer nach gleichen Vorgaben. Eine nach Java-EE-Vorgaben zusammengesetzte Anwendung sollte von jedem Server ohne Anpassung akzeptiert werden. Die größte Vereinfachung in der neuesten Java EE Version ist zweifelsohne die Auslagerung der beschreibenden Elemente aus den Deployment Descriptoren in den Java Code selbst. Der Aufwand bei der Entwicklung einer Java EE Anwendung verringert sich somit. Da die Elemente aber in den Quellcode verschoben wurden, erhöht sich der Aufwand für eine Portierung. Die notwendigen Änderungen müssten dann im Quellcode selbst vorgenommen werden. 4.1.2 .NET Analog zu Java ist auch ein .Net Programm generell und ohne Anpassungsaufwand theoretisch plattformunabhängig. Im Gegensatz zu Java kann in .NET in vielen verschiedenen Programmiersprachen wie 4 Schlussbetrachtung 21 Möglichkeiten_der_Server-neutralen_Implementierung_von_Anwendungen Smalltalk, C#, C++, ... programmiert werden. Dem theoretischen Ansatz, dass auf allen momentanen verfügbaren Systemen ein .NET Programm laufen kann, steht die fehlende Implementierung von CLRs auf nicht Microsoft Systemen entgegen. 4.2 Fazit Betrachtet man nur die in Java geschriebene Enterprise Anwendung, so ist es Sun nicht gelungen Portabilität gänzlich ohne Anpassungs- oder Validierungsaufwand zu gewährleisten. Microsoft hat durch die Standardisierung von .NET die Grundlage gelegt, damit in .NET entwickelte Anwendungen portabel sind. Durch die fehlenden Implementierungen der Runtimes auf nicht Microsoft Systemen ist die Portabilität aktuell faktisch nicht gegeben. Es wurde in dieser Studienarbeit erkannt, dass die grundsätzliche Portierung einer Java Enterprise Anwendung möglich ist. Bei der Portierung entsteht Anpassungsaufwand und somit Kosten. Eine Portierung von .NET Anwendungen ist auf Grund fehlender Runtimes nicht möglich. Aus Sicht von Softwareanbietern ist somit Java EE als Programmiersprache vorzuziehen, wenn die Applikation auf unterschiedlichen Plattformen laufen soll. Betrachtet man darüber hinaus auch die Architektur, in der eine Anwendung eingebunden sein kann, so stellt sich die Frage, in wie weit Server-neutrale Portabilität überhaupt sinnvoll ist. So können z.B. mit Hilfe der Serviceorientierten Architektur (SOA) die Stärken einzelner Komponenten Plattform- und Programmiersprachen unabhängig zu einer Applikation zusammen gefasst werden. Dies geschieht durch die lose Koppelung der einzelnen Module über den Enterprise Service Bus. 4.3 Ausblick Beide Plattformen werden permanent weiter entwickelt und auch eine Vielzahl von Softwareanbietern entwickeln Applikationen für diese Plattformen. Das Interesse von Microsoft an der Verfügbarkeit von CLRs auf allen nicht Microsoft Systemen ist begrenzt, da eine enge Verzahnung von den Microsoft Server und Client Betriebssystemen und dem .NET Framework vorliegt. Da hat Sun mit Java klare Vorteile, da für alle Betriebssysteme CLRs vorliegen. Dort ist aber der Nachteil, dass nur eine Programmiersprache verwendet werden kann. V Fußnoten 1. ? Vgl. o. V. (2009l) 2. ? Entnommen aus o. V. (2009h), S. 633 f. 3. ? Vgl. o. V. (2009m) 4. ? Vgl. Stark, Thomas (2005), S. 425 ff. 5. ? Vgl. Merker, Erwin (2004), S. 319 6. ? Vgl. o. V. (2009n) 7. ? Vgl. Roden, Golo (2008), S. 2 8. ? Vgl. Karadagi, Allan (2007), S. 24 9. ? Vgl. Gläßer, Lothar (2003), S. 134ff 10. ? Vgl. Sosnecki, Anita (2003), S. 24 11. ? Vgl. Thai, Thuan und Lam, Hoang Q. (2003), S. 21 4.1.2 .NET 22 Möglichkeiten_der_Server-neutralen_Implementierung_von_Anwendungen 12. ? Vgl. o. V. (2007) 13. ? Vgl. Wenz, Christian, Kordwig, Andreas und Trennhaus, Christian (2004), S. 21 14. ? Vgl. Wagner, Johann und Schwarzenbacher, Kurt (2004), S. 93 15. ? Vgl. Liberty, Jesse (2007), S. 369 16. ? 16,0 16,1 Vgl. Candar, Kaan (2007), S. 17 17. ? Vgl. Ullenboom, Christian (2009), Kap. 1.2 18. ? 18,0 18,1 Vgl. Stark, Thomas (2005), S. 15 19. ? 19,0 19,1 Vgl. o. V. (2009f) 20. ? 20,0 20,1 Entnommen aus o. V. (2009h), S.43 21. ? 21,0 21,1 21,2 21,3 21,4 Vgl. o. V. (2009h), S.42 ff. 22. ? Vgl. Brüssau, Kai (2009), S. 26 23. ? Vgl. Brüssau, Kai (2009a), S. 3 24. ? Vgl. o. V. (2009h), S.49 ff. 25. ? Entnommen aus o. V. (2009h), S.53 26. ? 26,0 26,1 26,2 26,3 26,4 26,5 Vgl. o. V. (2009h), S.53 ff. 27. ? Entnommen aus o. V. (2009h), S.57 28. ? Entnommen aus Rymer, John R. (2007), S. 21 29. ? Vgl. Rymer, John R. (2007), S. 5 f. 30. ? Vgl. Rymer, John R. (2007), S. 19 31. ? 31,0 31,1 31,2 31,3 31,4 31,5 31,6 31,7 31,8 Vgl. o. V. (2009b) 32. ? 32,0 32,1 32,2 32,3 32,4 32,5 32,6 Vgl. o. V. (2009c) 33. ? Vgl. o. V. (2009e) 34. ? 34,0 34,1 Vgl. o. V. (2009j) 35. ? Entnommen aus o. V. (2009i) 36. ? Vgl. o. V. (2009a) 37. ? Vgl. o. V. (2009k) 5 Anhang Literatur und Quellenverzeichnis Brüssau, Kai (2009) Brüssau, Kai (2009a) Candar, Kaan (2007) Gläßer, Lothar (2003) Karadagi, Allan (2007) Liberty, Jesse (2007) Merker, Erwin (2004) o. V. (2009a) 5 Anhang Script Mehrschichtenarchitektur zur Vorlesung: Objektorientierte Programmiertechnik (HH), Hamburg https://campus.bildungscentrum.de/nfcampus/get/22939196/Kapitel%2010.pdf (24.10.09, 12:49) Script Java Server Faces zur Vorlesung: Objektorientierte Programmiertechnik (HH), Hamburg 2009, https://campus.bildungscentrum.de/nfcampus/get/23855122/Kapitel%2011.pdf (24.10.09, 12:50) Mono.net goes Linux, Franzis (November 2007) IT-Lösungen im E-Business. Technische Grundlagen: Die Technischen Grundlagen - Einfach, Praxisna Corporate Publishing, 1. Auflage (Juli 2003) Service-orientierte Architekturen: Proof-of-Concept eines Web Service zur Integration verteilter Anwe Programmieren mit C#, O'Reilly, 2. korrigierter Nachdruck 2007 Grundkurs Java-technologien, 2004, Vieweg+Teubner, 1. Auflage (2004) Sun (Hrsg.), J2EE: Authorized Licensees of the J2EE Platform, http://java.sun.com/j2ee/licensees.html 23 Möglichkeiten_der_Server-neutralen_Implementierung_von_Anwendungen o. V. (2009b) o. V. (2009c) o. V. (2009d) o. V. (2009e) o. V. (2009f) Sun (Hrsg.), J2EE: Java Verification, http://java.sun.com/j2ee/verified/index.jsp (04.10.2009, 11:11) Sun (Hrsg.), Java AVK User Guide, http://java.sun.com/j2ee/avk/5.0/usersguide.html (04.10.2009, 11: Sun (Hrsg.), Java EE 5 Compatible Implementations, http://java.sun.com/javaee/overview/compatibilit Sun (Hrsg.), Java EE AVK Release Notes, http://java.sun.com/j2ee/avk/5.0/release.html (04.10.2009, 1 Sun (Hrsg.), JSR 244: JavaTM Platform, Enterprise Edition 5 (Java EE 5) Specification, http://www.jc 12:09) o. V. (2009g) nicht Sun (Hrsg.), Java EE Technologies at a Glance, http://java.sun.com/javaee/technologies/ (04.10.2009, 1 verwendet Sun (Hrsg.), Java EE 5 Tutorial: For Sun Java System Application Server 9.1, Santa Clara 2008, o. V. (2009h) http://java.sun.com/javaee/5/docs/tutorial/doc/JavaEETutorial.pdf (04.10.2009, 13:20) o. V. (2009i) Sun (Hrsg.), The Java Powered for the Enterprise Program, http://java.sun.com/j2ee/verified/program.h IBM (Hrsg.), Websphere Application Server Scheduling Service, http://publib.boulder.ibm.com/infocenter/wsdoc400/v6r0/index.jsp?topic=/com.ibm.websphere.iseries. o. V. (2009j) (04.10.2009, 11:17) IBM (Hrsg.), Rational Application Developer for WebSphere Software, http://www-01.ibm.com/softw o. V. (2009k) (04.10.2009, 11:16) o. V. (2007) MSDN Microsoft, http://msdn.microsoft.com/de-de/library/zw4w595w%28lightweight%29.aspx, (abg o. V. (2009l) What is CORBA? What does it do?, http://www.omg.org/gettingstarted/corbafaq.htm#WhatIsIt, (abger o. V. (2009m) What is COM?, http://www.microsoft.com/com/default.mspx, (abgerufen am 18.10.2009, 20:10 Uhr) Microsoft .NET Language Support and Interoperability and Learning, o. V. (2009n) http://www.microsoft.com/germany/net/Microsoft%20.NET%20Language%20Support%20and%20Int (abgerufen am 15.11, 13:21 Uhr) Roden, Golo Auf der Fährte von C#, Springer, Berlin, 1. Auflage (April 2008) (2008) Rymer, John R. Forrester (Hrsg.), The Forrester Wave?: Application Server Platforms Q3 2007, Cambridge 2007, (2007) https://sites.google.com/a/motzkus.info/fallstudie/dateien/MarktsituationApplicationServer.pdf (24.10. Sosnecki, Anita Seminar Softwaretechnologie WS 2003, Universität Bonn (2003) Stark, Thomas J2EE: Einstieg für Anspruchvolle, 1. Auflage, Addison Wesley, München 2005 (2005) Thai, Thuan und Lam, Hoang Q. .NET Framework Essentials, Oreilly, 3. Auflage (August 2003) (2003) Ullenboom, Java ist auch eine Insel (2009), Galileo Press GmbH, Bonn 2009, Christian (2009) http://download.galileo-press.de/openbook/javainsel8/galileocomputing_javainsel8.zip (04.10.2009, 11 Wagner, Johann und Föderative Unternehmensprozesse: Technologien, Standards und Perspektiven, Publicis Corporate Pub Schwarzenbacher, Kurt (2004) Wenz, Christian, Kordwig, Andreas Jetzt lerne ich ASP.NET, Markt und Technik, 1. Auflage (2004) und Trennhaus, Christian (2004) 5 Anhang 24