一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

邁向 Geronimo CORBA 互操作性

 gyb98 2011-03-18

邁向 Geronimo CORBA 互操作性

讓 CORBA 客戶機訪問您的 EJB

Sing Li (westmakaha@yahoo.com), 作者, Wrox Press
David Jencks (david_jencks@yahoo.com), Geronimo 專家, EMC

簡介: 與大型遺留系統(tǒng)的無縫地交互、實現(xiàn)對自動化系統(tǒng)的實時控制,常常被認(rèn)為是應(yīng)用今天的敏捷 Java? 2 Platform, Enterprise Edition (J2EE) 服務(wù)器的最后領(lǐng)域。作為開發(fā)人員,需要能利用現(xiàn)有的遺留系統(tǒng)投資,并把異構(gòu)的解決方案結(jié)合到系統(tǒng)中??纯?Apache Geronimo 服務(wù)器的最新版本(撰寫本文時處于 Milestone 5)如何通過成熟健壯的分布式對象標(biāo)準(zhǔn) Common Object Request Broker Architecture (CORBA),提供了這類系統(tǒng)的互操作性。

發(fā)布日期: 2005 年 12 月 22 日 
級別: 中級 
訪問情況 297 次瀏覽 
建議: 0 (添加評論)

1 star2 stars3 stars4 stars5 stars 平均分 (共 1 個評分 )

Apache Geronimo 服務(wù)器的最新版本 M5(即 Milestone 5,參見 參考資料 中的鏈接),使用 CORBA 對與外部系統(tǒng)的互操作性進(jìn)行了改進(jìn)。如果您曾經(jīng)接觸過 CORBA,就會明白這種能力的重要意義,以及在特定項目中對 J2EE 服務(wù)器生存能力的影響。

CORBA 不但是很多遺留計算系統(tǒng) —— 從大型機到超級計算機 —— 選擇的外部接口機制,還作為一種分布式對象機制被大型的實時控制至關(guān)重要的電信業(yè)、銀行業(yè)和國防系統(tǒng)廣泛采用。這些系統(tǒng)中,很多時候需要訪問 J2EE 服務(wù)器域中管理的信息和業(yè)務(wù)邏輯(或者相反)。要平穩(wěn)地實現(xiàn)這種訪問,而且不需要復(fù)雜的自定義編碼,CORBA 和 J2EE 組件之間的互操作性是最基本的要求。

Geronimo 的 CORBA 互操作實現(xiàn)允許 CORBA 客戶機應(yīng)用程序訪問 Enterprise JavaBeans? (EJB) 中包含的業(yè)務(wù)邏輯和 J2EE 業(yè)務(wù)層管理的數(shù)據(jù)。

本文示范了如何利用 Geronimo M5 的 CORBA 互操作能力。提供了一個完整的 CORBA 客戶機訪問 Geronimo 服務(wù)器管理的業(yè)務(wù)層 EJB 的例子??蛻魴C利用了 Geronimo 客戶機應(yīng)用程序容器提供的支持。

CORBA 概述

CORBA 為分布式對象間的交互提供了基于標(biāo)準(zhǔn)的基礎(chǔ)設(shè)施。它允許運行在不同硬件、不同操作系統(tǒng)上用不同編程語言編寫的軟件組件通過網(wǎng)絡(luò)進(jìn)行通信、協(xié)作和執(zhí)行生產(chǎn)性任務(wù)。

CORBA 系統(tǒng)通過將對象之間的交互定義為明確的接口完成了這一不可思議的任務(wù)。要使用分布式對象的服務(wù),必須通過接口與之交互??蛻魴C不知道,也不需要知道接口是如何實現(xiàn)的,甚至是在何處實現(xiàn)的。圖 1 說明了典型的 CORBA 系統(tǒng)的工作方式。


圖 1. CORBA 中的對象交互
 

實現(xiàn)位置透明性

