Janeva:.NET meets J2EE

Ähnliche Dokumente
Traditione le Entwicklung: Anpassung und Auslieferung von Software Produkten. Prof.Dr.Frank M.Thiesing 30.

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007

7.1.5 Java RMI Remote Method Invocation ( (

4.2 Workshop EJB. Entwicklung von EJB-Anwendungen

Benutzung von Eclipse zur Entwicklung von Java EE 5 Anwendungen mit dem JBoss Application Server

Internetanwendungstechnik (Übung)

Client/Server-Programmierung

Client/Server-Programmierung

Nahtlose Integration von J2EE, CORBA und.net

Client/Server-Programmierung WS2007/08. EJB/JSP: Schritt-für-Schritt Anleitung

Benutzung von Eclipse zur Entwicklung von Java EE 5 Anwendungen mit dem JBoss Application Server 5.0

J2EEKurs. Enterprise JavaBeans Einführung. Peter Thiemann. Sommercampus J2EEKurs, Freiburg, Germany, Universität Freiburg, Germany

Remote Method Invocation

Der lokale und verteilte Fall

Remote Method Invocation

Microsoft.NET Framework & Component Object Model. ein Vortrag von Florian Steuber

Remote Methode Invocation (RMI) ETIS SS05

Anwendung eines Enterprise Java Beans

Eclipse 3.0 (Windows)

Microsoft.NET und SunONE

Enterprise JavaBeans Überblick

Komponententechnologien Winter 2016/17. Komponenten. 2. Die Anfänge. Peter Sturm, Universität Trier 1

Java-Programmierung. Remote Method Invocation - RMI

Enterprise Java Beans (EJB)

Eclipse Tutorial.doc

COMMON OBJECT REQUEST BROKER ARCHITECTURE. Dmytro Pyvovar Otto-von-Guericke Universität Magdeburg

Konzepte von Betriebssystem-Komponenten Middleware RMI

Web-Services Implementierung mit Java

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014)

Starthilfe für C# Inhaltsverzeichnis. Medien- und Kommunikationsinformatik (B.Sc.) Alexander Paharukov. Informatik 3 Praktikum

XE-A203 / XE-A213. Programmier-Tool

8a. Exkurs.NET. 8a.1.NET Architektur

-Testen verteilter Anwendungen

Einsatz von Applikationsservern. Untersucht am Beispiel des Sybase Enterprise Application Server

Klausur zur Vorlesung Einführung in Verteilte Systeme WS 05/06 Prof. Dr. Odej Kao 3. Februar 2006

Installationsanleitung ab-agenta

1.3.1 Java-Compiler installieren

Enterprise JavaBeans Überblick

Softwareentwicklung mit Enterprise JAVA Beans

Java Kurs für Anfänger LMU SS09 Einheit 1 Javaumgebung

Etablierung serviceorientierter Architekturen mit Web Services

Remote Method Invocation

Spring Dynamic Modules for OSGi Service Platforms

Kapitel 21 Nativer Code

CORBA. Systemprogrammierung WS

Installationsanleitung für Haufe Advolux Kanzleisoftware ab Version 2.5 (Windows)

Mobile und Verteilte Datenbanken

Warum EJB Technologie (1)?

Eclipse 3.0 (Mac) 1. Eclipse installieren. 2. Welcome Projekt schliessen

Web Services. XML, WSDL, SOAP und UDDI Einblicke und Ausblicke J.M.Joller 1

EXPANDIT. ExpandIT Client Control Kurzanleitung. utilities. be prepared speed up go mobile. Stand

UNIVERSITÄT LEIPZIG. Mainframe Internet Integration SS2013. Java Remote Method Invocation RMI Beispiel

Programmieren II. Remote Method Invocation (RMI) Heusch -- Ratz. Institut für Angewandte Informatik

Perceptive Document Composition

Programmieren in Java -Eingangstest-

B Java RMI B.2 B.4. 1 Java. 1.2 Methoden. 1.1 Objekte (2) 1.1 Objekte. Objektorientierte Sprache. Klassenbeschreibung. Methode ist eine Art Funktion

Schritt 4: Hallo Enterprise Bean

CORBA. Eine kurze Einführung. Common Object Request Broker Architecture. Ying Lu

Erste Schritte zum lauffähigen Java Programm

Klausur zur Vorlesung Einführung in Verteilte Systeme WS 05/06 Prof. Dr. Odej Kao 30. März 2006

Installation Oracle 11g Server und Arbeitsplätze mit lokaler Datenbank

Installationsanleitung

Solid Edge VB.NET Add-In mit Visual Studio 2005

Java Remote Method Invocation (RMI)

Einführung in das Microsoft.NET-Framework. Programmiersprache C# 02: Visual Studio / Hello World. Boris Hülsmann

Process: Installationsleitfaden

Wir gratulieren ihnen zu dem Erwerb dieser hochkomplexen und funktionalen Profisoftware NetChat.

Enterprise Java Beans

Themen. Web Service - Clients. Kommunikation zw. Web Services

Im Mathe-Pool startet man Eclipse am besten aus einer Shell heraus, und zwar indem man im Home- Verzeichnis den Befehl

Oracle & Java HOW TO

Projektgruppe. Thomas Kühne. Komponentenbasiertes Software Engineering mit OSGi

Szenario 3: Service mit erweiterter Schnittstelle

Kommunikation. Björn und Georg

VMscope GmbH. Plugins entwickeln für den VM Slide Explorer Daniel Heim, Seite 1/15

Musterlösung Übungsblatt 2 Netzprogrammierung WS 05/06

Java: Kapitel 1. Überblick. Programmentwicklung WS 2008/2009. Holger Röder Holger Röder

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Dieses Dokument beschreibt die Installation des Governikus Add-In for Microsoft Office (Governikus Add-In) auf Ihrem Arbeitsplatz.

Stellar Phoenix JPEG Repair 4.5. Installationsanleitung

4. Objektorientierte Programmierung mit C++

Aktivierung der Produktschlüssel. in CABAReT-Produkten am Beispiel CABAReT Stage

Release Notes Miss Marple Lizenzkontrolle

i n g e n i e u r b ü r o f ü r s o f t w a r e t e c h n o l o g i e w w w. v o e l t e r. d e Servlet Debugging

License Management SDK

Einführung zu den Übungen aus Softwareentwicklung 1

ACT! 11 Premium Inklusive Microsoft SQL-Server 2005 Standard

Programmierung mit Komponenten

Systemvoraussetzungen (minimal)

CORBA. Beispiel einer Middleware-Plattform. Christian Fass WS 2013/14 Software Engineering: Basistechnologien

Python Installation. 1 Vorbereitung. 1.1 Download. Diese Anleitung ist für Windows ausgelegt.

(1)Einführung in Eclipse

Kurzanleitung RMI-Beispiel: gettime Seite 1 / 7. RMI Projekt gettime 1

Installationsanleitung VirusBuster Internet Security Suite

Tutorial 7 TEIL 1/2. Untersuchung von ebusiness Anwendungen auf der Basis des IBM WebSphere Developer V 7.0

TCP/IP Programmierung. C# TimeServer Java6 TimeClient

IDE-Visual Studio 2010 C#

Transkript:

1 Fachhochschule Dortmund Prof. Dr. Frank M. Thiesing Komponentenorientierte Softwareentwicklung und Hypermedia SS04 Janeva:.NET meets J2EE Ruthild Klempel Allgemeine Informatik Matr.Nr. 7043018 Windscheidstrasse, 24 45147 Essen Tel. 0201/7203207 E-mail: daveruthklempel@web.de

2 Inhalt 1. Einleitung... 3 2. Einführung in Janeva...3 3. Systemvoraussetzungen...6 3.1... für die Entwicklung Janeva-basierter Anwendungen...6 3.2... für den Einsatz von Janeva-basierter Anwendungen...8 4. Installation... 8 5. Ein erstes Beispiel... 11 5.1 Die J2EE-Seite... 11 5.2 Die.NET-Seite... 12 5.2.1 Der Client... 12 5.2.2 Janeva-Klassenbibliotheken einbinden... 14 5.2.3 Janeva-Stubs generieren... 15 5.2.4 Die Ausführung des Clients... 16 6. Fazit...18 Literaturverzeichnis...19 Anhang... 20

3 1. Einleitung Es ist Fakt, dass die.net-welt und die Java-Welt wenig miteinander integriert sind. Beide Technologien haben technische und kommerzielle Stärken und bieten viele Vorteile. Ein guter Ansatz wäre es, wenn beide Technologien nicht als Konkurrenten gesehen würden, sondern als Ergänzung füreinander. 1 So müsste man sich nicht für eine der beiden Technologien entscheiden, sondern könnte die Vorteile der beiden Welten gleichzeitig nutzen. Und so kommt Janeva ins Spiel: eine einfache Möglichkeit um beide Technologien zu verbinden. Ziel dieser Ausarbeitung ist es, Entwickler, die sich zum ersten Mal mir der Software Janeva befassen möchten, bei den ersten Schritten zu begleiten und einen groben Überblick über die Funktionalität, Vorgehensweise und Vorteile dieser Software zu verschaffen. Es soll eine Entscheidungshilfe über den möglichen Einsatz dieser Software für potentielle Janeva- Anwender sein. Diese Ausarbeitung hat keinen Anspruch auf Vollständigkeit. Es wird auf so viel eingegangen, wie es nötig ist, um ein erstes Beispiel mit Janeva zustande zu bekommen und um ein allgemeines Verständnis zu verschaffen. Im Folgenden wird hauptsächlich auf die Verbindung zwischen J2EE und.net eingegangen. Die Verbindung zwischen CORBA-Komponenten und.net wird hier nur grob aufgeführt. 2. Einführung in Janeva Janeva ermöglicht die Entwicklung von client- und server-seitigen Anwendungen für das. NET Framework, die auf server-seitigen J2EE/CORBA-Komponenten über das IIOP- Protokoll (Internet Inter-ORB Protocol) zugreifen. 2 Dabei handelt es sich im Kern um eine Java-basierte CORBA-Implementierung, die die Borland-Entwickler mit Hilfe von Microsofts Visual J# in die.net-welt transformiert haben. 3 1 Vgl. The Middleware Company: High Performance.NET and J2EE Interoperability with Borland s Janeva. S. 3. http://www.borland.com/products/white_papers/pdf/high_performance_dotnet_and_j2ee.pdf (06.05.04). 2 Vgl. Developers Guide. S. 11. http://info.borland.com/techpubs/janeva/6_0/english/pdf/janevadevguide.pdf 3 Stahl, Michael: Über-Brückung, Borlands Janeva: Zugriff von.net- auf J2EE- und CORBA-Objekte. In: ix 2/2004. S. 63.

4 Die Janeva-Laufzeitumgebung ist eine Sammlung von Klassenbibliotheken in Form von DLL- Dateien, die Klassen zur Verfügung stellt, um die Kommunikation zwischen.net und J2EE/CORBA zu gewährleisten. Die Laufzeitumgebung stellt die typischen CORBA und J2EE-API's dar die verwendet werden, um entfernte Objekte anzusprechen. Diese API's halten sich an die CLR-Regeln (Common Language Specification) von Microsoft, sodass sie von jeder.net-programmiersprache verwendet werden können. 4 Janeva generiert Client-Stubs bzw. Server-Skeletons um Methoden von J2EE- und CORBA- Objekten aufzurufen. So werden die Interfaces zur Verfügung gestellt, die benötigt werden, um auf J2EE- bzw. CORBA-Komponenten zuzugreifen. Diese Stubs/Skeletons bilden die Schnittstelle zwischen.net und J2EE- bzw. CORBA-Servern. Somit ist der Zugriff auf J2EE/CORBA-Dienste für den.net-entwickler bzw..net-tools transparent: Die J2EE/CORBA-Dienste werden wie ein beliebiger.net-dienst behandelt. NET-Entwickler brauchen keine Vorkenntnisse in Java, J2EE oder CORBA. 5.NET-Programmierern bleiben diese Details weitgehend verborgen, und sie können sich vollständig in der Welt des Managed.NET-Code bewegen, ohne in größerem Umfang mit CORBA oder J2EE in Berührung zu kommen. 6 Client-Stubs werden gebraucht um die Schnittstelle zwischen.net-clients und J2EE/CORBA-Komponenten zu bilden. Dementsprechend werden Server-Skeletons als Schnittstelle zwischen.net-serverseitigen Komponenten und J2EE/CORBA-Komponenten verwendet, wie in Abb. 1 deutlich wird. 4 Developers Guide. S. 12-13. http://info.borland.com/techpubs/janeva/6_0/english/pdf/janevadevguide.pdf 5 The Middleware Company: High Performance.NET and J2EE Interoperability with Borland s Janeva. S. 5. http://www.borland.com/products/white_papers/pdf/high_performance_dotnet_and_j2ee.pdf (06.05.04). 6 Stahl, Michael: Über-Brückung, Borlands Janeva: Zugriff von.net- auf J2EE- und CORBA-Objekte. In: ix 2/2004. S. 63.

5 Abb. 1 7 Die J2EE/CORBA-Server müssen nicht verändert werden, um mit den.net-clients bzw. -Servern zu kommunizieren. Alle Einstellungen erfolgen nur auf der.net-seite. Deshalb sind in Abb.1 keine grau-markierten Stellen in den J2EE/CORBA-Umgebungen. Janeva bietet eine Lösung für die Interoperabilität, die weder zusätzliche Hardware- noch Software-Infrastruktur erfordert, um in die vorhandene Deployment-Umgebung integriert werden zu können. Dies minimiert Kosten und senkt Risiken. Janeva benötigt keine zusätzliche Entwicklungsarbeit für die Konnektivität, keine Änderungen an vorhandenen Backend-Systemen und keine Änderungen an vorhandenen IT- oder Geschäftsprozessen. 8 Janeva stellt zwei Arten von Compilern zur Verfügung, um die Stubs bzw. Skeletons zu generieren. Der CORBA-basierte Compiler generiert Stubs/Skeletons aus IDL-Dateien (Interface Definition Language), und der J2EE-basierte Compiler generiert Stubs/Skeletons aus Interfaces, die in Java-RMI-Dateien (Remote Method Invocation) bzw. in J2EE- Archivdateien spezifiziert sind. 9 Das Ergebnis ist ein C#-Code, der sich aber an die Regeln der CLS (Common Language Specification) hält, sodass die Nutzung jeder.net-sprache grundsätzlich möglich ist 10. 7 Developers Guide. S. 12. http://info.borland.com/techpubs/janeva/6_0/english/pdf/janevadevguide.pdf 8 Erhöhen Sie die Plattform Interoperabilität. S. 2. http://www.borland.com/janeva/pdf/jnva_datasheet.pdf 9 Vgl. Developers Guide. S. 11. http://info.borland.com/techpubs/janeva/6_0/english/pdf/janevadevguide.pdf 10 Stahl, Michael: Über-Brückung, Borlands Janeva: Zugriff von.net- auf J2EE- und CORBA-Objekte. In: ix 2/2004. S. 63.

6 Abb.2 11 Um z. B. einen Client zu programmieren, der auf J2EE-Komponenten zugreift, müssen die EJB-Interfaces, die in Form einer.ear oder.jar-datei vorliegen, in.net-code umgewandelt werden (Client-Stub). Dies geschieht durch den J2EE-basiertern Compiler. Der Client greift über diesen jetzt in C#-Code vorliegenden Stub auf die EJB's. Die Janeva- Klassenbibliotheken müssen in das.net-projekt eingebunden werden. Sind diese Voraussetzungen erfüllt, kann das.net-projekt kompiliert werden, wie in Abb. 2 zu sehen ist. 3. Systemvoraussetzungen 3.1... für die Entwicklung Janeva-basierter Anwendungen Um Janeva-basierte Anwendungen erfolgreich entwickeln zu können, muss folgende Software auf dem Entwicklungs-Rechner vorhanden sein:.net Framework: Da Janeva ein.net-produkt ist, wird das.net Framework für die Ausführung benötigt. Microsoft Visual J#.NET: Die Janeva-Kommunikations-Umgebung wurde in J# implementiert. Auch wenn die Clients in einer anderen Programmiersprache programmiert werden, müssen Microsoft Visual J# sowie die.net-laufzeitumgebung installiert sein. 11 The Middleware Company: High Performance.NET and J2EE Interoperability with Borland s Janeva. S. 6. http://www.borland.com/products/white_papers/pdf/high_performance_dotnet_and_j2ee.pdf (06.05.04).

7 Für die richtige Ausführung von den Janeva-Tools und der Janeva-Laufzeitumgebung sollten Visual J# und das.net Framework in derselben Versionsnummer sein. 12 Java Runtime Environment 1.4: Wird benötigt, damit der Java-basierte Compiler (java2cs) ausgeführt werden kann. (Anmerkung: JRE wird nicht für die Ausführung von Janeva- Clients benötigt, nur für die Entwicklung dieser Clients. Wenn bei der Entwicklung der java2cs-compiler nicht benötigt wird, muss das JRE auch nicht vorhanden sein. 13 ) Eine Entwickler-Lizenz (Development License) ist auch erforderlich, um Janeva-basierte Anwendungen zu entwickeln. Sie ist kostenlos, man darf aber Janeva nur auf einem Rechner für Testzwecke verwenden. 14 Im Kapitel 4 wird näher darauf eingegangen, wie man die Lizenz bekommt und an Janeva anbindet. Wenn man das Microsoft Visual Studio.Net installiert, ist das.net Framework schon darin enthalten. Die Sprache J# kann bei der Installation von Visual Studioauch mit installiert werden. Empfohlene Hardware: Intel Pentium II-Klasse Prozessor 450 MHz (600 MHz oder mehr empfohlen) 128 MB RAM (256 MB empfohlen) 10 MB Festplattenspeicher (volle Installation) 15 Betriebssysteme, die unterstützt werden: Microsoft Windows Server 2003 Microsoft Windows 2000 Server Microsoft Windows 2000 Professional Microsoft Windows XP Professional 16 Anmerkung: Für diese Ausarbeitung wurde Janeva unter Microsoft Windows XP Home Edition getestet, und es haben sich keinerlei Probleme ergeben. 12 Vgl. Installation Guide. S. 10. http://info.borland.com/techpubs/janeva/6_0/english/pdf/janevainstallguide.pdf 13 Vgl. Readme. <Janeva 6.0-Installationsverzeichnis>readme.html 14 Vgl. License Terms. <Janeva 6.0-Installationsverzeichnis>license.rtf 15 Installation Guide. S. 9. http://info.borland.com/techpubs/janeva/6_0/english/pdf/janevainstallguide.pdf 16 Vgl. Installation Guide. S. 9. http://info.borland.com/techpubs/janeva/6_0/english/pdf/janevainstallguide.pdf

8 3.2... für den Einsatz Janeva-basierter Anwendungen Um Janeva-basierte Anwendungen auf verschiedenen Rechnern einsetzen zu können, wird auf den Rechnern, in denen die Anwendung laufen soll, folgendes benötigt: Microsoft.NET Framework Redistributable Package Microsoft Visual J# Redistributable Package Janeva runtime libraries (Klassenbibliotheken): Borland.Janeva.Runtime.dll Borland.Janeva.Private.dll Borland.Janeva.Services.dll Janeva deployment license key (Lizensschlüssel) 17 : Janeva-Laufzeitlizenzen müssen für den Einsatz auf verschiedenen Rechnern bei Borland käuflich erworben werden. 18 Es wird unterschieden zwischen Client-Runtime-Lizenzen und Server/CPU-Lizenzen. 19 4. Installation Nachdem die benötigte Software, die im Abschnitt 3.1. beschrieben ist, installiert ist, kann Janeva installiert werden. Die heruntergeladene Janeva_60.zip 20 -Datei muss entpackt und die Setup.exe-Datei ausgeführt werden. Beim Herunterladen wird man aufgefordert, sich zu registrieren. An die bei der Registrierung angegebene E-mail-Adresse wird ein Lizenzschlüssel gesendet. Wie der Schlüssel eingebunden wird, wird später aufgeführt. In dem Verzeichnis, wo die Janeva_60.zip-Datei entpackt wurde, ist eine Datei namens JanevaInstallGuide.pdf, die eine Hilfestellung für den Installationsvorgang ist. Im Folgenden werden einige wichtige Aspekte der Installation aufgeführt. Wie in Abb.3 zu sehen ist, wird im Installationsdialog gefragt, welche Janeva-Komponenten installiert werden sollen. 17 Vgl. Developers Guide. S. 48. http://info.borland.com/techpubs/janeva/6_0/english/pdf/janevadevguide.pdf 18 Vgl. Stahl, Michael: Über-Brückung, Borlands Janeva: Zugriff von.net- auf J2EE- und CORBA-Objekte. In: ix 2/2004. S. 65. 19 Vgl. License Terms. <Janeva 6.0-Installationsverzeichnis>license.rtf. 20 Diese Datei kann heruntergeladen werden bei http://www.borland.com/products/downloads/download_janeva.html.

9 Abb. 3 Es ist empfehlenswert, alle Optionen anzukreuzen. Beim ankreuzen von Borland Janeva Runtime werden die Janeva-Klassenbibliotheken geliefert. In Borland Janeva Tools sind der Java-basierte Compiler und der IDL-basierte Compiler enthalten. Documents and Examples liefert Beispiele und die Dokumentation, wo die API's beschrieben werden und wichtige Informationen für Entwickler, die Janeva-basierte Anwendungen entwickeln möchten, enthalten sind. Borland Janeva for Visual Studio Addin gibt dem Entwickler die Möglichkeit, im Visual Studio.NET einige Janeva-Einstellungen zu verändern. Im nächsten Schritt wird gefragt, ob der Pfad des Janeva-bin-Verzeichnisses in die Umgebungsvariablen PATH einfügen werden soll. Es ist empfehlenswert, yes anzukreuzen. Janeva benötigt auch den Pfad zum JRE (Java Runtime Environment), falls der Java-basierte Compiler verwendet werden soll. Deshalb wird gefragt (Abb. 4), ob man den Pfad selbst eingeben will, ob er automatisch gesucht werden soll oder ob man ihn nicht angeben soll.

10 Abb. 4 Falls man die erste Option wählt, erscheint ein Dialog am Ende des Installationsvorgangs, wo der JRE-Pfad anzugeben ist. Falls man die zweite Option wählt und der Pfad trotzdem nicht gefunden wird, wird man am Ende auch aufgefordert, den Pfad anzugeben. Die dritte Option ist für den Fall, dass die Janeva-Laufzeitumgebung (Klassenbibliotheken) auf einem Produktiv-System installiert werden soll. 21 Nachdem der Installationsprozess beendet ist, muss der Lizenzschlüssel, den man nach der Registrierung per E-Mail bekommen hat, in das Janeva-Installationsverzeichnis kopiert und nach borland.txt umbenannt werden. Falls man bei der Installation angekreuzt hat, dass das Addin für den Visual Studio.NET installiert werden soll, erscheinen im Visual Studio einige zusätzliche Konfigurationsmöglichkeiten, womit man Janeva-Einstellungen verändern kann. Dies erreicht man im Visual Studio unter dem Menü Extras Optionen. Wenn man Borland Janeva anklickt, erscheint folgendes Fenster: 21 Vgl. Installation Guide. S. 17. http://info.borland.com/techpubs/janeva/6_0/english/pdf/janevainstallguide.pdf

11 Abb. 5 Jetzt sind alle Voraussetzungen erfüllt, um Janeva-Anwendungen zu programmieren. 5. Ein erstes Beispiel Im nachfolgenden Beispiel werden Microsoft Visual Studio.NET 2003 und Sun Java System Application Server Platform Edition 8, welche kompatibel zur J2EE 1.4-Plattform ist, verwendet. Wie dieses Beispiel mit anderen Programmierumgebungen und J2EE Servern durchzuführen ist, wird in dieser Ausarbeitung nicht behandelt. Die hier verwendete Janeva- Version ist die 6.0. Das Beispiel ist ein einfacher.net-client in der Sprache C#, der Methoden von einen EJB aufruft. 5.1 Die J2EE-Seite Um diesen EJB zur Verfügung zu stellen, der später von dem Client verwendet wird, muss das Converter -Beispiel von dem J2EE-Tutorial 22 von Sun durchgeführt werden. Es handelt sich um einen EJB namens ConverterBean, der Methoden enthält, die die Umrechnung von Dollar nach Yen und von Yen nach Euro durchführen. 22 http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html (31.03.04), Kap. 24

12 Es werden zwei Interfaces zur Verfügung gestellt, um den Zugriff von außen zu ermöglichen. Der ConverterHome ist ein Home Interface, der dem Client erlaubt, eine Instanz von dem EJB zu erzeugen. Der Converter ist ein Remote Interface, der die Methoden definiert, die von einem Client aufgerufen werden dürfen. Um das Beispiel durchführen zu können, muss der J2EE Application Server gestartet und der Status von ConverterApp muss running sein (Siehe Abb. 6). Dies kann man überprüfen, wenn man den Deploytool 23 startet. Im Baum muss unter Servers - localhost:4848 24 der Status von ConverterApp erscheinen. Abb. 6 Im Anhang dieser Ausarbeitung werden die Quelltexte zu dem Tutorial-Beispiel aufgeführt. 5.2 Die.NET-Seite 5.2.1 Der Client Das Ziel dieses Beispiels ist es, einen Client in.net zu programmieren, der genauso funktioniert wie der Client vom J2EE-Tutorial (ConverterClient). 25 Dazu muss ein neues Projekt im Visual Studio.NET erstellt werden unter Datei Neu Projekt.... Dann wird unter Projekttyp Visual C#-Projekte ein leeres Projekt einfügt. In diesem Beispiel wird das Projekt unter dem Namen JanevaConverterClient verwendet. Zusätzlich wird unter Datei Neues Element hinzufügen... eine Codedatei mit dem Namen JanevaConverterClient.cs eingefügt. Folgender C#-Quellcode wird in diese Datei kopiert bzw. editiert: 23 Im Windows erreichbar unter Start Programme Sun J2EE 1.4 SDK - Deploytool 24 Die Port-Nummer muss nicht zwingend diese sein. Bei der Installation von dem J2EE Application Server wird zwar diese Nummer für den Admin-Port vorgeschlagen, man kann aber auch eine andere wählen. 25 Um die Quelltexte zu vergleichen, siehe Anhang.

13 using System; using J2EE.Naming; using J2EE.Rmi; using J2EE.Math; namespace converter { public class JanevaTest { static void Main(string[] args) { Context root = new InitialContext(args); object myserverhomeobject = root.lookup("converterbean"); ConverterHome home = (ConverterHome) PortableRemoteObject.Narrow(myServerHomeObject, typeof(converterhome)); Converter currencyconverter = home.create(); BigDecimal param=new BigDecimal(100); BigDecimal amount=currencyconverter.dollartoyen(param); Console.WriteLine(amount); amount=currencyconverter.yentoeuro(param); Console.WriteLine(amount); In dem Client werden Janeva-API's verwendet, wie in folgende Anweisungen zu sehen ist: using J2EE.Naming; using J2EE.Rmi; using J2EE.Math; Dies sind einige der Namensräume, die Janeva zur Verfügung stellt. In der Programmzeile Context root = new InitialContext(args); wird ein Root-Kontext für den J2EE-Naming-Service instanziiert. Dabei sind in der Variablen args Server-Informationen wie IP-Adresse und Port-Nummer, die per Argument an das Programm übergeben werden. In der nächsten Zeile wird das EJBHome-Objekt, das auf dem Server liegt, gesucht: object myserverhomeobject = root.lookup("converterbean"); In der Zeile ConverterHome home = (ConverterHome) PortableRemoteObject.Narrow(myServerHomeObject,

14 typeof(converterhome)); wird das gefundene Objekt myserverhomeobject auf dem Typ ConverterHome gebracht. Mit der Zeile Converter currencyconverter = home.create(); wird eine neue Instanz des EJB kreiert. Der Interface Converter definiert die Methoden, die vom Client aufgerufen werden dürfen. Diese Methoden können von dem Objekt aus, das von der Variablen currencyconverter referenziert wird, aufgerufen werden. 26 5.2.2 Janeva-Klassenbibliotheken einbinden Wenn man versucht, in diesem Stadium das Projekt zu kompilieren, wird es fehlschlagen. Ein Grund dafür ist, dass Janeva-spezifische Klassen (Assemblys) verwendet werden, die noch nicht eingebunden sind. Dieses Problem kann man beheben, indem man in Visual Studio.NET im Projektmappen- Explorer mit der rechten Maustaste auf Verweise klickt und den Menüpunkt Verweis hinzufügen auswählt. Dort wird die Komponente Janeva Runtime ausgewählt. 27 Abb. 7 26 Vgl. Developers Guide. S. 23. http://info.borland.com/techpubs/janeva/6_0/english/pdf/janevadevguide.pdf 27 Vgl. Developers Guide. S. 46-47. http://info.borland.com/techpubs/janeva/6_0/english/pdf/janevadevguide.pdf

15 Wenn man jetzt versucht, das Projekt zu kompilieren, ist dieses Problem bereits behoben. 5.2.3 Janeva-Stubs generieren Das Kompilieren ist zu diesem Zeitpunkt noch nicht möglich. Der Grund dafür besteht darin, dass die EJB-Interfaces, die in diesem Client verwendet werden, noch nicht in.net zur Verfügung stehen. Abb. 8 Um dies zu beheben wird zunächst die Datei ConverterApp.ear im Verzeichnis <J2EE- Tutorial-Verzeichnis>\examples\ejb\converter in das.net-projekt-verzeichnis kopiert. In diese Datei sind die benötigten EJB-Interfaces in Java-Code definiert. Dieser Code muss in. NET-Code umgewandelt werden (Janeva-Stub), damit man diese Interfaces verwenden kann. Im Kommandozeilenfenster wird im.net-verzeichnis folgender Befehl ausgeführt: <.NET Projekt-Verzeichnis>>java2cs -o ConverterApp.cs ConverterApp.ear Der Java-basierte Compiler java2cs wandelt den Java-Code aus der Datei ConverterApp.ear in C#-Code um. Die dabei neu entstandene Datei heisst ConverterApp.cs. Diese Datei erscheint im.net-projekt-verzeichnis. 28 28 siehe Developers Guide. S. 46. http://info.borland.com/techpubs/janeva/6_0/english/pdf/janevadevguide.pdf

16 Anmerkung: um die Janeva-Compiler wie beschrieben benutzen zu können, muss das Janevabin-Verzeichnis in der Umgebungsvariablen PATH enthalten sein. Wenn man im Janeva- Installationsvorgang diese Option nicht angekreuzt hat, muss folgender Befehl im Kommandozeilenfenster ausgeführt werden, bevor man den Compiler aufruft: <aktuelles Verzeichnis>> set PATH=<Janeva- Installationsverzeichnis>\bin;%PATH% Der nächste Schritt ist, die vom java2cs-compiler generierte Datei ConverterApp.cs unter Projekt Vorhandenes Element hinzufügen... in das Projekt einzubinden. Wichtig ist es, dass der Namespace, der in dieser generierten Datei verwendet wird, derselbe ist, der in dem Client verwendet wird. Wenn die beschriebenen Schritte ausgeführt wurden, kann das Projekt kompiliert werden. 5.2.4 Die Ausführung des Clients Es gibt drei Formen, wie man die J2EE-Server-Daten (z. B. IP-Adresse und Port-Nummer) an den Client übergeben kann: Über Kommandozeilenargumente Im Programmtext des Clients In eine Konfigurationsdatei. In diesem Beispiel wird nur die erste Möglichkeit beschrieben. 29 Im Verzeichnis <.NET-Projektverzeichnis>\bin\Debug wird im Kommandozeilenfenster die Datei JanevaConverterClient.exe mit einigen Argumenten aufgerufen. Der Befehl sieht folgendermaßen aus: <.NET-Projektverzeichnis>\bin\Debug>JanevaConverterClient -ORBInitRef NameService=corbaname:iiop:localhost:3700/NameService 30 Die Client-Ausgabe sieht wie folgt aus: 29 Alle Möglichkeiten werden ausführlich im Janeva-Entwicklerhandbuch beschrieben. Developers Guide. S. 31-44. http://info.borland.com/techpubs/janeva/6_0/english/pdf/janevadevguide.pdf 30 Vgl. Developers Guide. S. 32. http://info.borland.com/techpubs/janeva/6_0/english/pdf/janevadevguide.pdf

17 Abb. 9 Die angegebenen Server-Angaben beziehen sich auf dem J2EE-Application-Server von Sun. Die übergebenen Argumente können von Server zu Server variieren. Jeder Server hat eine eigene URL-Syntax. Beispiel: WebLogic 7 oder 8: corbaloc::localhost:7001/nameservice IBM WebSphere 5: corbaname:iiop:localhost:2809/nameserviceserverroot Oracle's 0C4J: corbaloc:iiop:1.2@localhost:5555/nameservice Sybase: corbaloc:iiop:1.2@localhost:9000/nameservice 31 Die Portnummer kann auch von der Standard-Portnummer des jeweiligen Servers abweichen. Im J2EE-Application-Server von Sun kann man dies leicht überprüfen, indem man unter Start Programme Sun J2EE 1.4 SDK die Admin Console startet. Dort wird im Baum Application Server ORB IIOP-Listeners ausgewählt. Der hier benötigte Port ist unter dem Namen orb-listener-1 aufgeführt (Abb. 10). Abb. 10 31 Vgl. Developers Guide. S. 34. http://info.borland.com/techpubs/janeva/6_0/english/pdf/janevadevguide.pdf

18 6. Fazit Janeva ist ohne Zweifel eine sehr gute Lösung, um ohne viel Aufwand die Interoperabilität zwischen J2EE, CORBA und.net zu ermöglichen. Allerdings erweisen sich Mängel in der Dokumentation. Wichtige Informationen sind durch die Dokumentation zerstreut, was auch dazu führt, dass die Dokumentation unübersichtlich ist. Man musst sich einen großen Teil der ersten fünfzig Seiten des Entwicklerhandbuches durchlesen, um alle nötigen Informationen zu haben, um ein kleines Client-Beispiel erfolgreich zu implementieren. Es gibt zwar Janeva-Beispiele, die mit der Software mitgeliefert werden, doch sie steigen auf einem zu hohen Niveau ein. Für Entwickler, die sich noch nie mit dem Thema beschäftigt haben, ist der Einstieg schwer. Was hier fehlt, ist ein ausführliches kleines Beispiel, in dem jeder Schritt erklärt wird, um ein allgemeines Verständnis und einen Überblick zu ermöglichen. Ein weiterer Aspekt ist, dass die mitgelieferten J2EE-Beispiele für den Borland Enterprise Server konzipiert sind. Zwar wird gezeigt, wie die Interoperabilität zwischen.net und anderen EJB-Servern funktioniert, es wird aber nicht auf andere wichtige EJB-Server eingegangen, wie z.b. JBoss und der J2EE-Application Server von Sun. Noch ein Grund für den schweren Einstieg besteht darin, dass die Software ziemlich neu auf dem Markt ist und sich kaum verbreitet hat. Man findet keine Tutorials oder Foren über Janeva, wo Beispiele aufgeführt und durchdiskutiert werden. Doch die Vorteile überwiegen. Es ist zwar schwer, mit der vorhandenen Dokumentation ein erstes kleines Test-Client zum laufen zu bringen, doch wenn diese Hürde überwunden ist, ist nur noch die neu geöffnete Tür in Sicht. Es öffnet sich eine Tür mit vielenn Vorteilen und guten Lösungen.

19 Literaturverzeichnis Developers Guide. http://info.borland.com/techpubs/janeva/6_0/english/pdf/janevadevguide.pdf Erhöhen Sie die Plattform Interoperabilität. http://www.borland.com/janeva/pdf/jnva_datasheet.pdf The Middleware Company: High Performance.NET and J2EE Interoperability with Borland s Janeva. http://www.borland.com/products/white_papers/pdf/high_performance_dotnet_and_j2ee.pdf (06.05.04). Installation Guide. http://info.borland.com/techpubs/janeva/6_0/english/pdf/janevainstallguide.pdf J2EE-Tutorial. http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html (31.03.04). License Terms. <Janeva 6.0-Installationsverzeichnis>license.rtf. Readme <Janeva 6.0-Installationsverzeichnis>readme.html. Stahl, Michael: Über-Brückung, Borlands Janeva: Zugriff von.net- auf J2EE- und CORBA- Objekte. In: ix 2/2004.

20 Anhang Folgende Quelltexte sind aus dem J2EE-Tutorial. 32 Es handelt sich um das Converter- Beispiel. Remote Interface (Converter.java) package converter; import javax.ejb.ejbobject; import java.rmi.remoteexception; import java.math.*; public interface Converter extends EJBObject { public BigDecimal dollartoyen(bigdecimal dollars) throws RemoteException; public BigDecimal yentoeuro(bigdecimal yen) throws RemoteException; Home Interface (ConverterHome.java) package converter; import java.rmi.remoteexception; import javax.ejb.createexception; import javax.ejb.ejbhome; public interface ConverterHome extends EJBHome { Converter create() throws RemoteException, CreateException; Enterprise Bean Class (ConverterBean.java) package converter; import java.rmi.remoteexception; import javax.ejb.sessionbean; import javax.ejb.sessioncontext; import java.math.*; public class ConverterBean implements SessionBean { BigDecimal yenrate = new BigDecimal("121.6000"); BigDecimal eurorate = new BigDecimal("0.0077"); public BigDecimal dollartoyen(bigdecimal dollars) { BigDecimal result = dollars.multiply(yenrate); 32 http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html (31.03.04), Kap. 24.

21 return result.setscale(2, BigDecimal.ROUND_UP); public BigDecimal yentoeuro(bigdecimal yen) { BigDecimal result = yen.multiply(eurorate); return result.setscale(2, BigDecimal.ROUND_UP); public ConverterBean() { public void ejbcreate() { public void ejbremove() { public void ejbactivate() { public void ejbpassivate() { public void setsessioncontext(sessioncontext sc) { Application Client (ConverterClient.java) import converter.converter; import converter.converterhome; import javax.naming.context; import javax.naming.initialcontext; import javax.rmi.portableremoteobject; import java.math.bigdecimal; public class ConverterClient { public static void main(string[] args) { try { Context initial = new InitialContext(); Context myenv = (Context) initial.lookup("java:comp/env"); Object objref = myenv.lookup("ejb/simpleconverter"); ConverterHome home = (ConverterHome) PortableRemoteObject.narrow(objref, ConverterHome.class); Converter currencyconverter = home.create(); BigDecimal param = new BigDecimal("100.00"); BigDecimal amount = currencyconverter.dollartoyen(param); System.out.println(amount); amount = currencyconverter.yentoeuro(param); System.out.println(amount); System.exit(0); catch (Exception ex) { System.err.println("Caught an unexpected exception!"); ex.printstacktrace();