标签:string tcl sha root 独立 ble log 数据 between
本文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.
内容为:
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个文件是什么来的呢?我们先接着往下看
_HelloStub.java
Hello.java
HelloHelper.java
HelloHolder.java
HelloOperations.java
HelloPOA.java
HelloOperations.java
里面才上我们真正需要的操作,我们需要实现的是抽象类HelloPOA
,其实就是实现接口HelloOperations
代码在这:
https://docs.oracle.com/javase/1.5.0/docs/guide/idl/tutorial/GSserver.html
代码在这:
https://docs.oracle.com/javase/1.5.0/docs/guide/idl/tutorial/GSapp.html
参照: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 !!
定义操作
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
感谢看到最后的你,喜欢文章就点个??再走啦 ^-^
标签:string tcl sha root 独立 ble log 数据 between
原文地址:https://www.cnblogs.com/chenjingquan/p/9011543.html