在 圖 1 中,客戶機代碼通過接口使用服務(wù)器對象。事實上,接口是通過客戶機本地的存根對象實現(xiàn)的。對客戶機來說,它僅僅與本地的存根對象交互。在幕后,存根對象實現(xiàn)了和遠(yuǎn)程服務(wù)器對象同樣的接口。客戶機調(diào)用接口方法時,存根對象將調(diào)用轉(zhuǎn)發(fā)給稱為Object Request Broker (ORB) 的 CORBA 組件??蛻魴C的調(diào)用代碼不需要知道調(diào)用實際上是通過存根進(jìn)行的。

委派給 ORB

ORB 是 CORBA 基礎(chǔ)設(shè)施的關(guān)鍵一環(huán)。它負(fù)責(zé)本地化服務(wù)器對象(無論是否通過網(wǎng)絡(luò))然后把存根的調(diào)用發(fā)送到服務(wù)器。調(diào)用完成后,返回值通過網(wǎng)絡(luò)返給 ORB,ORB 再交給存根。然后存根返回給客戶機調(diào)用。對于客戶機而言,存根對象就是接口的實現(xiàn)者。

在服務(wù)器端,ORB 也有重要的作用。它必須接收來自客戶機 ORB 的方法調(diào)用,并轉(zhuǎn)發(fā)給基干(skeleton)對象,后者和客戶端的存根直接對應(yīng)。從服務(wù)器邏輯的角度來看它隱藏了網(wǎng)絡(luò)調(diào)用,即實現(xiàn)了接口?;蓪ο髮Ψ?wù)器機器上實現(xiàn)接口的對象進(jìn)行服務(wù)器端本地調(diào)用。

不同 ORB 實現(xiàn)進(jìn)行通信的需要

ORB 的具體實現(xiàn)細(xì)節(jié)因廠商而異。對于一家廠商來說,ORB 實現(xiàn)可能作為鏈接到客戶機/服務(wù)器可執(zhí)行文件的庫實現(xiàn)。另一家則可能是庫代碼層和運行在同一機器上的守護(hù)進(jìn)程之間的協(xié)作。無論如何,不同廠商的 CORBA ORB 都能夠互相對話,這要感謝 CORBA Internet 通信協(xié)議 Internet InterORB Protocol (IIOP) 的標(biāo)準(zhǔn)化。圖 1 說明了 ORB 通過 IIOP 通信的情況。

ORB 之間通過 IIOP 的互操作性

IIOP 是 General Inter-ORB Protocol (GIOP) 在 Internet TCP/IP 網(wǎng)絡(luò)上的規(guī)范。從 CORBA 2.0 開始,該規(guī)范就要求不同廠商的 ORB 必須能夠一起工作。目前,IIOP 廣泛用于實現(xiàn)不同 ORB 實現(xiàn)之間、Java Remote Method Invocation (RMI) 和 CORBA 系統(tǒng)之間的互操作。

RMI-IIOP:支持 Java 到 CORBA 互操作

在 Java Development Kit (JDK) 1.4 及以后的版本中,可以選擇使用 IIOP 協(xié)議在 Java RMI 對象之間通信。過去,只有私有的 Java Remote Messaging Protocol (JRMP) 用于 RMI。JRMP 和 IIOP 都用于通過網(wǎng)絡(luò)發(fā)送消息調(diào)用信息或者返回數(shù)據(jù)。RMI 對象能夠使用 IIOP 意味著基于 Java 的 RMI 客戶機可以訪問 CORBA 遠(yuǎn)程對象,CORBA 客戶機也可以訪問 RMI 實現(xiàn)的對象。對于讓 Java 對象能夠訪問遺留的基于 CORBA 的資源,以及讓其他 CORBA 客戶機訪問開放的 Java 服務(wù)器資源(如 EJB),這種互操作非常重要。

CORBA IDL —— 基于接口的遠(yuǎn)程對象訪問

CORBA 系統(tǒng)中的對象完全通過接口來訪問。在 CORBA 中,接口用一種標(biāo)準(zhǔn)格式 Interface Definition Language(接口定義語言,IDL)來定義,IDL 獨立于具體的編程語言。圖 2 說明了 IDL 如何將服務(wù)器對象和客戶機結(jié)合在一起。


