`
usiboy
  • 浏览: 27004 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用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程序详解》

3
2
分享到:
评论
1 楼 jyjava 2011-07-18  
将连接的url写入配置文件中,是个想法,不过你再怎么弄,url都会暴露在外面,很不安全

相关推荐

Global site tag (gtag.js) - Google Analytics