Java/CORBA

本文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

image_1ccdtjikt14od1lvr1nlrm1j59h9.png-3.8kB

HelloCorba說明

1. 新建文件Hello.idl

內容爲:macos

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

2. 輸入命令

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,其實就是實現接口HelloOperationsapp

3. HelloServer

代碼在這:
https://docs.oracle.com/javas...less

4. HelloClient

代碼在這:
https://docs.oracle.com/javas...ide

5. 運行

參照: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 !!

ToDoListCorba 設計思路

寫兩個module

定義操做

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

實現2個POA

全部的操做都源於service,server端暴露的也只有service的接口,其他的實現都是隱蔽的,因此,關鍵是實現好service。

CenterService實現的功能有:登陸、註冊、保存
有一個成員變量Map<String,User>

  1. 全部的註冊用戶使用一個Map<String,User>來管理,登陸註冊都是對Map<String,User>的操做
  2. 保存是將Map<String,User>序列化到本地的data/centerService文件,經過讀取data/centerService文件來反序列化Map<String,User>,實現數據的持久化

UserService實現的功能有:添加、查詢、刪除、清除、保存。有一個成員變量List<Item>

  1. CURD操做是針對List<Item>來展開的
  2. 保存是將List<Item>序列化到本地的data/userName文件,爲每個註冊的用戶都獨立保存List<Item>,經過讀取data/userName文件來反序列化List<Item>

server

ToDoListServer是本程序的server,做用有2個:

  1. 第一個做用是提供CenterService,用於登陸註冊
  2. 第二個做用是爲進行登陸、註冊操做的用戶提供userService

client

ToDoListClient是是本程序的client,做用是獲取服務端的CenterService爲用戶提供登陸、註冊功能,而後爲註冊、登陸成功的用戶提供UserService功能

基本原理分析

基本思路跟RPC是同樣的,首先在服務端新建一個對象,註冊好了,而後再客戶端得到這個對象的引用,當調用這個引用的方法的時候,實際上會調用到客戶端的對象,而後再把結果返回給客戶端的對象引用。

ToDoListServer裏面,經過COBRAcenterServiceImpl對象綁定到COBRA的根命名上下文(root naming context),它有個名字叫作NameService,而後咱們給centerServiceImpl對象取個名字,就叫centerService,而後把CenterServiceImpl綁定到NameService下面。後面咱們就能夠經過centerService獲取到咱們預先綁定的centerServiceImpl對象了。

具體實現方案看代碼ToDoListServer.init()ToDoListClient.init

演示流程

  1. 首先必須啓動orbd,命令:orbd -ORBInitialPort 1050 -ORBInitialHost localhost&
  2. 啓動ToDoListServer

image_1cd01p18f35fo4r1q0m7jkl0v19.png-13.5kB

  1. 啓動ToDoListClient

image_1ccsbmlqh115p1o0715vi1ugb1onk9.png-35.9kB

  1. 註冊帳號hello3 ,密碼hello3

image_1cd020jip1q9d1nesoseoijkn26.png-12.4kB

  1. 添加一些數據,時間的輸入要求不含有中文
    image_1cd026nqjlpipkcs15qgsnn216.png-44.6kB
  2. 開始查詢,查詢根據開始時間和結束時間的範圍查詢

image_1cd02685ok35ho611901qa10jbp.png-27.5kB

  1. 刪除看看

image_1cd0298gb1gc0nn91cqp1hm7iq61j.png-19.5kB

  1. 重啓client,server,再次登陸hello3帳號

image_1cd02br4891edcf9r61o4f1q5l20.png-35.5kB

源碼連接

java-corba

最後

感謝看到最後的你,喜歡文章就點個👍再走啦 ^-^

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息