JAVA的Corba用戶端 – 服務端 通訊實現

來源:互聯網
上載者:User

IDE:Eclipse 3.4.1

先在Eclipse建立兩個Java Project

1.然後定義 IDL .

 

內容如下:

 

module helloapp {    interface Hello {        string sayHello();        oneway void shutdown();    };};

 

 

 

**這裡注意, } 後面的 ";"一定要寫上,不然會編譯錯誤

 

2. 右鍵這個HelloApp.idl檔案

點擊,Change to parent folder in Shell

點擊OK , Eclipse會開啟Shell視圖,是命令列視圖,其實和CMD是一個作用.

這裡我們執行命令 : idlj -fall HellApp.idl

 

3. 然後我們到項目目錄(H:\DEVELOPING\UMM\workspace\testCorbaServer\src\server)下就能看到多產生了一個檔案夾 -- helloapp

開啟裡面試一些java介面類

4.在服務端建立一個package 名字跟 idl內容裡的module相同,這裡我們是 ' helloapp '

  然後把類複製到這個包下面

 

 

---------------------------------------

---------------------------------------

第二部分 實現IDL產生的類的介面

1.實現服務端

 內容如下:

package server;import org.omg.CORBA.ORB;import helloapp.HelloPOA;public class HelloImpl extends HelloPOA {    private ORB orb;    public void setOrb(ORB orb) {        this.orb = orb;    }    @Override    public String sayHello() {        return "\nHello World!!\n";    }    @Override    public void shutdown() {        orb.shutdown(false);    }}

 

以上,服務端的"服務"就寫好了, 下面還要在服務端寫一個入口類,把你的服務"註冊"上.

 

 內容如下:

 

package server;import helloapp.Hello;import helloapp.HelloHelper;import org.omg.CORBA.ORB;import org.omg.CORBA.ORBPackage.InvalidName;import org.omg.CosNaming.NameComponent;import org.omg.CosNaming.NamingContextExt;import org.omg.CosNaming.NamingContextExtHelper;import org.omg.CosNaming.NamingContextPackage.CannotProceed;import org.omg.CosNaming.NamingContextPackage.NotFound;import org.omg.PortableServer.POA;import org.omg.PortableServer.POAHelper;import org.omg.PortableServer.POAManagerPackage.AdapterInactive;import org.omg.PortableServer.POAPackage.ServantNotActive;import org.omg.PortableServer.POAPackage.WrongPolicy;public class Main {    public static void main(String[] args) {        try {            // 建立一個ORB執行個體            ORB orb = ORB.init(args, null);            // 得到一個RootPOA的引用,並啟用POAManager            POA rootpoa = POAHelper.narrow(orb                    .resolve_initial_references("RootPOA"));            rootpoa.the_POAManager().activate();                        // create servant and register it with ORB            // 建立一個HelloImpl執行個體(servant),並註冊到ORB上            HelloImpl helloImpl = new HelloImpl();            helloImpl.setOrb(orb);                        // 在服務中得到對象的引用            org.omg.CORBA.Object ref = rootpoa.servant_to_reference(helloImpl);            Hello href = HelloHelper.narrow(ref);                        //得到一個根名稱的上下文             org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");                         // Use NamingContextExt which is part of the Interoperable             // Naming Service (INS) specification.             NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);                          // 在命名內容中綁定這個對象            String name = "Hello";            NameComponent path[] = ncRef.to_name(name);            ncRef.rebind(path, href);                        System.out.println("HelloServer ready and waiting ...");             //啟動線程服務,等待用戶端的調用             orb.run();         } catch (InvalidName e) {            e.printStackTrace();        } catch (AdapterInactive e) {            e.printStackTrace();        } catch (ServantNotActive e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (WrongPolicy e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (org.omg.CosNaming.NamingContextPackage.InvalidName e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (NotFound e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (CannotProceed e) {            // TODO Auto-generated catch block            e.printStackTrace();        }                 System.out.println("HelloServer Exiting ...");     }}

 

 

 

注意 :這裡雖然是入口,可是不能直接右鍵run as - > Java Application

 

 

---------------------------------------

 

---------------------------------------

 

 實現用戶端

1.要把服務端產生的工具類複製到用戶端(最好包結構一致)

2.編寫用戶端調用.

內容如下:

package client;import helloapp.Hello;import helloapp.HelloHelper;import org.omg.CORBA.ORB;import org.omg.CosNaming.NamingContextExt;import org.omg.CosNaming.NamingContextExtHelper;public class HelloClient {    static Hello helloImpl;        public static void main(String[] args) {        try {            // 建立一個ORB執行個體            ORB orb = ORB.init(args, null);                        // 擷取根名稱上下文            org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");                        // Use NamingContextExt instead of NamingContext. This is             // part of the Interoperable naming Service.             NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);                         // 從上下文中擷取介面實現對象            String name = "Hello";            helloImpl = HelloHelper.narrow(ncRef.resolve_str(name));            System.out.println(helloImpl.sayHello());             System.out.println("asdfasdfdasf");         } catch (Exception e) {            e.printStackTrace();        }    }}

 

這樣 用戶端就完成調用了.  下面就是如何 運行起來了.

 

1. 運行CORBA服務 (直接CMD運行即可)

orbd -ORBInitialPort 1053 -ORBInitialHost 192.168.1.42

注: 192.168.1.42是我自己的本地IP地址  1053是連接埠

CORBA服務獨立於用戶端和服務端,相當於一條橋樑.

 

這個視窗不要關掉,游標會一直閃.

 

2.啟動服務端

啟動服務端需要main函數傳遞參數,所以我們要先配一些main函數的參數. :

 

 

點開:

 

Main就是我們服務端的入口函數.  之前有說過.

 

然後在arguments的program arguments: 寫入

 

-ORBInitialPort 1053    

 

 

 

連接埠1053是與之前的CORBA服務的連接埠對應的

 

 

 

服務端就配好了.   運行服務端.

 

不要關閉服務端. 

 

3.啟動用戶端

 

這裡我不用多說了,然後啟動運行,就可以看到運行結果了.

 

說明:  依照原文,可能環境不同會出些奇怪的問題,希望讀者先仔細檢查是否和原文有出入,或者檢查異常,還是不行的話,歡迎留言一起討論.

 CORBA的用戶端-服務端建立確實比較麻煩,不過如果之前已經搭建一套架構的話,開發以來也是事半功倍的.  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.