当前位置:首页 » 服务器技术
开发技术指南» 文章正文
    引言: 如果你从事过Jini开发,你会知道Jini客户端是不需要知道服务的位置的;它们简单地通过发现机制来获得一个代理以访问它们需要的服务。
 

 

 ·java中finalize()的另类用法(1)    »显示摘要«
    摘要:做过java编程的都知道,在java中有一种垃圾收集器的机制,当它运行时(通常在系统内存低到一定限度时自动运行),会回收不再使用的对象所占用的内存,所以,在java程序中,我们通常只考虑创建对象,而从不关心对象的清除。finalize()是java为类提供的一种特殊方法。垃圾收集器的工作过程大致是这样的:一旦垃圾收集器准备好释放无用对象占用的存储空间,它首先调用那些对象的finalize()方法,......
 ·类的设计方法    »显示摘要«
    摘要:(1) 类名首字母应该大写。字段、方法以及对象(句柄)的首字母应小写。对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母。例如: thisisaclassname thisismethodorfieldname 若在定义中出现了常数初始化字符,则大写static final基本类型标识符中的所有字母。这样便可标志出它们属于编译期的常数。 java包(package)属于一种......


为RMI实现类Jini的发现机制(1)
上一页   ...

正如我们从例子中可以看到,servicediscoverymanager用lookup()方法来查找任何与servicetemplate匹配的可用的服务.你还可以在服务查找中使用任何数字或属性;在这里我们出于保持简单与精练的考虑而没有这样做.

【程序编程相关:球无线局域网设备收入增长10%

【推荐阅读:和记黄埔与微软合作 用户3G手机将与MS

比较两种查找机制,你会注意到在jini版本中没有指定服务的位置.值得一提的是,如果必要,你也可以指定一个查找服务的位置,但不是你想要访问的实际服务的位置.jini模型的强大之处是,我们不需要知道或关心服务位于何处. 【扩展信息:美议员针对黄色网站提案 建议统一管理域名

比较了rmi与jini的发现机制之后,现在我们可以考虑怎样用类jini的风格来访问一个rmi服务器.

位置中立的rmi查找

理想地,我们考虑查找translator所发现的第一个匹配的实例.

translator service

=(translator)rmidiscovery.lookup(clazz,id);

在这里clazz是rmi服务的接口,id是区分实现clazz接口的不同服务器实例的唯一字符串标识.例如,要找到一个西班牙语翻译器,我们用下面的代码:

class clazz=translator.class;

string id="spanish";

现在我们对如何使用rmi发现机制有了一个更好的主意,我们来研究一下怎样实现它.在我们尝试实现我们“简陋的”rmi发现机制以前,先来看看jini是怎样做的,再把这些原理/概念适用到rmi服务器与客户端上.

发现机制

jini的基本发现机制联合使用多播udp(用户数据报协议)(multicast udp 见文后的resources)与单播tcp/ip.简单来说,这意味着客户端发出一个多播的请求数据包,然后数据包被监听它的查找服务拾取.然后查找服务用单播连接连回客户端,并把查找服务的代理串行化成流通过此连接发送出去.此后客户端就可以与查找服务(的代理)交互以定位它需要的服务.

发现机制实际上比这要复杂得多,但我们只对其中多播udp与单播tcp/ip的关键概念感兴趣.我们并不打算实现一个等同的独立运行的rmi查找服务.相反我们将实现一个简单的多播监听器/单播分发器(multicast listener/unicast dispatcher)供rmi服务器使用,实际上我们使得每个rmi服务器作为它自己的查找服务.在客户端,我们为服务器端socket写个配对物??一个多播分发器/单播监听器(multicast dispatcher/unicast listener).

下面的表更详细地说明了rmi客户端与rmi服务器端间的交互.

rmi客户端与rmi服务器端的交互

服务器端客户端

在多播地址上开始监听

建立serversocket以监听来自服务器的单播响应.

开始向多播地址发送udp数据包


...   下一页
 ·在canvas类里调用textbox    »显示摘要«
    摘要:代码 /*** textbox´´s instance*/private textbox inputname = null;/*** 「cancel」command* command in textbox*/private command ccancel = new command("cancel", command.cancel, 1);/*** 「ok」command......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE