领略分布式编程乐趣--[4]

原创 2003年09月16日 12:16:00
 


                     领略分布式编程乐趣

RedStar81 9/9/200313/9/2003
                                                                      
81_RedStar81@163.com
                                                                  TomHornson.student@www.sina.com.cn

首次修改时间:13/9/2003
            
个人文集:
http://www.csdn.net/develop/author/netauthor/RedStar81/
             WebLog: http://www.advogato.org/person/TomHornson/

 

   

2)访问远程对象

我们知道在RMI或是Remoting,使用分布式对象技术,你需要建立服务器端的远程对象,这个对象需要实现Remote接口并且继承于UnicastRemoteObject以获得分布式特性支持。而这一切在Voyager下变得简单了。Voyager在运行时生成一个类型兼容的代理,并且提供了几种方法做到这一点: a 创建一个本地对象,然后调用Proxy的静态方法Proxy.of(Object obj)来创建它的代理.  b 使用名字服务。Voyager提供名字服务功能。每个对象都可以通过将它们的名字服务登记到名字服务中,然后其它程序就可以通过Namespace.lookup(String Name)来得到这个对象的一个代理。 c 这个方法很有特色。在客户端你可以通过Factory.create(String classname,String url)在远程机器上建立对象,并且返回远程对象的代理。

下面我们就通过这几种方法实践一下Voyager环境下远程对象计算:

 

方法A示例:

程序片断1:

//

//Project : RemoteObject

//Filename : IBall.java

//Creator And Date : RedStar81 2003-8-22 22:51

//

//Statement :

//

 

public interface IBall{

  public void hit();

}

  

   //

//Project : RemoteObject

//Filename : Ball.java

//Creator And Date : RedStar81 2003-8-22 22:51

//

//Statement :

//

 

public class Ball implements IBall{

 

public void hit(){

    System.out.println("Ball has been hit");

}

}

 

//

//Project : RemoteObject

//FileName : Bat.java

//Creator And Date : RedStar81 2003-8-22 22:50

//

//Statement :

//

 

import com.objectspace.voyager.*;

 

public class Bat{

 

public void play(IBall iball){

    iball.hit();

}

 

public static void main(String[] args){

 

try{

    Voyager.startup();

   

    Bat bat = new Bat();

    IBall iball = (IBall)Namespace.lookup("8000/Ball");   

    bat.play(iball);   

}catch(Exception e){

       System.err.println(e);

}

    Voyager.shutdown();

}

 

}

 

//

//Project : RemoteObject

//Filename : BallMachine.java

//Creator And Date : RedStar81 2003-8-22 22:50

//

//Statement :

//

 

 

import com.objectspace.voyager.*;

 

public class BallMachine{

 

public static void main(String[] args){

 

try{

    Voyager.startup("8000");

    Ball ball = new Ball();

    IBall iball = (IBall)Proxy.of(ball);

    Namespace.bind("8000/Ball",iball);

}catch(Exception e){

       System.err.println(e);

}

 

}

}

上面的程序很简单,略知RMI或时Remoting,看起来一目了然,这里就不再讲解了.

 

 

程序片断二:下面是方法一复杂一点点的程序,这里客户端在调用远程对象的方法时,传递计算对象:

//

//Project : RemoteObjectComplexComputing using voyager producted by objectspace

//Filenaem : IComputing.java

//Creator And Date : RedStar81 2003-8-23 0:07

//

//Statement : It is uesd to test the conditons when pass a object !

//

 

public interface IComputing{

public Double computing(ComputingObject co);

}

 

//

//Project : RemoteObjectComplexComputing using voyager producted by objectspace

//Filenaem : Computing.java

//Creator And Date : RedStar81 2003-8-23 0:07

//

//Statement : It is uesd to test the conditons when pass a object !

//

 

 

public class Computing implements IComputing{

 

public Double computing(ComputingObject co){

   

    System.out.println("Computing is done on this machine !");   

    return co.workCode();

}

 

}

 

//

//Project : RemoteObjectComplexComputing using voyager producted by objectspace

//Filenaem : ComputingServer.java

//Creator And Date : RedStar81 2003-8-23 0:07

//

//Statement : It is uesd to test the conditons when pass a object !

//

import java.io.*;

 

public class ComputingObject implements Serializable {

//

//Serializable : need !

//

private double sum = 0;

private int dtStart,dtEnd;

 

public ComputingObject(int dataStart,int dataEnd){

    dtStart = dataStart;

    dtEnd = dataEnd;

}

   

public Double workCode()

{

       for(int control = dtStart ; control < dtEnd ; control++)

              sum += Math.sqrt(control);

       return new Double(sum);

}

 

}

 

//

//Project : RemoteObjectComplexComputing using voyager producted by objectspace

//Filenaem : ComputingServer.java

//Creator And Date : RedStar81 2003-8-23 0:07

//

//Statement : It is uesd to test the conditons when pass a object !

//

 

import com.objectspace.voyager.*;

 

public class ComputingServer{

 

public static void main(String[] args)

{

      

try{

    Voyager.startup("8000");

    Computing computingObject = new Computing();

    IComputing iComputing = (IComputing)Proxy.of(computingObject);

    Namespace.bind("8000/Computing",iComputing);

}catch(Exception e)

{

       System.err.println(e);

}   

 

}

}

 

//

