Java-CORBA
本文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/javase/1.5.0/docs/guide/idl/tutorial/GSserver.html
4. HelloClient
代码在这:
https://docs.oracle.com/javase/1.5.0/docs/guide/idl/tutorial/GSapp.html
5. 运行
参照:https://docs.oracle.com/javase/1.5.0/docs/guide/idl/tutorial/GScompile.html
作者运行环境为: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<String,User>
- 所有的注册用户使用一个
Map<String,User>来管理,登录注册都是对Map<String,User>的操作 - 保存是将
Map<String,User>序列化到本地的data/centerService文件,通过读取data/centerService文件来反序列化Map<String,User>,实现数据的持久化
UserService实现的功能有:添加、查询、删除、清除、保存。有一个成员变量List<Item>
- CURD操作是针对
List<Item>来展开的 - 保存是将
List<Item>序列化到本地的data/userName文件,为每一个注册的用户都独立保存List<Item>,通过读取data/userName文件来反序列化List<Item>
server
ToDoListServer是本程序的server,作用有2个:
- 第一个作用是提供
CenterService,用于登录注册 - 第二个作用是为进行登录、注册操作的用户提供
userService。
client
ToDoListClient是是本程序的client,作用是获取服务端的CenterService为用户提供登录、注册功能,然后为注册、登录成功的用户提供UserService功能
基本原理分析
基本思路跟RPC是一样的,首先在服务端新建一个对象,注册好了,然后再客户端获得这个对象的引用,当调用这个引用的方法的时候,实际上会调用到客户端的对象,然后再把结果返回给客户端的对象引用。
在ToDoListServer里面,通过COBRA将centerServiceImpl对象绑定到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的更多相关文章
- java 11 移除的一些其他内容,更简化的编译运行程序,Unicode 10,移除了不太使用的JavaEE模块和CORBA技术,废除Nashorn javascript引擎,不建议使用Pack200 相关api
移除的一些其他内容 移除项 移除了com.sun.awt.AWTUtilities 移除了sun.misc.Unsafe.defineClass, 使用java.lang.invoke.MethodH ...
- java的访问控制(包、访问修饰符、修饰符)
一. java的类包 编写好一个源程序后,首先要执行javac命令进行编译源文件,并生成与源文件同名后缀为“.class”的字节码文件(类文件),该类文件与源文件默认在同一个目录中.该类文件是 ...
- Java 9 揭秘(8. JDK 9重大改变)
Tips 做一个终身学习的人. 在本章,主要介绍以下内容: 新的JDK版本控制方案是什么 如何使用Runtime.Version类解析JDK版本字符串 JDK JRE 9的新目录布局是什么 JDK 9 ...
- 使用非java代码编程
使用非JAVA代码 JAVA语言及其标准API(应用程序编程接口)应付应用程序的编写已绰绰有余.但在某些情况下,还是必须使用非JAVA编码.例如,我们有时要访问操作系统的专用特性,与特殊的硬件 ...
- Java 9 模块化(Modularity)
JDK9的发布一直在推迟,终于在2017年9月21日发布了.下面是JDK9的几个下载地址: JDK9.0.1 Windows-x64下载地址 Oracle Java 官网下载地址 OpenJDK 9官 ...
- JavaSE入门学习17:Java面向对象之package(包)
一Java包(package) 为了更好地组织类,Java提供了包机制,用于差别类名的命名空间. 包的作用: A把功能类似或相关的类或接口组织在 ...
- 【java 理论篇 2】J2EE的13种规范
导读:看完了J2EE的视频,没有什么技术实践,现在就从理论上说明一下J2EE的13种规范,以及现在的自己对它的一个理解.可能会有偏差,但是,算是做为目前的一个记录. 一.13种规范 1.1.JDBC( ...
- java 9 Spring Cloud @EnableEurekaServer javax.xml.bind.JAXBContext not present
java 9 Spring Cloud @EnableEurekaServer javax.xml.bind.JAXBContext not present jdk 8下面还可以正常启动,jdk9 ...
- java.lang.TypeNotPresentException: Type javax.xml.bind.JAXBContext not present解决方案
因为JAXB-API是java ee的一部分,在jdk9中没有在默认的类路径中: java ee api在jdk中还是存在的,默认没有加载而已,jdk9中引入了模块的概念,可以使用 模块命令--add ...
- Java 11 New Features
前言 北京时间 2018年9 月 26 日,Oracle 官方宣布 Java 11 正式发布.这是 Java 大版本周期变化后的第一个长期支持版本,非常值得关注.从官网即可下载, 最新发布的 Java ...
随机推荐
- scikit-learn中文文档
http://sklearn.apachecn.org/cn/0.19.0/tutorial/statistical_inference/supervised_learning.html
- [leetcode] 并查集(Ⅱ)
最长连续序列 题目[128]:链接. 解题思路 节点本身的值作为节点的标号,两节点相邻,即允许合并(x, y)的条件为x == y+1 . 因为数组中可能会出现值为 -1 的节点,因此不能把 root ...
- CSS用户自定义样式
在浏览器中打开前面写的例子页面,你会发现 <strong> 元素中的文字会比其他文字粗一些.这些样式就是在浏览器定义的默认HTML样式. 而<strong> 元素是红色的,这是 ...
- 03 . 前端之JavaScipt
JavaScript概述 ECMAScript和JavaScript的关系 1996年11月,JavaScript的创造者–Netscape公司,决定将JavaScript提交给国际标准化组织ECMA ...
- Java Word中的文本、图片替换功能
Word中的替换功能以查找指定文本然后替换为新的文本,可单个替换或全部替换.以下将要介绍的内容,除常见的以文本替换文本外,还将介绍使用不同对象进行替换的方法,具体可包括: 1. 指定字符串内容替换文本 ...
- Java实现 蓝桥杯VIP 算法训练 连通分块(并查集)
试题 算法训练 连通分块 资源限制 时间限制:200ms 内存限制:8.0MB 问题描述 连通分块 输入格式 输入的第一行包含两个整数n, m n代表图中的点的个数,m代表边的个数 接下来m行,每行2 ...
- Java实现 LeetCode 647 回文子串(暴力)
647. 回文子串 给定一个字符串,你的任务是计算这个字符串中有多少个回文子串. 具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串. 示例 1: 输入: "a ...
- java实现哈密顿回路问题
1 问题描述 什么是哈密顿回路? 引用自百度百科: 哈密顿图(哈密尔顿图)(英语:Hamiltonian path,或Traceable path)是一个无向图,由天文学家哈密顿提出,由指定的起点前往 ...
- webpack从什么都不懂到入门
前言 这篇文章是自己在整理webpack相关的东西时候突发奇想,想总结自己所学知识,也希望能够帮助想学习webpack的同学们,都是入门级别的,大佬请出门右转. 本文的webpack基于webpack ...
- Spring Cloud微服务(一):公共模块的搭建
本demo后台采用spring cloud微服务,前端选用vue,进行前后端分离搭建.具体项目见git:光头才能强 创建文件夹,并分别创建以下jar工程 创建公共模块(后续有需要,还会增加).无论是d ...