5. September 2010  
  Suche:
 
  Basics
  Code-Galerie
  Forum
  FAQ
  Tipps & Tricks
  Literatur
  Knowledge Base
  Workshops
  JSP-Hosting
  JSP-Engines
  Jobbörse
  Links
  JSP-Sites
  Newsletter
  JSP-Test
  Impressum
  Username:
  
  Passwort:
  
  

  Jetzt registrieren
  Warum registrieren?

  Valid HTML 4.01!
  Valid CSS!

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.
[Druckansicht]    [Beitrag versenden]
<< zurück  Kommentieren


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.