|
jsp-develop.de presents: JSP meets Middleware (CORBA) |
| von shark, 08.07.2001 11:55:15 |
|
Im ersten Teil des Artikels "JSP meets Middleware" wurden die Grundlagen für die Anbindung der Java Server Pages Technologie an Middleware Systeme besprochen. Das nachfolgende Beispiel zeigt, wie von einer JSP-Seite eine Service Methode, die in einem CORBA Server abläuft, aufgerufen werden kann. Ausgehend von der folgenden IDL Datei "corba.idl" erzeugt man Java Klassendateien (Stubs), um von einem CORBA Client auf die Service Methoden eines CORBA Servers zuzugreifen. IDL-Datei "corba.idl": ------------------------------ module CorbaApp { interface JspToCorba { string CorbaService(); }; }; Nach Aufruf des "idltojava" Compilers in einer DOS Box werden die entsprechenden Java Klassen erzeugt. Aufruf des IDL Compilers: ------------------------------------- idltojava corba.idl Nach dem Compiler-Durchlauf werden die folgenden Java Dateien in dem Verzeichnis "CorbaApp" erzeugt: JspToCorbaHolder.java JspToCorbaHelper.java JspToCorba.java _JspToCorbaStub.java _JspToCorbaImplBase.java Die Java Dateien compiliert man mit dem Java Compiler zu Klassendateien. Aufruf des Java Compilers: -------------------------------------- javac *.java Nachdem die Klassendateien erzeugt wurden, kopiert man das komplette Verzeichnis in den Java Classpath (falls vor der Kompilierung noch nicht geschehen). Danach schreibt man die Klasse CorbaServant. Die Klasse CorbaServant enthält die Service Methoden des CORBA Servers (konform wie in der der "corba.idl" deklariert). Source Code der Klasse Corba Servant: --------------------------------------------------------- import CorbaApp.*; import org.omg.CosNaming.*; import org.omg.CosNaming.NamingContextPackage.*; import org.omg.CORBA.*; // CorbaServant ist von der Klasse _JspToCorbaImplBase abgeleitet class CorbaServant extends _JspToCorbaImplBase { // Service Methode des CORBA Servers public String CorbaService() { return("Service Methode des CORBA Servers aufgerufen ..."); } } Nachdem die Klasse CorbaServant realisiert wurde, programmiert man den CORBA Server und den CORBA Client. Source Code des CORBA Servers: -------------------------------------------------- import CorbaApp.*; import org.omg.CosNaming.*; import org.omg.CosNaming.NamingContextPackage.*; import org.omg.CORBA.*; public class CorbaServer { public static void main(String args[]) { try { // Object Request Broker initialisieren ORB orb = ORB.init(args, null); // Instanz der Klasse CorbaServant erzeugen CorbaServant oCorbaServant = new CorbaServant(); // Naming Context ermitteln org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService"); NamingContext nmRef = NamingContextHelper.narrow(objRef); // Bind der Obbjektreferenz im Naming Service durchfuehren NameComponent nmComponent = new NameComponent("Corba",""); NameComponent path[] = {nmComponent}; nmRef.rebind(path, oCorbaServant); // Instanz der Klasse Object erzeugen java.lang.Object oSync = new java.lang.Object(); System.out.println("CORBA Server gestartet ...\n"); // Auf Anfragen vom Client warten synchronized(oSync) { oSync.wait(); } } catch(Exception ex) { ex.printStackTrace(); } } } Source Code des CORBA Clients: ------------------------------------------------- package CorbaApp; import CorbaApp.*; import org.omg.CosNaming.*; import org.omg.CosNaming.NamingContextPackage.*; import org.omg.CORBA.*; public class CorbaClient { public JspToCorba initCorba(String pstrValues[]) { try { // Object Request Broker initialisieren ORB orb = ORB.init(pstrValues, null); // Naming Context ermitteln org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService"); NamingContext nmRef = NamingContextHelper.narrow(objRef); // Auflösung der Obbjektreferenz im Naming Service NameComponent nmComponent = new NameComponent("Corba",""); NameComponent path[] = {nmComponent}; JspToCorba corbaRef = JspToCorbaHelper.narrow(nmRef.resolve(path)); return(corbaRef); } catch(Exception ex) { ex.printStackTrace(); } return(null); } public String callServiceMethod(String pstrWhich, JspToCorba poCorbaRef) { if(pstrWhich.equals("ServiceMethod")) { // Aufruf der Service Methode im CORBA Server String strCorbaMessage = poCorbaRef.CorbaService(); return(strCorbaMessage); } return(null); } } Der CORBA Client enthält die Methode "initCorba" zur Initialisierung des CORBA Systems und die Methode "callServiceMethod" zum Aufruf eines Services im CORBA Server. Nach dem Übersetzen des Corba Servers und Clients kopiert man den Client (wenn noch nicht geschehen) in das entsprechende Verzeichnis des Java Klassenpfades (Classpath). In unserem Fall ist es das Verzeichnis "CorbaApp", in dem auch die Dateien, die von dem IDL Compiler erzeugt wurden liegen. Abschliessend bindet man den CORBA Client in eine JSP-Seite ein und startet das CORBA System. Source Code der JSP-Seite: ---------------------------------------- <%@ page language= "java" contentType="text/html"%> <%@ page import = "CorbaApp.*"%> <% // Instanz der Klasse CORBA Client erzeugen CorbaClient oCorbaClient = new CorbaClient(); // CORBA Client initialisieren String strValues[] = {"-ORBInitialPort 900"}; JspToCorba corbaRef = oCorbaClient.initCorba(strValues); // Pruefen ob die Objetreferenz gueltig ist if(null != corbaRef) { // Service Methode aufrufen und Message lesen String strMessage = oCorbaClient.callServiceMethod("ServiceMethod", corbaRef); // Pruefen ob die Message vorhanden ist if(null != strMessage) { // Message ausgeben out.println(strMessage); } else { out.println("Message konnte nicht gelesen werden!"); } } else { out.println("CORBA Client Initialisierung fehlgeschlagen!"); } %> Das CORBA System startet man folgendermaßen: ------------------------------------------------------------------------- (1) CORBA Naming Service in einer DOS Box starten: "start tnameserv" (2) CORBA Server in der DOS Box starten: "start java CorbaServer -ORBInitialPort 900" (3) JSP-Seite im Browser aufrufen Der CORBA Naming Service wird in unserem Beispiel ohne einen speziellen Port gestartet, sodass automatisch der Standardport "900" verwendet wird. Abschliessend ist noch anzumerken, dass der IDL Compiler "idltojava" einen C Präprozessor benötigt. Es muss also eine C/C++ Umgebung z.B.: Visual Studio installiert worden sein. Das besprochene Beispiel ist eine sehr gute Alternative zu Enterprise Java Beans und für den Fall das ein kommerzielles CORBA System verwendet wird, bestens geeignet für die Integration von Applikationen, die nicht mit der Programmiersprache Java implementiert worden sind. Die Kombination eines CORBA Systems mit einem Application Server ist eine gute Basis. Für diesen Fall, kann das CORBA System die Brücke zwischen bereits im Unternehmen etablierten Anwendungen und einer neuen zu realisierenden E-Business Lösung sein. |
|
URL dieses Beitrags: http://www.jsp-develop.de/forumbeitrag/view/119/ |