圖 2. 從 IDL 生成存根和基干
 

對于支持的每種編程語言,都提供了生成原生語言綁定的工具。綁定 通常是用支持的編程語言生成的源代碼(如 Java 綁定是 Java 代碼,C++ 綁定是 C++ 源代碼)。生成的代碼然后被編譯,并與客戶機和源代碼鏈接在一起。雖然綁定是文本源代碼文件,與大多數(shù)生成的代碼一樣很容易修改,但是千萬不要這么做,因為重新生成后會清除掉所有的修改。生成的代碼包括客戶端的存根(實現(xiàn)必要的接口)和服務(wù)器端的基干。還包括一些必要的 helper 方法,用于實現(xiàn)相應(yīng)編程語言數(shù)據(jù)類型間的轉(zhuǎn)換。

公共 CORBA 服務(wù)

CORBA 體系結(jié)構(gòu)提出了對象總線(object bus)的概念。通過 ORB 連接到該總線的任何客戶機或服務(wù)器實現(xiàn)都可以交互和使用一組明確定義的、標(biāo)準(zhǔn)化的 CORBA 服務(wù)。圖 3 解釋了 CORBA 總線。


圖 3. CORBA 對象總線
 

圖 3 中,服務(wù)包括命名服務(wù)器、接口存儲庫(用于存儲和檢索接口及類型描述)和時間服務(wù)。

命名服務(wù)

CORBA 中經(jīng)常使用命名服務(wù)。對象管理組(即 OMG,請參閱 參考資料 中的 OMG 鏈接)規(guī)定了一種 Interoperable Naming Service (INS)。這種思想非常簡單,與 RMI 類似。簡而言之,服務(wù)器創(chuàng)建遠(yuǎn)程可訪問對象的實例,使用 ORB 綁定它來接收發(fā)來的請求,然后使用眾所周知的或者廣為宣傳的文本名將該實例的可用性注冊到命名服務(wù)器。需要使用服務(wù)器上的服務(wù)的任何客戶機都能夠與命名服務(wù)聯(lián)系,使用文本名稱查找服務(wù)器來獲得遠(yuǎn)程對象引用。

使用 JNDI 統(tǒng)一對象引用查找

用 Java 編程語言編寫代碼時,J2EE 和 Java Naming and Directory Interface (JNDI) 的集成允許開發(fā)人員編寫可處理不同目錄和命名服務(wù)的對象查找代碼??蛻魴C代碼調(diào)用 JNDI,JNDI 在底層通過提供程序?qū)崿F(xiàn)轉(zhuǎn)發(fā)到可用的服務(wù)。JDK 中提供了 CosNaming 提供程序,允許 JNDI 代碼使用 CORBA 命名服務(wù)查找對象。圖 4 說明了使用 JNDI 查找遠(yuǎn)程 CORBA 對象。


圖 4. 基于 JNDI 的 CORBA 查找
 

圖 4 還表明,與基于 JNDI 的 CORBA 查找一起使用時,RMI-IIOP 很容易讓開發(fā)人員編制一個能同時用于 RMI 和 CORBA 服務(wù)器的代碼庫。

Geronimo 的 CORBA 互操作實現(xiàn)

Geronimo 的 ORB 選擇

Geronimo M5 依賴于 Sun ORB,這一點限制了 Geronimo 的互操作特性只能用于 Sun Java Virtual Machines (JVM)。目前,Apache Software Foundation 正在評估第三方公司貢獻(xiàn)的 ORB,可能包含到將來的 Geronimo 版本中。如果該捐獻(xiàn)被接受,就可以徹底擺脫對 Sun ORB 的依賴,從而使 Geronimo 的互操作特性可在任何 JVM 上工作。

