JacORB2.1 学习笔记--入门篇
来源:互联网 发布:飞利浦刮胡刀 知乎 编辑:程序博客网 时间:2024/05/17 04:33
JacORB是免费的Java对象请求代理系统(CORBA),附带全部源代码,包含大部分CORBA对象服务的实现,以及大量的代码实例。
下面将介绍如何运行它所带的DEMO,了解基本的JacOrb知识.
(假设您的系统为WIN2K/XP/NT,且已经安装jdk1.4.x 和 ANT工具)
1 下载安装Jacorb2.1
2 测试命名服务(NS,Naming Service)是否可以正常启动
ns c:/NS_Ref
如果出现下面的输出说明已经正常启动
[configuration loaded from classpath resource file:/C:/JacORB_2_1/classes/jacorb.properties]
JacORB V 2.1, www.jacorb.org
(C) Gerald Brose, XTRADYNE Technologies/FU Berlin, 16-Feb-2004
[jacorb.orb.intercept] INFO : InterceptorManager started with 0 SIs, 0 CIs and 1
IORIs
[jacorb.naming] INFO : NS up
[jacorb.orb] INFO : ORB run
如果没有任何输出,可能是由于你的jacorb.properties文件没有放到classpath所在的目录下。
如果没有正确启动NS,运行下面的demo时会出现下面的异常
[jacorb.orb.intercept] INFO : InterceptorManager started with 0 SIs, 0 CIs and 1 IORIs
....
[jacorb.giop] INFO : ClientConnectionManager: created new conn to target 192.168.4.161:4089
[jacorb] ERROR : java.net.ConnectException: Connection refused: connect
3 idl编译DEMO下的grid例子
观察
正确启动NS后,DOS窗口转到demo/grid目录下执行ant (如果ant没有安装则不会编译)
C:/JacORB_2_1/demo/grid > ant
这样会进行idl编译server.idl文件,在C:/JacORB_2_1/demo/grid/generated下生成corba所需的源文件
同时,ant会编译所有的java源文件, C:/JacORB_2_1/classes下面生成.class文件
4 运行grid例子,本例实现了一个简单的服务.
在dos窗口中执行
jaco demo.grid.Server
或者
jaco demo.grid.TieServer
正常时输出:
[configuration loaded from classpath resource file:/C:/JacORB_2_1/classes/jacorb.properties]
JacORB V 2.1, www.jacorb.org
(C) Gerald Brose, XTRADYNE Technologies/FU Berlin, 16-Feb-2004
[jacorb.orb.intercept] INFO : InterceptorManager
started with 0 SIs, 0 CIs and 1 IORIs
[jacorb.poa] INFO : oid:
00 11 39 3D 4A 03 47 32 01 07
B ..9=J.G2...
object is activated
[jacorb.giop] INFO : ClientConnectionManager:
created new conn to target 192.168.4.161:4261
[jacorb.iiop.conn] INFO : Connected to 192.168.4.161:4261
from local port 4282
[jacorb.orb] INFO : ORB run
这时在ns输出窗口可以看到:
[jacorb.naming] INFO : Bound name: grid.example
另外,可以通过Jbuilder等IDE工具建立一个工程来运行demo.grid.Server,须指定vm参数-Djava.endorsed.dirs="C:/JacORB_2_1/lib",结果一致.
jaco demo.grid.Client
输出结果:
Height = 31
Width = 14
Old value at (30,13): 0.21
Setting (30,13) to 470.11
New value at (30,13): 470.11
MyException, reason: This is only a test exception, no harm done :-)
看到这个结果说明已经成功运行了grid例子.
5 对照源码,下面我们将简单分析Grid例子:
JacORB的应用开发一般分为以下五步:
1.写IDL接口定义
2.编译IDL接口定义生成Java类
3.实现步骤2中生成的接口
4.写服务器启动类,并注册到ORB
5.写客户端去获取服务对象引用
5.1 首先编写server.idl文件
关于编写IDL参考doc/ProgrammingGuide.pdf文档
// grid.idl
// IDL defintion of a 2-D grid:
module demo
{
module grid
{
interface MyServer
{
typedef fixed <5,2> fixedT;
readonly attribute short height; // height of the grid
readonly attribute short width; // width of the grid
void set(in short n, in short m, in fixedT value);
fixedT get(in short n, in short m);
exception MyException
{
string why;
};
short opWithException() raises( MyException );
};
};
};
5.2 利用工具 bin/idl.bat来编译server.idl
idl -d ../.. server.idl
5.3 实现接口
public class gridImpl extends MyServerPOA
填写构造函数,以及接口等方法,如:
public gridImpl()
public java.math.BigDecimal get(short n, short m)
public void set(short n, short m, java.math.BigDecimal value)
5.4 编写服务器
这一步要写一个类来调用gridImpl类,并将其注册到POA,这样远程对象才能通过
MyServer接口来访问它。
1)初始化orb对象。
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, null);
2)使用POAHelper来实例化为POA的引用。
org.omg.PortableServer.POA poa = org.omg.PortableServer.POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
3)激活该对象,否则还处于“保持状态,”无法处理任何请求。
poa.the_POAManager().activate();
4)通过POA将一个Java对象转化成一个CORBA对象。
org.omg.CORBA.Object o = poa.servant_to_reference(new gridImpl());
5)使nc绑定该对象的引用(这一过程通过命名服务器来完成),注意使对象的名称作为bind()的参数
NamingContextExt nc = NamingContextExtHelper.narrow(orb.resolve_initial_references("NameService"));
nc.bind( nc.to_name("grid.example"), o);
5.5 编写客户端调用服务程序
1) 创建orb对象
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,null);
2) 客户端通过命名服务器获取一个"grid"服务的引用
NamingContextExt nc = NamingContextExtHelper.narrow(orb.resolve_initial_references("NameService"));
grid = MyServerHelper.narrow(nc.resolve(nc.to_name("grid.example")));
3) 使用grid对象进行我们的计算。
- JacORB2.1 学习笔记--入门篇
- CORBA平台 JacORB2.1 学习笔记--入门篇
- JacORB2.1 ,ant入门教程
- Redis学习笔记1--入门篇
- Spring MVC学习笔记 1:入门篇
- Redis学习笔记1--入门篇
- Maven 学习笔记(1)入门篇
- Redis学习笔记1--入门篇
- Redis学习笔记1--入门篇
- Spring入门篇学习笔记(1)
- Redis学习笔记1--入门篇
- Redis学习笔记1--入门篇
- Java学习笔记--入门篇
- NumPy学习笔记--入门篇
- NumPy学习笔记--入门篇
- spring入门篇-学习笔记
- JavaScript学习笔记-入门篇
- OPENWRT学习笔记入门篇
- TreeView 控件使用
- JSP实现投票系统源码!
- 实战 HTTP 处理程序(HTTP Handler) (4)--与Web程序共享Session
- Enterprise Library 3.1 帮助文档中文翻译
- SQL Server的Datediff和Access的Datediff的区别
- JacORB2.1 学习笔记--入门篇
- 文件比较算法(2)
- C#优化字符串操作
- 遭遇Trojan.DL.Win32.Autorun.yuz,Trojan.Win32.Inject.gh,Trojan.Win32.Agent.zsq等
- MonoRail - 简介
- 第四次作业
- 好久没有来博客了
- 软件测试过程模型的种类之-------------X模型
- 《老子》和编程的问题(1)