JAVA的Corba客户端 - 服务端 通信实现

标签: java corba 客户端 | 发表时间:2012-06-26 15:24 | 作者:Green.Face.
出处:http://www.cnblogs.com/

IDE:Eclipse 3.4.1

先在Eclipse建立两个Java Project

1. 然后定义 IDL .

 

内容如下:

 

module helloapp {
interface Hello {
string sayHello();
oneway void shutdown();
};
};

 

 

 

**这里注意, } 后面的 ";"一定要写上,不然会编译错误

 

2. 右键这个HelloApp.idl 文件

点击,Change to parent folder in Shell

点击OK , Eclipse会打开Shell视图,是命令行视图,其实和CMD是一个作用.

这里我们执行命令 : idlj -fall HellApp.idl

 

3. 然后我们到项目目录(H:\DEVELOPING\UMM\workspace\testCorbaServer\src\server) 下就能看到多生成了一个文件夹 -- helloapp

打开里面试一些java接口类

4. 在服务端建立一个package 名字跟 idl 内容里的module 相同, 这里我们是 ' helloapp '

  然后把类复制到这个包下面

 

 

---------------------------------------

---------------------------------------

第二部分 实现IDL 生成的类的接口

1. 实现服务端 如图

 内容如下:

package server;


import org.omg.CORBA.ORB;

import helloapp.HelloPOA;

public class HelloImpl extends HelloPOA {

private ORB orb;

public void setOrb(ORB orb) {
this.orb = orb;
}

@Override
public String sayHello() {
return "\nHello World!!\n";
}

@Override
public void shutdown() {
orb.shutdown(false);
}

}


 

以上, 服务端的" 服务" 就写好了, 下面还要在服务端写一个入口类, 把你的服务" 注册" 上.

 

 内容如下:

 

package server;

import helloapp.Hello;
import helloapp.HelloHelper;

import org.omg.CORBA.ORB;
import org.omg.CORBA.ORBPackage.InvalidName;
import org.omg.CosNaming.NameComponent;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
import org.omg.CosNaming.NamingContextPackage.CannotProceed;
import org.omg.CosNaming.NamingContextPackage.NotFound;
import org.omg.PortableServer.POA;
import org.omg.PortableServer.POAHelper;
import org.omg.PortableServer.POAManagerPackage.AdapterInactive;
import org.omg.PortableServer.POAPackage.ServantNotActive;
import org.omg.PortableServer.POAPackage.WrongPolicy;

public class Main {
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();

// create servant and register it with ORB
// 创建一个HelloImpl实例(servant),并注册到ORB上
HelloImpl helloImpl = new HelloImpl();
helloImpl.setOrb(orb);

// 在服务中得到对象的引用
org.omg.CORBA.Object ref = rootpoa.servant_to_reference(helloImpl);
Hello href = HelloHelper.narrow(ref);

//得到一个根名称的上下文
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");

// Use NamingContextExt which is part of the Interoperable
// Naming Service (INS) specification.
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);

// 在命名上下文中绑定这个对象
String name = "Hello";
NameComponent path[] = ncRef.to_name(name);
ncRef.rebind(path, href);

System.out.println("HelloServer ready and waiting ...");

//启动线程服务,等待客户端的调用
orb.run();
} catch (InvalidName e) {
e.printStackTrace();
} catch (AdapterInactive e) {
e.printStackTrace();
} catch (ServantNotActive e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (WrongPolicy e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (org.omg.CosNaming.NamingContextPackage.InvalidName e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NotFound e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (CannotProceed e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

System.out.println("HelloServer Exiting ...");
}
}

 

 

 

注意 :这里虽然是入口,可是不能直接右键run as - > Java Application

 

 

---------------------------------------

 

---------------------------------------

 

  实现客户端

1. 要把服务端生成的工具类复制到客户端( 最好包结构一致) 如图

2. 编写客户端调用.

内容如下:

package client;

import helloapp.Hello;
import helloapp.HelloHelper;

import org.omg.CORBA.ORB;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;

public class HelloClient {
static Hello helloImpl;

public static void main(String[] args) {
try {
// 创建一个ORB实例
ORB orb = ORB.init(args, null);

// 获取根名称上下文
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");

// Use NamingContextExt instead of NamingContext. This is
// part of the Interoperable naming Service.
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);

// 从上下文中获取接口实现对象
String name = "Hello";
helloImpl = HelloHelper.narrow(ncRef.resolve_str(name));
System.out.println(helloImpl.sayHello());
System.out.println("asdfasdfdasf");
} catch (Exception e) {
e.printStackTrace();
}
}
}

 

这样 客户端就完成调用了.  下面就是如何 运行起来了.

 

1. 运行CORBA 服务 ( 直接CMD 运行即可)

orbd -ORBInitialPort 1053 -ORBInitialHost 192.168.1.42

注: 192.168.1.42 是我自己的本地IP地址  1053是端口

CORBA 服务独立于客户端和服务端,相当于一条桥梁.

 

这个窗口不要关掉,光标会一直闪.

 

2. 启动服务端

启动服务端需要main函数传递参数,所以我们要先配一些main函数的参数. 如图:

 

 

点开:

 

Main就是我们服务端的入口函数.  之前有说过.

 

然后在arguments的program arguments: 写入

 

-ORBInitialPort 1053    

 

 

 

端口1053 是与之前的CORBA 服务的端口对应的

 

 

 

服务端就配好了.   运行服务端.

 

不要关闭服务端. 

 

3. 启动客户端

 

这里我不用多说了,然后启动运行,就可以看到运行结果了.

 

说明:  依照原文,可能环境不同会出些奇怪的问题,希望读者先仔细检查是否和原文有出入,或者检查异常,还是不行的话,欢迎留言一起讨论.

 

思路来自于:参考自http://lavasoft.blog.51cto.com/62575/240268

 

本文链接

相关 [java corba 客户端] 推荐:

JAVA的Corba客户端 - 服务端 通信实现

- - 博客园_首页
先在Eclipse建立两个Java Project. **这里注意, } 后面的 ";"一定要写上,不然会编译错误. 右键这个HelloApp.idl 文件. 点击,Change to parent folder in Shell. 点击OK , Eclipse会打开Shell视图,是命令行视图,其实和CMD是一个作用..