有了這些基本的了解后,現(xiàn)在可以看看如何實現(xiàn) Geronimo 與外部 CORBA 客戶機和組件的互操作了。圖 5 顯示了常見的幾種互操作。其中包括:

  • Web 層或 EJB 層 Java 客戶機調(diào)用外部 CORBA 組件的方法。
  • 通過 IIOP 公開的在 Geronimo 服務(wù)器中運行的 EJB 組件供基于 CORBA 的客戶機遠(yuǎn)程訪問。
  • 應(yīng)用程序客戶機使用 Geronimo 客戶機應(yīng)用程序容器訪問遠(yuǎn)程 CORBA 組件。

上述情況下,Geronimo 中的客戶機或服務(wù)器代碼都必須通過 IIOP 和 ORB 與外部 CORBA 組件通信。JDK 標(biāo)準(zhǔn)發(fā)行版帶有 Sun Microsystems 的 ORB 實現(xiàn),常常被稱作 Sun ORB。Geronimo M5 利用這種 ORB 進(jìn)行互操作。


圖 5. Geronimo CORBA 互操作場景
 

啟用 CORBA 互操作 —— 只需要配置

使用 Geronimo,在部署的時候通過配置可以將 EJB 公開為 CORBA 服務(wù)器。這就是說 EJB 中不需要任何特殊的代碼。事實上,任何已有的 EJB 都能公開為 CORBA 服務(wù)器對象。

我們的例子中,一個簡單的無狀態(tài)會話 bean 公開了一個方法來讀取服務(wù)器端的時間戳。EJB 接口的代碼如 清單 1 所示。


清單 1. 服務(wù)器時間戳無狀態(tài)會話 EJB 的 EJB 接口
package com.ibm.dw.geronimo.corba;
public interface ServerTimestamp extends javax.ejb.EJBObject {
	public String getTimestamp() throws java.rmi.RemoteException;
}

該 EJB 接口的具體實現(xiàn)在 com.ibm.dw.geronimo.corba.ServerTimestampImpl 類中,如 清單 2 所示。


清單 2. 服務(wù)器時間戳 EJB 的實現(xiàn)
package com.ibm.dw.geronimo.corba;
import java.util.Date;
public class ServerTimestampImpl implements javax.ejb.SessionBean {	
	public String getTimestamp(){
		return "This is the current server time " + new Date();
	}
	private javax.ejb.SessionContext mySessionCtx;
	public javax.ejb.SessionContext getSessionContext() {
		return mySessionCtx;
	}
	public void setSessionContext(javax.ejb.SessionContext ctx) {
		mySessionCtx = ctx;
	}
	public void ejbCreate() throws javax.ejb.CreateException {
	}
	public void ejbActivate() {
	}
	public void ejbPassivate() {
	}
	public void ejbRemove() {
	}
}

注意,清單 1 和 清單 2 中都沒有特殊的 CORBA 代碼。事實上,即便 EJB 的部署描述符也非常普通。清單 3 顯示了時間戳 EJB 的部署描述符 ejb-jar.xml。


清單 3. 服務(wù)器時間戳 EJB 的部署描述符 ejb-jar.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN' 
'http://java./dtd/ejb-jar_2_0.dtd'>
<ejb-jar>
  <enterprise-beans>
      <session>
          <display-name>Server timestamp Stateless Session Bean</display-name>
          <ejb-name>ServerTimestampEJB</ejb-name>
          <home>com.ibm.dw.geronimo.corba.ServerTimestampHome</home>
	    <remote>com.ibm.dw.geronimo.corba.ServerTimestamp</remote>
          <ejb-class>com.ibm.dw.geronimo.corba.ServerTimestampImpl</ejb-class>
          <session-type>Stateless</session-type>
          <transaction-type>Container</transaction-type>
      </session>
   </enterprise-beans>
</ejb-jar>

清單 3 中普普通通的 ejb-jar.xml 可以讓 EJB JAR 不需要修改就能部署在 Geronimo 或其他 J2EE 1.4 服務(wù)器上。

在定制的部署計劃中公開 EJB 以供 CORBA 訪問

