基于Java的CORBA技术复杂应用范例
2009-12-17 13:01
525 查看
[align=center]基于Java的CORBA技术复杂应用范例[/align]
本文是继Hello World例程的又一个复杂应用范例,目的是看看真正的基于Java的CORBA技术应用是什么样子。
本文通过一个四则运算实例来展示一个基于Java的CORBA应用,范例如下:
一、定义IDL
module zzvcom{
module cbrtest{
interface Calc{
void add(in long a,in long b,out long c);
void sub(in long a,in long b,out long c);
void muti(in long a,in long b,out long c);
void div(in long a,in long b,out long c);
};
};
};
二、根据IDL生成存根和代理等代码
idlj -fall Hello.idl
三、开发CORBA服务
import org.omg.CORBA.IntHolder;
import org.omg.CORBA.ORB;
import org.omg.CosNaming.NameComponent;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
import org.omg.PortableServer.POA;
import org.omg.PortableServer.POAHelper;
import zzvcom.cbrtest.Calc;
import zzvcom.cbrtest.CalcHelper;
import zzvcom.cbrtest.CalcPOA;
/**
* 四则运算的服务端实现
*
* @author leizhimin 2009-12-17 9:54:43
*/
class CalcImpl extends CalcPOA {
private ORB orb;
public void setORB(ORB orb_val) {
orb = orb_val;
}
public void add(int a, int b, IntHolder c) {
c.value = a + b;
}
public void sub(int a, int b, IntHolder c) {
c.value = a - b;
}
public void muti(int a, int b, IntHolder c) {
c = new IntHolder(a * b);
}
public void div(int a, int b, IntHolder c) {
c = new IntHolder(a / b);
}
public void shutdown() {
orb.shutdown(false);
}
}
public class CalcServer {
public static void main(String args[]) {
try {
//创建一个ORB实例
ORB orb = ORB.init(args, null);
//得到一个RootPOA的引用,并激活POAManager
POA rootpoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
rootpoa.the_POAManager().activate();
//创建一个CalcImpl实例(servant),并注册到ORB上
CalcImpl calcImpl = new CalcImpl();
calcImpl.setORB(orb);
//从服务中得到对象的引用
org.omg.CORBA.Object ref = rootpoa.servant_to_reference(calcImpl);
Calc href = CalcHelper.narrow(ref);
//得到一个根名称的上下文
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
//在命名上下文中绑定这个对象
String name = "Calc";
NameComponent path[] = ncRef.to_name(name);
ncRef.rebind(path, href);
System.out.println("CalcServer ready and waiting ...");
//启动线程服务,等待客户端的调用
orb.run();
} catch (Exception e) {
System.err.println("ERROR: " + e);
e.printStackTrace(System.out);
}
System.out.println("CalcServer Exiting ...");
}
}
四、开发客户端
import org.omg.CORBA.IntHolder;
import org.omg.CORBA.ORB;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
import zzvcom.cbrtest.Calc;
import zzvcom.cbrtest.CalcHelper;
/**
* 四则运算的客户端调用
*
* @author leizhimin 2009-12-17 10:35:32
*/
public class CalcClient {
static Calc calcImpl;
public static void main(String args[]) {
try {
//创建一个ORB实例
ORB orb = ORB.init(args, null);
//获取根名称上下文
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
//从命名上下文中获取接口实现对象
String name = "Calc";
calcImpl = CalcHelper.narrow(ncRef.resolve_str(name));
//调用接口对象的方法
System.out.println("Obtained a handle on server object: " + calcImpl);
System.out.println();
IntHolder add_val = new IntHolder();
calcImpl.add(1, 2, add_val);
System.out.println(add_val.value);
} catch (Exception e) {
System.out.println("ERROR : " + e);
e.printStackTrace(System.out);
}
}
}
五、启动CORBA服务器
先编译所有的Java文件:javac -Xlint:unchecked -d . *.java
编译后就可以调用了。
六、开启CORBA服务
七、启动CORBA客户端
可以看到当调用add(1,2)方法的时候,通过CORBA服务调用,从服务端获得了计算结果3.
这个例子与HelloWorld的例子不同在于:
1、如何组织接口的java包。
2、如何定义带参数,和返回值的方法。
3、如何调用带参数和返回值的方法。
理解了本例,就可以做更复杂的Java应用了。
本文出自 “熔 岩” 博客,请务必保留此出处http://lavasoft.blog.51cto.com/62575/244874
本文是继Hello World例程的又一个复杂应用范例,目的是看看真正的基于Java的CORBA技术应用是什么样子。
本文通过一个四则运算实例来展示一个基于Java的CORBA应用,范例如下:
一、定义IDL
module zzvcom{
module cbrtest{
interface Calc{
void add(in long a,in long b,out long c);
void sub(in long a,in long b,out long c);
void muti(in long a,in long b,out long c);
void div(in long a,in long b,out long c);
};
};
};
二、根据IDL生成存根和代理等代码
idlj -fall Hello.idl
三、开发CORBA服务
import org.omg.CORBA.IntHolder;
import org.omg.CORBA.ORB;
import org.omg.CosNaming.NameComponent;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
import org.omg.PortableServer.POA;
import org.omg.PortableServer.POAHelper;
import zzvcom.cbrtest.Calc;
import zzvcom.cbrtest.CalcHelper;
import zzvcom.cbrtest.CalcPOA;
/**
* 四则运算的服务端实现
*
* @author leizhimin 2009-12-17 9:54:43
*/
class CalcImpl extends CalcPOA {
private ORB orb;
public void setORB(ORB orb_val) {
orb = orb_val;
}
public void add(int a, int b, IntHolder c) {
c.value = a + b;
}
public void sub(int a, int b, IntHolder c) {
c.value = a - b;
}
public void muti(int a, int b, IntHolder c) {
c = new IntHolder(a * b);
}
public void div(int a, int b, IntHolder c) {
c = new IntHolder(a / b);
}
public void shutdown() {
orb.shutdown(false);
}
}
public class CalcServer {
public static void main(String args[]) {
try {
//创建一个ORB实例
ORB orb = ORB.init(args, null);
//得到一个RootPOA的引用,并激活POAManager
POA rootpoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
rootpoa.the_POAManager().activate();
//创建一个CalcImpl实例(servant),并注册到ORB上
CalcImpl calcImpl = new CalcImpl();
calcImpl.setORB(orb);
//从服务中得到对象的引用
org.omg.CORBA.Object ref = rootpoa.servant_to_reference(calcImpl);
Calc href = CalcHelper.narrow(ref);
//得到一个根名称的上下文
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
//在命名上下文中绑定这个对象
String name = "Calc";
NameComponent path[] = ncRef.to_name(name);
ncRef.rebind(path, href);
System.out.println("CalcServer ready and waiting ...");
//启动线程服务,等待客户端的调用
orb.run();
} catch (Exception e) {
System.err.println("ERROR: " + e);
e.printStackTrace(System.out);
}
System.out.println("CalcServer Exiting ...");
}
}
四、开发客户端
import org.omg.CORBA.IntHolder;
import org.omg.CORBA.ORB;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
import zzvcom.cbrtest.Calc;
import zzvcom.cbrtest.CalcHelper;
/**
* 四则运算的客户端调用
*
* @author leizhimin 2009-12-17 10:35:32
*/
public class CalcClient {
static Calc calcImpl;
public static void main(String args[]) {
try {
//创建一个ORB实例
ORB orb = ORB.init(args, null);
//获取根名称上下文
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
//从命名上下文中获取接口实现对象
String name = "Calc";
calcImpl = CalcHelper.narrow(ncRef.resolve_str(name));
//调用接口对象的方法
System.out.println("Obtained a handle on server object: " + calcImpl);
System.out.println();
IntHolder add_val = new IntHolder();
calcImpl.add(1, 2, add_val);
System.out.println(add_val.value);
} catch (Exception e) {
System.out.println("ERROR : " + e);
e.printStackTrace(System.out);
}
}
}
五、启动CORBA服务器
先编译所有的Java文件:javac -Xlint:unchecked -d . *.java
编译后就可以调用了。
六、开启CORBA服务
七、启动CORBA客户端
可以看到当调用add(1,2)方法的时候,通过CORBA服务调用,从服务端获得了计算结果3.
这个例子与HelloWorld的例子不同在于:
1、如何组织接口的java包。
2、如何定义带参数,和返回值的方法。
3、如何调用带参数和返回值的方法。
理解了本例,就可以做更复杂的Java应用了。
本文出自 “熔 岩” 博客,请务必保留此出处http://lavasoft.blog.51cto.com/62575/244874
相关文章推荐
- 基于Java的CORBA技术复杂应用范例
- struts采用JavaServlet/JSP技术,实现了基于Java EEWeb应用的MVC设计模式的应用框架
- Docker学习总结(25)——阿里巴巴基于Java容器的多应用部署技术实践
- 【公开课】【阿里在线技术峰会】魏鹏:基于Java容器的多应用部署技术实践
- 【公开课】【阿里在线技术峰会】魏鹏:基于Java容器的多应用部署技术实践
- struts采用JavaServlet/JSP技术,实现了基于Java EEWeb应用的MVC设计模式的应用框架
- 基于Corba技术使用java与C++混合编程
- JAVA基础 day22 File类的方法和应用 利用递归获取目录下的所有文件 Properties类的应用(和IO技术结合,存取配置文件) 打印流和合并流等功能类的学习应用 切割文件练习
- 【JAVA】17、数组应用范例
- 中间件——构筑复杂分布式应用的关键技术(转)
- Asp.net20 应用之 基于AJAX.NET技术的DataGrid控件开发
- 基于ArcGIS的Java应用开发
- 37 java技术体系基础、tomcat核心概念及使用初步、tomcat配置与应用
- 应用Java技术开发WAP应用程序
- ※JAVA范例 12-1 【上】Java高级开发技术 集合
- 基于HTML5 技术跨平台混合式应用开发解决方案-UniSDP
- 在应用中加入全文检索功能—基于Java的全文索引引擎Lucene简介(收藏)
- 在应用中加入全文检索功能——基于Java的全文索引引擎Lucene简介
- 应用Java技术开发WAP应用程序
- 基于iText和flying saucer结合freemark java生成pdf 范例