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

  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

  3. 启动ToDoListClient

  4. 注册账号hello3 ,密码hello3

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

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

  7. 删除看看

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

源码链接

java-corba

最后

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

Java-CORBA的更多相关文章

  1. java 11 移除的一些其他内容,更简化的编译运行程序,Unicode 10,移除了不太使用的JavaEE模块和CORBA技术,废除Nashorn javascript引擎,不建议使用Pack200 相关api

    移除的一些其他内容 移除项 移除了com.sun.awt.AWTUtilities 移除了sun.misc.Unsafe.defineClass, 使用java.lang.invoke.MethodH ...

  2. java的访问控制(包、访问修饰符、修饰符)

    一.     java的类包 编写好一个源程序后,首先要执行javac命令进行编译源文件,并生成与源文件同名后缀为“.class”的字节码文件(类文件),该类文件与源文件默认在同一个目录中.该类文件是 ...

  3. Java 9 揭秘(8. JDK 9重大改变)

    Tips 做一个终身学习的人. 在本章,主要介绍以下内容: 新的JDK版本控制方案是什么 如何使用Runtime.Version类解析JDK版本字符串 JDK JRE 9的新目录布局是什么 JDK 9 ...

  4. 使用非java代码编程

    使用非JAVA代码     JAVA语言及其标准API(应用程序编程接口)应付应用程序的编写已绰绰有余.但在某些情况下,还是必须使用非JAVA编码.例如,我们有时要访问操作系统的专用特性,与特殊的硬件 ...

  5. Java 9 模块化(Modularity)

    JDK9的发布一直在推迟,终于在2017年9月21日发布了.下面是JDK9的几个下载地址: JDK9.0.1 Windows-x64下载地址 Oracle Java 官网下载地址 OpenJDK 9官 ...

  6. JavaSE入门学习17:Java面向对象之package(包)

           一Java包(package)        为了更好地组织类,Java提供了包机制,用于差别类名的命名空间.        包的作用:        A把功能类似或相关的类或接口组织在 ...

  7. 【java 理论篇 2】J2EE的13种规范

    导读:看完了J2EE的视频,没有什么技术实践,现在就从理论上说明一下J2EE的13种规范,以及现在的自己对它的一个理解.可能会有偏差,但是,算是做为目前的一个记录. 一.13种规范 1.1.JDBC( ...

  8. 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 ...

  9. java.lang.TypeNotPresentException: Type javax.xml.bind.JAXBContext not present解决方案

    因为JAXB-API是java ee的一部分,在jdk9中没有在默认的类路径中: java ee api在jdk中还是存在的,默认没有加载而已,jdk9中引入了模块的概念,可以使用 模块命令--add ...

  10. Java 11 New Features

    前言 北京时间 2018年9 月 26 日,Oracle 官方宣布 Java 11 正式发布.这是 Java 大版本周期变化后的第一个长期支持版本,非常值得关注.从官网即可下载, 最新发布的 Java ...

随机推荐

  1. Intellij IDEA 2020.1.1 破解 永久有效 亲测100%成功

    申明:本教程 WebStorm 破解补丁.激活码均收集于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除. 前言 作为一个有强迫症的码农,怎么能忍受自己的开发工具跟不上潮流呢?笔者以前一直用 ...

  2. [Objective-C] 017_UI篇_UIView(中)

    在上篇我们简单讲了UIView的坐标与几何结构,这篇我们来实战UIView一下.UIView在App中有着绝对重要的地位,因为可视化控件几乎都是UIView的子类.在App负责渲染区域的内容,并且响应 ...

  3. Spring_AOP_AspectJ支持的通知注解

    1.AOP前奏: 使用动态代理解决日志需求 ArithmeticCalculator.java package com.aff.spring.aop.helloworld; public interf ...

  4. STM32读取bq33100数据——硬件IIC

    背景:拟采用bq33100超级电容管理芯片,实现自动的超级电容组的均压任务.需监控芯片的工作情况,以及电容组的均压情况. 平台: 硬件:STM32F103C8T6 通信:SMBus(低速IIC) 目标 ...

  5. 01 . Nginx简介及部署

    Nginx简介 Nginx(发音同engine x)是一个异步框架的 Web 服务器,也可以用作反向代理,负载平衡器 和 HTTP 缓存.该软件由 Igor Sysoev 创建,并于2004年首次公开 ...

  6. 腾讯云EMR大数据实时OLAP分析案例解析

    OLAP(On-Line Analytical Processing),是数据仓库系统的主要应用形式,帮助分析人员多角度分析数据,挖掘数据价值.本文基于QQ音乐海量大数据实时分析场景,通过QQ音乐与腾 ...

  7. Java实现 LeetCode 685 冗余连接 II(并查集+有向图)

    685. 冗余连接 II 在本问题中,有根树指满足以下条件的有向图.该树只有一个根节点,所有其他节点都是该根节点的后继.每一个节点只有一个父节点,除了根节点没有父节点. 输入一个有向图,该图由一个有着 ...

  8. Java实现 蓝桥杯VIP 算法训练 暗恋

    算法训练 暗恋 时间限制:1.0s 内存限制:256.0MB 问题描述 同在一个高中,他却不敢去找她,虽然在别人看来,那是再简单不过的事.暗恋,是他唯一能做的事.他只能在每天课间操的时候,望望她的位置 ...

  9. Java中List,Set,Map的区别以及API的使用

    1.面试题:你说说collection里面有什么子类. (其实面试的时候听到这个问题的时候,你要知道,面试官是想考察List,Set) 正如图一,list和set是实现了collection接口的. ...

  10. java实现第四届蓝桥杯猜年龄

    猜年龄 题目描述 美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学.他曾在1935~1936年应邀来中国清华大学讲学. 一次,他参加某个重要会议,年轻的脸孔引人注目.于是有人询问他的年龄, ...