|
|
|
JSP meets Middleware (CORBA)

|
| von shark, 08.07.2001 11:55:15 |
[vote] |
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. |
|
|
Hinweis: Auf dieser Seite liegen Links zu anderen Seiten im Internet. Für alle diese Links gilt: Wir
betonen ausdrücklich, daß wir keinerlei Einfluß auf die Gestaltung und die Inhalte der gelinkten Seiten
haben. Deshalb distanzieren wir uns hiermit ausdrücklich von allen Inhalten aller gelinkten Seiten auf
dieser Homepage und machen uns ihre Inhalte nicht zueigen. Diese Erklärung gilt für alle auf unserer
Homepage angebrachten Links
Redaktion/Betreiber von JSP-Develop übernehmen keinerlei Gewährleistung und Verantwortung für die Richtig-
und/oder Vollständigkeit von den auf den Webseiten JSP-Develop veröffentlichten Source Codes.
Die Verantwortung der Verwendung/Anwendung sowie etwaige Modifikation der hier veröffentlichten Sourcen
obliegt einzig dem Benutzer der Webseite, welche die veröffentlichten Sourcen in einer Applikation/Anwendung
einsetzt. Durch das Kopieren und/oder Benutzen der Sourcen in einer Applikation/Anwendung
bzw. etwaigen Abschriften wird dieser Rechtshinweis anerkannt.
Java, JSP, JavaServer Pages, J2EE, EJB, JDBC, JNDI, JTA, Sun, Sun Microsystems are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and in other countries.
IBM, WebSphere are trademarks or registered trademarks of International Business Machines Corporation.
Other trademarks and registered trademarks are the property of their respective owners.
|
|
|
|