使用Eclipse编写Java RMI程序详解(续)

简介

上一节介绍了如何编写RMI的程序范例,在那个例子中可以看到RMI的客户端和服务端交互的方式和如何建立连接。

在这一节我们将会重构一下Client的链接方式,以前是直接使用Naming获得服务器对象,这一节我们将换用上下文帮助我们管理服务器的链接。

上下文即Context,他可以管理RMI的对象,自动帮助我们管理各个平台的工厂创建。EJB的应用也是使用Context帮助管理RMI对象。

在每个项目中应该少用HardCode值,这就需要一个配置文件设置,使用Context的时候,我们可以在程序中将属性值创建进去,RMI的配置中至少需要两个必不可少的值,java.naming.factory.initial 和java.naming.provider.url 。这两个值可以放入到jndi.properties中,这个配置文件将会被Context读取。设置Factory创建指定传输协议的对象,比如

两个常用的,IIOP 和 LDAP,IIOP的URL如同 iiop://mycosnamingserver,使用的工厂是com.sun.jndi.cosnaming.CNCtxFactory,LDAP的URL如同 ldap://myldapnameserver,这个参数的设置稍微复杂一点,请参考 《走出JNDI迷宫》 -- Daniel Would。

对于RMI的传输协议设置请看jndi.properties设置。

jndi.properties

java.naming.factory.initial=com.sun.jndi.rmi.registry.RegistryContextFactory
java.naming.provider.url=rmi://127.0.0.1:2500

 

 Client.java重构

package remote.test.client;

import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;

import remote.test.HelloTask;
import remote.test.HelloTaskImpl;
import remote.test.IHello;

public class HelloClient {
	public static void main(String[] args) {
		try {
			//IHello hi = (IHello) Naming.lookup("rmi://127.0.0.1:2500/hello");
			InitialContext ctx = new InitialContext();
			Object obj = ctx.lookup("hello"); 
			IHello hi = (IHello)PortableRemoteObject.narrow(obj,IHello.class);
			HelloTask task = new HelloTaskImpl();
			for (int i = 0; i < 10; i++) {
				System.out.println(hi.say(task));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 连接地址和端口号将从java.naming.provider.url获得,使用InitialContext能够有效地帮助我们再各个平台上搭建我们的服务器,使用各种协议来应对各种平台所带来的问题。服务端的代码没有改动,请参考上一节的文章《使用Eclipse编写Java RMI程序详解》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值