為了配置 EJB 讓 CORBA 訪問,需要為其創(chuàng)建一個專門的 Geronimo 部署計劃。部署計劃包含在 dp.xml 文件中。清單 4 顯示了該計劃文件的一部分,設(shè)置 EJB 以供 CORBA 客戶機訪問。


清單 4. 配置服務(wù)器時間戳 EJB 供 CORBA 訪問
<?xml version="1.0" encoding="UTF-8"?>
<application
    xmlns="http://geronimo./xml/ns/j2ee/application-1.0"
    configId="com/ibm/dw/geronimo/corba/ServerTimestamp"
    parentId="org/apache/geronimo/ServerCORBA">
    <import>
        <uri>org/apache/geronimo/Security</uri> 
    </import>
    <module>
        <ejb>dwcorba1-ejbs.jar</ejb>
        <openejb-jar
            xmlns="http://www./xml/ns/openejb-jar-2.0"
            configId="ServerTimestampEJB"
            parentId="org/apache/geronimo/ServerCORBA">
            <enterprise-beans>
                <session>
                    <ejb-name>ServerTimestampEJB</ejb-name>
                    <jndi-name>ServerTimestampEJB</jndi-name>
                     <tss-link>IdentityTokenNoSecurity</tss-link> 
                </session>
            </enterprise-beans>
        </openejb-jar>
    </module>
...   

清單 4 中可以看到,我們把部署的 .ear 文件的父配置設(shè)為 org/apache/geronimo/ServerCORBA 配置。該配置文件包括標(biāo)準(zhǔn)org/apache/geronimo/Server 配置的全部內(nèi)容,還有一些 CORBA 專用服務(wù)器端 GBeans 的定義。<tss-link> 元素用屬性值IdentityTokenNoSecurity 指定了安全處理 GBeans 中的一個。下一節(jié)介紹該 GBean 的操作。

CORBA 2.3 CSIv2 安全需求的 GBean 實現(xiàn)

Geronimo 的 CORBA 實現(xiàn)和完全遵循 CORBA 2.3。CORBA 2.3 要求實現(xiàn)一個安全層,稱為 Common Security Interoperability, Version 2 (CSIv2)。在通信之前,該層在 CORBA 客戶機和服務(wù)器之間協(xié)商需要的安全級別。(在以后的文章中再詳細(xì)討論 CSIv2 的細(xì)節(jié)。)

Geronimo M5 中,CSIv2 特性是作為一組 GBean 實現(xiàn)的,可以在將 EJB 公開為 CORBA 訪問時配置。

清單 4 中,<tss-link> 選擇了一種 Target Security Service (TSS) 實現(xiàn) GBean。它選擇的是 IdentityTokenNoSecurity,這部署在 org/apache/geronimo/ServerCORBA 部署計劃中,以允許不通過身份驗證或加密來進(jìn)行訪問。

公開 EJB 供 CORBA 訪問需要做的配置就這么簡單。父配置 org/apache/geronimo/ServerCORBA 在模塊啟動時啟動 CORBA 命名服務(wù)并將該 EJB 注冊為可用的 CORBA 服務(wù)器對象。

創(chuàng)建基于 Swing 的 CORBA 客戶機應(yīng)用程序

要作為 CORBA 對象訪問 EJB,需要創(chuàng)建一個簡單的 GUI 客戶機應(yīng)用程序,運行在 Geronimo 應(yīng)用程序客戶機容器中。該客戶機的源代碼組件如表 2 所示??梢愿鶕?jù)代碼發(fā)行版交叉參考該表。

