1.
定义hello.idl
module hello{
interface Hello{
string say();
};
};
2.
command > idlj -f all hello.idl
生成如下文件
HelloPOA POA指的是Portable Object Adapter(轻便对象适配器)。这个抽象类是一个基于流的服务器端骨架,提供了服务器端基本的CORBA功能。
_HelloSutb 客户端的存根类,为客户端提供了CORBA功能。
Hello 这是java版的Hello接口,它提供了标准的CORBA对象功能。
HelloHelper 这是一个辅助类,负责向CORBA流中写入或读取对象。
HelloHolder 这是一个final类,它持有一个public的Hello实例变量。它用来操作CORBA输入输出流的参数。
HelloOperations 这个类才是我们所预想的那个接口,只包含我们定义的那个方法,不包含CORBA的任何东西
3.
HelloImpl.java
package demo.corba.hello;
import java.util.concurrent.atomic.AtomicInteger;
public class HelloImpl extends HelloPOA {
private AtomicInteger counter = new AtomicInteger(0);
@Override
public String say() {
// 模拟实际请求需要500ms
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//返回当前请求的序号
return "responseid_"+counter.incrementAndGet();
}
}
4.
HelloServer.java
package demo.corba.hello;
import java.util.Properties;
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 demo.corba.hello.Hello;
import demo.corba.hello.HelloHelper;
public class HelloServer {
public void run(String[] args) throws Exception {
Properties props = new Properties();
props.put("org.omg.CORBA.ORBInitialPort", "1050");
props.put("org.omg.CORBA.ORBInitialHost", "localhost");
ORB orb = ORB.init(args, props);
POA poa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
poa.the_POAManager().activate();
HelloImpl hello = new HelloImpl();
org.omg.CORBA.Object ref = poa.servant_to_reference(hello);
Hello href = HelloHelper.narrow(ref);
org.omg.CORBA.Object objref = orb.resolve_initial_references("NameService");
NamingContextExt ncRef = NamingContextExtHelper.narrow(objref);
String name = "Hello";
NameComponent[] nc = ncRef.to_name(name);
ncRef.rebind(nc, href);
System.out.println("HelloServer ready and listening......");
//运行ORB
orb.run();
}
public static void main(String[] args) {
HelloServer server = new HelloServer();
try {
server.run(args);
}catch(Exception e) {
e.printStackTrace();
}
}
}
5.
HelloClient.java
package demo.corba.hello;
import java.util.Properties;
import java.util.concurrent.atomic.AtomicInteger;
import org.omg.CORBA.ORB;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
import demo.corba.hello.Hello;
import demo.corba.hello.HelloHelper;
public class HelloClient {
private static AtomicInteger reqCounter = new AtomicInteger(0);
private static StringBuffer sb = new StringBuffer();
private static Hello instance = getHello();
//每个线程创建一个Hello对象
private static ThreadLocal<Hello> instances = new ThreadLocal<Hello>(){
@Override
protected Hello initialValue() {
return getHello();
}
};
private static Hello getHello() {
try {
Properties props = new Properties();
props.put("org.omg.CORBA.ORBInitialPort", "1050");
props.put("org.omg.CORBA.ORBInitialHost", "localhost");
ORB orb = ORB.init(new String[0], props);
org.omg.CORBA.Object objRef = orb
.resolve_initial_references("NameService");
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
String name = "Hello";
Hello hello = HelloHelper.narrow(ncRef.resolve_str(name));
return hello;
} catch (Exception e) {
return null;
}
}
public static String callHello() {
// String result = instance.say();
String result = instances.get().say();
System.out.println(result);
return result;
}
private static class Task implements Runnable {
private AtomicInteger counter = new AtomicInteger(0);
@Override
public void run() {
//每个线程请求20次,每次累积所有线程的总请求数
while (true) {
int number = counter.incrementAndGet();
if (number > 20) {
return;
}
try {
String response = callHello();
String item = String
.format("threadid:%s,response:%s,requestCount:%s,threadcount:%s",
Thread.currentThread().getId(), response,
reqCounter.incrementAndGet(), number);
System.out.println(item);
sb.append(item).append("\n");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
try {
Thread[] threads = new Thread[50];
for (int i = 0; i < threads.length; i++) {
threads[i] = new Thread(new Task());
}
for (int i = 0; i < threads.length; i++) {
threads[i].start();
}
} catch (Throwable e) {
e.printStackTrace();
}
try {
Thread.sleep(60 * 1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(sb.toString());
}
}
6.
run corba service
orbd -port 1050 -ORBInitialPort 1049 -ORBInitialHost localhost
java HelloServer
java HelloClient
7.
check corba connection number
netstat -aon|findstr 1050 (windows)
分享到:
相关推荐
### JAVA与CORBA的深度整合:构建服务端与客户端实例 #### 一、CORBA概述与架构 CORBA(Common Object Request Broker Architecture)是对象管理组织(OMG)提出的一种面向对象的分布式计算架构标准,旨在实现不同...
标题“Java开发CORBA例子,可以运行”表明我们有一个实际的示例项目,可以用来学习和理解如何在Java中实现CORBA。这个例子应该是完整的,包括了必要的代码和配置,可以直接运行,帮助开发者直观地了解CORBA的工作...
创建CORBA客户端是开发分布式应用的重要步骤,本教程将介绍如何使用C++和JAVA语言创建CORBA客户端应用程序。 ### CORBA客户端应用程序开发概念 #### 客户端应用程序概述 在CORBA体系中,客户端应用程序(Client ...
这个压缩包提供了一些简单的示例,用于展示如何在Java环境中使用CORBA技术。 1. **CORBA概念**: CORBA是一种中间件,它的主要目标是实现分布式对象系统,使得不同网络中的对象可以像调用本地方法一样调用远程对象...
CORBA 提供了一种平台和语言无关的解决方案,允许开发者使用不同的编程语言在不同的操作系统上构建和连接分布式应用。通过ORB(Object Request Broker,对象请求代理),客户端可以透明地调用远程服务器上的对象方法...
**CORBA核心规范——一个简单的CORBA/Java示例** **一、CORBA基础** **CORBA(Common Object Request Broker Architecture)**,即公共对象请求代理架构,是一种跨平台、跨语言的分布式计算模型,旨在解决不同系统...
本文档详细介绍了一个基于VisiBroker的CORBA应用程序的例子,重点在于使用VisiBroker for Java进行开发的过程。CORBA(Common Object Request Broker Architecture)是一种用于创建跨网络分布应用的标准体系结构,而...
从定义IDL文件、编译IDL文件生成Java代码、实现服务端逻辑、绑定服务端对象到命名服务,再到客户端查找服务端对象并调用其方法,整个过程展示了CORBA在Java环境下构建分布式系统的强大能力。 此外,值得注意的是,...
【标题】:“CORBA简单实例” 【描述】:“CORBA...这个简单的实例展示了CORBA的基本工作原理,但在实际应用中,CORBA还涉及到异常处理、安全性、事务管理等多个复杂主题。理解这些概念是深入学习CORBA的关键。
- `java.rmi`包下有很多异常类,如`RemoteException`、`NotBoundException`等,需要妥善处理这些异常以确保程序的健壮性。 6. **安全性考虑**: - RMI默认使用简单认证,可以通过设置Java安全策略加强安全性。 -...
通过这个简单的例子,我们可以了解到CORBA的基本操作:定义接口、生成代理代码、实现服务、注册对象、解析IOR和通信交互。这为理解更复杂的CORBA应用奠定了基础。在实际工作中,CORBA常用于构建大型企业级应用,以...
这个示例展示了如何在Java中利用CORBA进行分布式对象交互,通过学习这个例子,我们可以深入理解CORBA的原理及其在Java中的应用。实际项目中,开发者可以根据需求调整接口、实现和通信细节,实现复杂的企业级分布式...
"7_IIOP - 体验IIOP--一个Java作客户端的例子"介绍了如何使用IIOP进行跨语言通信,这里以Java客户端为例,展示了一个使用IIOP调用C++实现的ORB服务的过程。 **8. 事件服务** "8_Event Service - 事件服务"章节...
一个简单的例子可能是一个温度监控系统,服务器端有多个温度传感器对象,客户端通过CORBA获取实时数据。服务器使用IDL定义传感器接口,客户端通过ORB查找并调用读取温度的方法。 **6. 实践中的挑战** - 性能:...
CORBA (Common Object Request Broker ...理解这个过程对于开发者来说是至关重要的,因为它涉及到多个中间件技术的集成,包括CORBA、TUXEDO和EJB。熟悉这些步骤可以帮助开发者构建分布式系统,实现跨平台的组件通信。
`_AccountStub.java`和`_AccountManagerStub.java`是客户端使用的Stub类,它们实现了IDL接口并处理与ORB的交互。Stub作为客户端代码与服务器端ORB通信的桥梁。相对应地,`AccountPOA.java`和`AccountManagerPOA....
在本Corba学习实例文档中,我们将探讨Java中如何使用CORBA(Common Object Request Broker Architecture)来实现跨网络的对象通信。CORBA是一种标准,允许不同操作系统、编程语言和网络环境中的对象相互协作,仿佛...
IDL定义的服务可以通过编译器映射到各种编程语言,如C++或Java,生成客户端的Stub代码和服务器端的Skeleton代码。Stub是客户端代码,它使客户端能够像调用本地对象一样调用远程对象;Skeleton是服务器端代码,它接收...