一个神奇的分布式计算框架:jini

     很多年前,我的老师在加拿大电信研究所做项目的时候,接触了一种分布方式的计算框架JINI,当时感觉非常神奇,可惜在中国这种框架是很不流行的。
    
      为什么呢,因为JINI是基于RMI,而RMI是基于SOCKET的,单反过来说,RMI是对SOCKET的一种封装,而Jini、是针对RMI的封装,所以,如果对面向对象的理解的不深入的话,就很难调试这种技术。
   
       Jini还有一个神奇之处,是引入了javaspace, javaspace可以理解为一个对象的中转站,从功能上看,是一种轻量的JMS.而胜任绝大多数分布方式应用都没有问题。

     经过机缘巧合,我们也做了一个类似的原型项目,再次验证了JINI的强大,和面向对象技术的神奇之处,在这里提供相关的程序包,供有缘分的朋友下载分享。
      另外,想说一点,一般的程序设计人员是很难有机会解接触分布式计算的,尤其是基于广域网的分布式计算,所以这个可以作为理解面向对象的一种学习框架. 就像smalltalk是一种面向对象的教学语言,Jini是一种分布式计算的教学框架。
    
     
     Smalltalk被公认为历史上第二个面向对象的程序设计语言和第一个真正的集成开发环境 (IDE)。由Alan Kay,Dan Ingalls,Ted Kaehler,Adele Goldberg等于70年代初在Xerox PARC开发。Smalltalk对其它众多的程序设计语言的产生起到了极大的推动作用,主要有:Objective-C,Actor, Java 和Ruby等。90年代的许多软件开发思想得利于Smalltalk,例如Design Patterns, Extreme Programming(XP)和Refactoring等。

 


公司名称:中国移动通信集团湖北有限公司网管中心公司地址:武汉市东西湖区金银湖南街2号 3G信息园邮政编码:430048

1) Jini的开发包。

  2)javaspace的开发环境与资料。

  3)另外一个开源的 javaspace实现blitz






关于reggie的单播注册方法
1、配置文件方式
1)  启动reggie的脚本信息
new NonActivatableServiceDescriptor(
            "http://" + host + ":" + port + "/reggie-dl.jar" + jskdl,
            policy,
            "C:\\jini2_1\\lib\\reggie.jar",
            "com.sun.jini.reggie.TransientRegistrarImpl",
            new String[] { "C:\\jini2_1\\installverify\\support\\reggie.config" }),
告诉JVM配置文件为reggie.config
2)在reggie.config的文件内容如下:
import net.jini.jeri.BasicJeriExporter;
import net.jini.jeri.tcp.TcpServerEndpoint;
import net.jini.jeri.ProxyTrustILFactory;
import net.jini.jeri.BasicILFactory;
import net.jini.lookup.entry.Name;
import net.jini.core.entry.Entry;
import net.jini.lookup.entry.ServiceInfo;
import com.wri.hy.onecgs.jini.entry.AuthenEntry;
import com.wri.hy.onecgs.jini.entry.ConfigEntry4AuthenInfoWriter;
import com.wri.hy.onecgs.jini.entry.ConfigEntry4MeshFederator;
import com.wri.hy.onecgs.jini.entry.ConfigEntry4NetworkNodeWriter;
import com.wri.hy.onecgs.jini.entry.ConfigEntry4TaskTimer;
import com.wri.hy.onecgs.jini.entry.NetworkEntry;
import com.wri.hy.onecgs.jini.entry.NodeEntry;
import com.wri.hy.onecgs.jini.entry.ConfigEntry4NetworkNodeDispatcher;
import java.net.NetworkInterface;
import net.jini.lookup.entry.Location;
import net.jini.core.discovery.LookupLocator;
import com.wri.hy.onecgs.jini.entry.LookupEntry4Cm;
com.sun.jini.reggie {
    serverExporter = new BasicJeriExporter(
               TcpServerEndpoint.getInstance("192.168.8.3",0),
                          new ProxyTrustILFactory(null, null), false, true);
    initialLookupLocators = new LookupLocator[]{new LookupLocator("jini://192.168.8.1"),new LookupLocator("jini://192.168.8.2")};
    initialMemberGroups = new String[] { "hb","mf"};
    initialLookupAttributes = new Entry[] {new LookupEntry4Cm("湖北移动","hubei",new Integer(1),new Boolean(true),"192.168.8.3",new Integer(4160),new Long(System.currentTimeMillis()))};
}
3)其中
initialLookupLocators = new LookupLocator[]{new LookupLocator("jini://192.168.8.1"),new LookupLocator("jini://192.168.8.2")};
表示向多个JLS的单播注册信息
4) 启动jini即可

2、远程接口方式
1)获取JLS的proxy
2) 根据接口JoinAdmin调用方法
   public void setLookupLocators(LookupLocator[] locators)
                       throws RemoteException
3)即时生效 

猜你喜欢

转载自flyqantas.iteye.com/blog/1672482