表 2. CORBA 客戶機應(yīng)用程序的組件
代碼組件說明
TimestampDisplayClient.java客戶機應(yīng)用程序的主類,非常簡單,構(gòu)造 TimestampFrame 的實例并顯示它。
TimestampFrame.javaJFrame 子類,使用 JDK 內(nèi)置的 RMI-IIOP 訪問遠(yuǎn)程 CORBA 服務(wù)器時間戳對象。它從遠(yuǎn)程 CORBA 服務(wù)器獲得時間戳然后顯示在自己的 Swing GUI 中。
SecurityCallbackHandler.javaClient Security Service (CSS) 處理 GBean 調(diào)用該處理程序。當(dāng)服務(wù)器需要用戶名和口令進(jìn)行身份驗證時,該處理程序通常顯示一個用戶界面來收集這些信息。這里的例子沒有使用這個處理程序。
com.ibm.dw.geronimo.corba.ServerTimestamp.class
com.ibm.dw.geronimo.corba.ServerTimestampHome.class
正確地編譯 TimestampFrame.java 需要這些 EJB Java 類文件。

TimestampFrame.java 的源代碼如 清單 5 所示。這是調(diào)用遠(yuǎn)程 EJB/CORBA 對象方法的具體類。


清單 5. TimestampFrame.java 中的 RMI-IIOP 調(diào)用
package com.ibm.dw.geronimo.corba.client;
import java.awt.BorderLayout;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.Vector;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import com.ibm.dw.geronimo.corba.ServerTimestampHome;
import com.ibm.dw.geronimo.corba.ServerTimestamp;
public class TimestampFrame extends JFrame{
	public TimestampFrame(String title) {
		super(title);
	}
	public void init() {
		JLabel timeStamp = new JLabel(getTime());
		JPanel pane = new JPanel();
		pane.setLayout(new BorderLayout());
		pane.add(timeStamp, BorderLayout.CENTER);
		this.getContentPane().add(pane);
	}
	private String getTime() {
	  String retval = "";
		ServerTimestamp ts = null;
		try {
		Context ic = new InitialContext();
			Object o = 
                ic.lookup("java:comp/env/ServerTimestampEJB");
			 ServerTimestampHome home = (ServerTimestampHome)
			 PortableRemoteObject.narrow(o, 
                  ServerTimestampHome.class);
		    ts = home.create();
		    retval = ts.getTimestamp();
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return retval;
	}
	
}

清單 5 中,使用 InitialContext 通過 JNDI 查找來獲得對象引用。得到的對象引用使用 PortableRemoteObject.narrow() 縮小轉(zhuǎn)換為 EJB Home 接口。該代碼可以通過 IIOP 訪問遠(yuǎn)程 CORBA 對象和遠(yuǎn)程 RMI 對象。

動態(tài)運行時存根生成

與使用 IDL 生成的常規(guī) Java 綁定(源代碼)不同,Geronimo 可以動態(tài)生成二進(jìn)制形式的 CORBA 存根??蛻魴C應(yīng)用程序會利用這種動態(tài)存根生成能力;存根是在請求 ORB 時生成的。

圖 6 顯示了對應(yīng)用程序客戶機和服務(wù)器端 EJB 可用的 Geronimo CORBA 支持。


圖 6. Geronimo 的 CORBA 支持
 

設(shè)置 CORBA 客戶機支持

應(yīng)用程序客戶機的部署計劃中,配置了一個處理 CSIv2 客戶端的 GBean,稱為 CSS。deploy.xml 文件指定了和 NosSecurity 名關(guān)聯(lián)的 CSS 實例。清單 6 說明了應(yīng)用程序客戶機需要的配置。


清單 6. 配置客戶機應(yīng)用程序進(jìn)行 CORBA 訪問
<module>
   <java>dwcorba1-clientapp.jar</java>
   <application-client xmlns="http://geronimo./xml/ns/j2ee/application-client"
            configId="client"
            clientConfigId="com/ibm/dw/geronimo/corba/ServerTimestampClient"
            clientParentId="org/apache/geronimo/ClientCORBA">
            <import>
                <uri>org/apache/geronimo/ClientSecurity</uri>
            </import>
            <ejb-ref>
                <ref-name>ServerTimestampEJB</ref-name>
                <ns-corbaloc>corbaloc::localhost:1050/NameService</ns-corbaloc>
                <name>ServerTimestampEJB</name>
                <css-link>NoSecurity</css-link>
            </ejb-ref>
    <realm-name>client-properties-realm</realm-name>
            <callback-handler>
               com.ibm.dw.geronimo.corba.client.SecurityCallbackHandler
            </callback-handler>

