本文HelloCorba參考 Getting Started with JavaTM IDLhtml
Java TM IDL is a technology for distributed objects--that is, objects interacting on different platforms across a network. Java IDL enables objects to interact regardless of whether they're written in the Java programming language or another language such as C, C++, COBOL, or others.
Common Object Request Brokerage Architecture (CORBA):公共對象請求代理體系結構
Object Request Broker:對象請求代理java
This figure shows how a one-method distributed object is shared between a CORBA client and server to implement the classic "Hello World" application. git
內容爲:macos
module HelloApp { interface Hello { string sayHello(); oneway void shutdown(); }; };
idlj -fall Hello.idl
安裝了jdk就會有idlj,idlj跟javac是在同一個目錄的;
若是出現異常java.io.FileNotFoundException: hello.idl (No such file or directory)
,可嘗試命令 idlj -fall ./Hello
這樣咱們獲得一個文件夾,裏面有6個文件,這6個文件是什麼來的呢?咱們先接着往下看oracle
_HelloStub.java Hello.java HelloHelper.java HelloHolder.java HelloOperations.java HelloPOA.java
HelloOperations.java
裏面才上咱們真正須要的操做,咱們須要實現的是抽象類HelloPOA
,其實就是實現接口HelloOperations
app
代碼在這:
https://docs.oracle.com/javas...less
代碼在這:
https://docs.oracle.com/javas...ide
參照:https://docs.oracle.com/javas...ui
做者運行環境爲:macos:10.13.4 (17E199) JDK1.8 iterm2spa
1.啓動orbd
orbd -ORBInitialPort 1050 -ORBInitialHost localhost&
(末尾的&是指以守護線程的方式啓動)
2.先開始server
java HelloServer -ORBInitialPort 1050 -ORBInitialHost localhost&
3.最後開啓client
java HelloClient -ORBInitialPort 1050 -ORBInitialHost localhost
4.結果
Hello world !!
定義操做
module centerModule{ interface CenterService{ boolean login( in string name, in string password); boolean register(in string name,in string password); boolean save(); };
};
定義用戶操做
module userModule{ interface UserService{ boolean add(in string startTime,in string endTime,in string item); string query(in string startTime,in string endTime); boolean delete(in string item); boolean clear(); string show(); boolean save(in string name); void init(in string name); }; };
在上面兩個文件所在的目錄使用idlj
命令編譯,輸入命令idlj -fall yourname.idl
ok,成功獲得下面文件
_OperationServiceStub.java OperationService.java OperationServiceHelper.java OperationServiceHolder.java OperationServiceOperations.java OperationServicePOA.java
同理,咱們能夠獲得
_UserServiceStub.java UserService.java UserServiceHelper.java UserServiceHolder.java UserServiceOperations.java UserServicePOA.java
全部的操做都源於service,server端暴露的也只有service的接口,其他的實現都是隱蔽的,因此,關鍵是實現好service。
CenterService
實現的功能有:登陸、註冊、保存
有一個成員變量Map<String,User>
Map<String,User>
來管理,登陸註冊都是對Map<String,User>
的操做Map<String,User>
序列化到本地的data/centerService文件,經過讀取data/centerService文件來反序列化Map<String,User>
,實現數據的持久化UserService
實現的功能有:添加、查詢、刪除、清除、保存。有一個成員變量List<Item>
List<Item>
來展開的List<Item>
序列化到本地的data/userName文件,爲每個註冊的用戶都獨立保存List<Item>
,經過讀取data/userName文件來反序列化List<Item>
ToDoListServer
是本程序的server
,做用有2個:
CenterService
,用於登陸註冊userService
。ToDoListClient是
是本程序的client
,做用是獲取服務端的CenterService
爲用戶提供登陸、註冊功能,而後爲註冊、登陸成功的用戶提供UserService
功能
基本思路跟RPC是同樣的,首先在服務端新建一個對象,註冊好了,而後再客戶端得到這個對象的引用,當調用這個引用的方法的時候,實際上會調用到客戶端的對象,而後再把結果返回給客戶端的對象引用。
在ToDoListServer
裏面,經過COBRA
將centerServiceImpl
對象綁定到COBRA
的根命名上下文(root naming context),它有個名字叫作NameService
,而後咱們給centerServiceImpl
對象取個名字,就叫centerService
,而後把CenterServiceImpl
綁定到NameService
下面。後面咱們就能夠經過centerService
獲取到咱們預先綁定的centerServiceImpl
對象了。
具體實現方案看代碼ToDoListServer.init()
和ToDoListClient.init
orbd -ORBInitialPort 1050 -ORBInitialHost localhost&
ToDoListServer
ToDoListClient
感謝看到最後的你,喜歡文章就點個👍再走啦 ^-^