资讯专栏INFORMATION COLUMN

Java/CORBA

masturbator / 2819人阅读

摘要:实现的功能有登录注册保存有一个成员变量所有的注册用户使用一个来管理,登录注册都是对的操作保存是将序列化到本地的文件,通过读取文件来反序列化,实现数据的持久化实现的功能有添加查询删除清除保存。

本文HelloCorba参考 Getting Started with JavaTM IDL

说在前面
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:对象请求代理

This figure shows how a one-method distributed object is shared between a CORBA client and server to implement the classic "Hello World" application.

HelloCorba说明 1. 新建文件Hello.idl

内容为:

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个文件是什么来的呢?我们先接着往下看

_HelloStub.java
Hello.java
HelloHelper.java
HelloHolder.java
HelloOperations.java
HelloPOA.java

HelloOperations.java里面才上我们真正需要的操作,我们需要实现的是抽象类HelloPOA,其实就是实现接口HelloOperations

3. HelloServer

代码在这:
https://docs.oracle.com/javas...

4. HelloClient

代码在这:
https://docs.oracle.com/javas...

5. 运行

参照:https://docs.oracle.com/javas...

作者运行环境为:macos:10.13.4 (17E199) JDK1.8 iterm2

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

所有的注册用户使用一个Map来管理,登录注册都是对Map的操作

保存是将Map序列化到本地的data/centerService文件,通过读取data/centerService文件来反序列化Map,实现数据的持久化

UserService实现的功能有:添加、查询、删除、清除、保存。有一个成员变量List

CURD操作是针对List来展开的

保存是将List序列化到本地的data/userName文件,为每一个注册的用户都独立保存List,通过读取data/userName文件来反序列化List

server

ToDoListServer是本程序的server,作用有2个:

第一个作用是提供CenterService,用于登录注册

第二个作用是为进行登录、注册操作的用户提供userService

client

ToDoListClient是是本程序的client,作用是获取服务端的CenterService为用户提供登录、注册功能,然后为注册、登录成功的用户提供UserService功能

基本原理分析

基本思路跟RPC是一样的,首先在服务端新建一个对象,注册好了,然后再客户端获得这个对象的引用,当调用这个引用的方法的时候,实际上会调用到客户端的对象,然后再把结果返回给客户端的对象引用。

ToDoListServer里面,通过COBRAcenterServiceImpl对象绑定到COBRA的根命名上下文(root naming context),它有个名字叫做NameService,然后我们给centerServiceImpl对象取个名字,就叫centerService,然后把CenterServiceImpl绑定到NameService下面。后面我们就可以通过centerService获取到我们预先绑定的centerServiceImpl对象了。

具体实现方案看代码ToDoListServer.init()ToDoListClient.init

演示流程

首先必须启动orbd,命令:orbd -ORBInitialPort 1050 -ORBInitialHost localhost&

启动ToDoListServer

启动ToDoListClient

注册账号hello3 ,密码hello3

添加一些数据,时间的输入要求不含有中文

开始查询,查询根据开始时间和结束时间的范围查询

删除看看

重启client,server,再次登录hello3账号

源码链接

java-corba

最后

感谢看到最后的你,喜欢文章就点个

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69332.html

相关文章

  • Java11的新特性

    摘要:从版本开始,不再单独发布或者版本了,有需要的可以自己通过去定制官方解读官方细项解读稳步推进系列六的小试牛刀一文读懂的为何如此高效弃用引擎 Java语言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的新特性 Java10的新特性 Java11的新特性 Java12的新特性 Java13的新特性 序 本文主要讲述一下Java11的新...

    April 评论0 收藏0
  • 如何在Java 9以上版本中解决找不到类JAXBException

    摘要:如何在中解决升级到新的你会突然发现原来可以运行的项目突然不能启动了,报形如的类找不到的错。被认为是,因此不再包含在中的默认类路径中。在中,它们完全从中删除。幸运的是,中提供的这些仍然在中,但它们默认情况下不在类路径上。 如何在Java 9中解决java.lang.NoClassDefFoundError:javax/xml/bind/JAXBException 升级到新的JDK 你会突...

    ckllj 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<