        </application-client>
</module>

清單 6 中,客戶機應(yīng)用程序的父配置被設(shè)置為 org/geronimo/corba/ClientCORBA,該文件中配置了安全 GBean 實例。<ns-corbaloc> 元素告訴 Geronimo 客戶機應(yīng)用程序容器到何處尋找 CORBA 命名服務(wù)。<css-link> 標(biāo)記指定了要使用的安全處理 GBean。<callback-handler> 標(biāo)記指定了請求身份驗證信息時 CSS GBean 使用的回調(diào)方法。

對 EJB 運行 CORBA 客戶機

在 Geronimo 安裝的 bin 目錄中找到 startup.bat 文件。需要做一些修改,如 清單 7 中突出顯示的代碼。其中增加了一個必需的屬性來指定 Geronimo ORB 支持類。(未來的 Geronimo 版本可能會簡化該過程。)


清單 7. startup.bat 文件的修改 
for %%z in (%CUR_DIR%) do set CUR_DIR=%%~sz

set CORBA_OPTS=-Dorg.openejb.corba.UtilDelegateClass=
  com.sun.corba.se.internal.POA.ShutdownUtilDelegate
-Dorg.omg.CORBA.ORBSingletonClass=com.sun.corba.se.internal.corba.ORBSingleton
-Dorg.omg.CORBA.ORBClass=org.openejb.corba.sunorb.OpenEJBORB 
-Djavax.rmi.CORBA.PortableRemoteObjectClass=
  com.sun.corba.se.internal.javax.rmi.PortableRemoteObject
-Djavax.rmi.CORBA.UtilClass=org.openejb.corba.util.UtilDelegateImpl

@rem Set the path to the server.jar
set SERVER_JAR="%~dp0server.jar"
for %%z in (%SERVER_JAR%) do set SERVER_JAR=%%~sz
:CheckServerJar
......
:StartServer
echo on

%JAVA% %CORBA_OPTS% -jar %SERVER_JAR% %ARGS%


清單 7 中的選項必須作為連續(xù)的一行輸入。將提供的 startup.bat 文件粘貼到 M5 bin 目錄中可能更簡單。使用這個修改后的 startup.bat 啟動服務(wù)器。

本文還提供了構(gòu)建該例子的 Ant 構(gòu)建文件。需要根據(jù) Geronimo 安裝目錄對 build.xml 作相應(yīng)的修改。構(gòu)建該項目使用下列命令:

ant ear

然后可以在 dist 子目錄中找到 dwcorba1.ear。要將包含 EJB 和客戶機應(yīng)用程序的 EAR 部署到 Geronimo 中,請在 Geronimo 安裝目錄中運行下列命令:

java -jar bin/deployer.jar --user=system --password=manager deploy dwcorba1.ear deploy.xml

一定要將 dwcorba1.ear 和 deploy.xml 文件移動到同一目錄中。

要運行客戶機應(yīng)用程序,請在源代碼發(fā)行版中運行 runclient.bat 文件。該批處理文件按照和 startup.bat 相同的方式設(shè)置 ORB 支持屬性,不過這一次是對客戶機的 Java 虛擬機。runclient.bat 文件包含以下內(nèi)容:


清單 8. Runclient.bat 文件代碼
java -Djavax.rmi.CORBA.UtilClass=org.openejb.corba.util.UtilDelegateImpl
-Dorg.openejb.corba.UtilDelegateClass=com.sun.corba.se.internal.POA.ShutdownUtilDelegate 
  -Dorg.omg.CORBA.ORBSingletonClass=com.sun.corba.se.internal.corba.ORBSingleton 
  -Dorg.omg.CORBA.ORBClass=org.openejb.corba.sunorb.OpenEJBORB 
  -Djavax.rmi.CORBA.PortableRemoteObjectClass=
    com.sun.corba.se.internal.javax.rmi.PortableRemoteObject  
  -jar bin/client.jar com/ibm/dw/geronimo/corba/ServerTimestampClient

運行該客戶機時,將在 GUI 中顯示服務(wù)器的時間戳。該時間戳是從 CORBA 遠(yuǎn)程對象獲得的,該對象實際上由遠(yuǎn)程 Geronimo EJB 處理。圖 7 顯示了客戶機成功運行后的結(jié)果。


圖 7. 顯示服務(wù)器時間戳的應(yīng)用程序客戶機
 

結(jié)束語

本文介紹了如何集成異構(gòu)的解決方案和利用已有的遺留系統(tǒng)投資,這是現(xiàn)代企業(yè)中經(jīng)常面臨的一項任務(wù)。CORBA 已經(jīng)證明是一種有效的解決方案,已經(jīng)部署在很多企業(yè)中。Apache Geronimo 組件與 CORBA 組件自由交互的能力,使得我們可以用最新的工具和編程方法論在現(xiàn)代 J2EE 平臺上構(gòu)建新的應(yīng)用程序。


下載

描述名字大小下載方法
Source code Geronimo CORBA examplecode.zip300KBHTTP

關(guān)于下載方法的信息


參考資料

學(xué)習(xí)

獲得產(chǎn)品和技術(shù)