//Project : RemoteObjectComplexComputing using voyager producted by objectspace

//Filenaem : Caller.java

//Creator And Date : RedStar81 2003-8-23 0:07

//

//Statement : It is uesd to test the conditons when pass a object !

//

 

import com.objectspace.voyager.*;

 

public class Caller{

 

public static void main(String[] args){

      

try{

    Voyager.startup();

    Computing computingObject = new Computing();

   

    IComputing iC = (IComputing)Namespace.lookup("//localhost:8000/Computing");

   

    double returnValue = (iC.computing(new ComputingObject(1,100000))).doubleValue();

    System.out.println(returnValue);   

 

}catch(Exception e)

{

       System.err.println(e);

}

    Voyager.shutdown();  

}

}

上面需要注意的就是传递给远程对象方法的参数需要实Serializable接口.

 

 

待续:

 

2.    DCOM

3.    CORBA

4.       WebServices

5.         Sun RMI  VS. dotNET Remoting

6.         LindaSun JavaSpace ,IBM Tspace

7.         JINI

8.         Emerald VS. Dejay

9.         Pjama

10.     IBM Mobile Computing Interface : Aglets

.综合应用分析

1.       利用多线程和分布对象计算技术模拟高性能并行计算

2.       利用Vdejay计算几何分形图

 

 

 声明:

1。本人不是专门研究分布式的,完全出于兴趣写下这篇文章.希对分布式计算应用爱好者有所帮助。
2
。水平有限,欢迎指正。
3
。由于本文讲述内容较多,很多讲述不可能太细致。而且考虑到读者群的问题,理论性内容尽量的省略。
  
如果读者有兴趣,可参考列出的参考书籍和网络资源。

4。可任意的转载、不过请注明出处;不可用于商业用途。

 

编程的乐趣——《人月神话》摘录

最近在读《人月神话》,收获颇多,摘录与大家共享。   编程为什么有趣?作为回报,它的从业者期望得到什么样的快乐?  首先是一种创建事物的纯粹快乐。如同小孩在玩泥巴时感到愉快一样,成年人喜欢创建事...
  • huwell88
  • huwell88
  • 2013年06月18日 22:28
  • 911

漫谈程序员系列:软件开发的十八般乐趣

到底程序员有多少种快乐……
  • foruok
  • foruok
  • 2014年11月24日 07:21
  • 21112

读书笔记9 《发现的乐趣》 理查德-费曼

他不属于某一个时代,而属于所有世纪 天籁本身以他的心裁而得意,穿起他的诗句来好不欢喜...
  • m0_37890694
  • m0_37890694
  • 2017年03月19日 10:25
  • 624

机器学习概述----机器学习并没有那么深奥,它很有趣(3)

编者按:在科技圈,如果你不懂“机器学习”,那你就 out 了。当别人在谈论机器学习娓娓道来时,你却一头雾水,怎么办?在跟同事的聊天中,你只能频频点头却插不上话,怎么办?让我们来做些改变!Adam Ge...
  • yuxin6866
  • yuxin6866
  • 2017年01月12日 10:13
  • 521

C++并发编程概述——关于并行编程分布式编程

对于并发编程的诸多方法本人一直感觉到混乱,刚好最近看了一些资料,觉得是时候系统的梳理一下了。以下资料大部分来自《C++并行与分布式编程》,英文版叫《Parallel and Distributed P...
  • njustzj001
  • njustzj001
  • 2015年06月26日 10:06
  • 2848

编程的乐趣与苦恼

职业的乐趣 编程为什么有趣?作为回报,它的从业者期望得到什么样的快乐?   首先是一种创建事物的纯粹快乐。如同小孩在玩泥巴时感到愉快一样,成年人喜欢创建事物,特别是自己进行设计。我想这种快乐是上帝创...
  • conansix
  • conansix
  • 2014年06月21日 08:55
  • 5859

领略千变万化的Android Drawable (二)

转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/52160092 出自【zejian的博客】 关联文章: 领...
  • javazejian
  • javazejian
  • 2016年08月19日 08:47
  • 2876

虚幻4C++编程入门(搬运1)

首先我们将使用虚幻编辑器中的类向导生成基础 C++ 类,以便蓝图稍后进行延展。下图展示了向导的第一步 - 新建一个 Actor。 这里根据对character、pawn和actor的描述,知道了pa...
  • qq_31828929
  • qq_31828929
  • 2017年05月17日 23:06
  • 912

编程职业的乐趣

编程职业的乐趣 美酒的酿造需要年头,美食的烹饪需要时间;片刻等待,更多美味,更多享受。 编程为什么有趣? 作为回报,它的从业者期望得到什么样的快乐? 首先是一种创建事物的纯粹快乐。...
  • kiss_xiaojie
  • kiss_xiaojie
  • 2017年06月23日 22:37
  • 66

漫谈并发编程:用MPI进行分布式内存编程(入门篇)

0x00 前言 本篇是MPI的入门教程,主要是为了简单地了解MPI的设计和基本用法,方便和现在的Hadoop、Spark做对比,并尝试理解它们之间在设计上有什么区别。 身处Hadoop、Spark...
  • zhaodedong
  • zhaodedong
  • 2017年06月18日 22:18
  • 793
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:领略分布式编程乐趣--[4]
举报原因:
原因补充:

(最多只允许输入30个字)