ElasticSearch的JAVA客户端操作

- - 编程语言 - ITeye博客
一、java操作ES有两种客户端:. 1、TransportClient:轻量级的Client,使用Netty线程池,Socket连接到ES集群. 本身不加入到集群,只作为请求的处理. 2、Node Client:客户端节点本身也是ES节点,加入到集群,和其他ElasticSearch节点一样. 频繁的开启和关闭这类Node Clients会在集群中产生“噪音”.

Windows7+Eclipse环境下Hbase Java客户端的开发

- - zzm
Centos 下Hbase0.98.10-hadoop2 集群的配置. 在Eclipse中创建Maven的工程. 将集群的hbase-site.xml文件放到工程的classes目录下. C:\windows\system32\drivers\etc文件,将Hbase集群的IP以及域名配置到该文件中.

java实现JT809协议数据对接客户端

- - Java - 编程语言 - ITeye博客
最近使用JT809协议进行数据对接,遇到了不少问题,度娘谷歌都不好使,找不到很好的客户端实现代码的例子,只能苦逼的自己闷头弄,现在特意写篇帖子,希望能帮助一些人. 背景:跟某公司做数据对接,将本公司的一些信息推送到接收端. 要求:建立tcp链接,使用接收端提供的用户名密码等信息 先登录,登录成功后推送数据,数据采用JT809标准协议.

[原]Jaeger的客户端采样配置(Java版)

- - 程序员欣宸的博客
这里分类和汇总了欣宸的全部原创(含配套源码): https://github.com/zq2599/blog_demos. 采样很好理解:使用Jaeger时,未必需要将所有请求都上报到Jaeger,有时候只要抽取其中一部分观察即可,这就是按照一定策略进行采样;. Jaeger采样配置分为客户端和服务端两种配置,默认用的是服务端配置.

Elasticsearch:在 Java 客户端中使用 truststore 来创建 HTTPS 连接

- - 掘金 后端
在我之前的文章 “ Elasticsearch:使用 Elasticsearch Java client 8.0 来连接带有 HTTPS 的集群” 里,我使用了两种方法,一直是使用 token 的方式,另外一种是使用 PEM 证书来进行连接的. 在实际的使用中,有时我们的证书是以 PCKS12 格式的 truststore 格式的,那么我们该如何建立这种 HTTPS 的连接呢.

java nio SocketChannel 服务器端与多客户端 信息交互(聊天功能)

- - BlogJava_首页
    //解码buffer  .     /*接受数据缓冲区*/  .     /*发送数据缓冲区*/  .     /*映射客户端channel */  .          *启动服务器端,配置为非阻塞,绑定端口,注册accept事件 .          *ACCEPT事件:当服务端收到客户端连接请求时,触发该事件 .

文章: James Ward谈使用HTML5和Java开发客户端/服务器应用

- - InfoQ cn
谈到应用开发,不管是客户端/服务器类应用、传统的Web应用还是移动Web应用,最近的趋势是使用像流式网格布局(Fluid Grid Layout)和响应式网页设计(Responsive Web Design)这样的模式,以及像HTML5、CSS3和JavaScript(客户端和服务器都支持)这样的技术.

Corba项目中使用的ActiveMQ消息组件介绍

- - CSDN博客推荐文章
下载ActiveMQ http://activemq.apache.org/download.html. 启动mq:/bin/activemq.bat. 管理界面: http://localhost:8161/admin,默认不用验证. // 延时500毫秒之后发送消息. // 延时500毫秒之后停止接受消息.

Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式等)介绍

- - 数据库 - ITeye博客
        redis是一个著名的key-value存储系统,而作为其官方推荐的java版客户端jedis也非常强大和稳定,支持事务、管道及有jedis自身实现的分布式.         在这里对jedis关于事务、管道和分布式的调用方式做一个简单的介绍和对比:.         最简单和基础的调用方式.