  • 使用 IBM 試用軟件 革新您的下一個開放源碼開發(fā)項目,可以通過下載或從 DVD 中獲得這些軟件。

討論

作者簡介

Sing Li 的照片

Sing Li 是一位顧問和自由作家。他曾經(jīng)參與 Beginning JavaServer Pages、 Professional Apache Tomcat 5Pro JSP - Third Edition、Early Adopter JXTAProfessional Jini、 Beginning J2ME: From Novice to Professional, Third Edition 和其他書籍的編寫。他還定期為技術(shù)雜志撰稿,也是 VON 和 P2P 發(fā)展的積極傳道者??梢酝ㄟ^westmakaha@yahoo.com 與 Sing 聯(lián)系。

David Jencks

研究過數(shù)學(xué),從事過生物化學(xué),做過大鍵琴制作者之后,David Jencks 又對軟件工程發(fā)生了興趣。他為多個開放源碼項目作出過重要的貢獻(xiàn),包括 Jaybird 和最重要的 Geronimo。可以通過 david_jencks@yahoo.com 與 David 聯(lián)系。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    神马午夜福利一区二区| 99久免费精品视频在线观| 欧美有码黄片免费在线视频| 欧美日韩国产自拍亚洲| 正在播放玩弄漂亮少妇高潮| 青青操视频在线观看国产| 一区二区三区国产日韩| 好东西一起分享老鸭窝| 亚洲欧美国产精品一区二区| 成人精品国产亚洲av久久| 成人午夜激情在线免费观看| 欧美成人高清在线播放| 日韩女优视频国产一区| 亚洲一区二区三区av高清| 国产麻豆一区二区三区在| 亚洲专区一区中文字幕| 国产精品激情在线观看| 日韩精品在线观看完整版| 国产又色又粗又黄又爽| 国产成人一区二区三区久久| 欧美日本精品视频在线观看| 久久这里只有精品中文字幕| 国产欧美日产中文一区| 高清亚洲精品中文字幕乱码| 国内欲色一区二区三区| 91欧美一区二区三区| 日本不卡视频在线观看| 欧美成人久久久免费播放| 日韩一区二区三区久久| 色综合伊人天天综合网中文| 永久福利盒子日韩日韩| 亚洲熟女诱惑一区二区| 国产精品免费自拍视频| 99久免费精品视频在线观| 可以在线看的欧美黄片| 欧美日韩国产自拍亚洲| 亚洲综合伊人五月天中文| 国产传媒精品视频一区| 亚洲人午夜精品射精日韩| 好吊视频一区二区在线| 国产欧美一区二区色综合|