`

如何搭建基于JDK1.5的分布式JAVA RMI 程序

 
阅读更多

这里讲述的是基于JDK1.5的RMI程序搭建,更简单的说是一个 HelloWorld RMI。

1. 这里是基于JDK1.5的,节省了繁琐的手工编译(生成桩和骨架)。不像1.4之前的RMI。

2. 这里是把客户端和服务器端的两个程序,分布在两个独立的程序里面,而不是同一个package下面。是真正的分布式。

3. 这里不过多阐述原理,这只是一个Hello World!!

好,以下是步骤:

1. 在Eclipse里面创建一个server 端的project。然后,创建一个接口,这个接口是你要向client端开放的方法定义。它叫做:UserManagerInterface,而且必须继承Remote接口。

package dataserver.rmi.stub; 
 
import java.rmi.Remote; 
import java.rmi.RemoteException; 
 
import dataserver.rmi.bean.Account; 
 
public interface UserManagerInterface extends Remote{ 
    public String getUserName() throws RemoteException; 
    public Account getAdminAccount() throws RemoteException; 
} 

 

2. 为了证明RMI中,“面向对象”或者是“无缝传递JAVA Object”是何等简单,我们需要定义一个Account类,该类是一个Bean,必须实现implements Serializable序列化接口。这是一个可以在client和server传输的可序列化对象。

package dataserver.rmi.bean; 
 
import java.io.Serializable; 
 
public class Account implements Serializable,Cloneable{ 
 
    /** 
     *  
     */ 
    private static final long serialVersionUID = -1858518369668584532L; 
    private String username; 
    private String password; 
     
    public String getUsername() { 
        return username; 
    } 
    public void setUsername(String username) { 
        this.username = username; 
    } 
    public String getPassword() { 
        return password; 
    } 
    public void setPassword(String password) { 
        this.password = password; 
    } 
      
} 

 

3. 此时,需要实现你已经开放的接口:

package dataserver.rmi; 
 
import java.rmi.RemoteException; 
 
import dataserver.rmi.bean.Account; 
import dataserver.rmi.stub.UserManagerInterface; 
 
public class UserManagerImpl implements UserManagerInterface { 
 
    public UserManagerImpl() throws RemoteException { 
        //super(); 
        // TODO Auto-generated constructor stub 
        //UnicastRemoteObject.exportObject(this); 
    } 
 
    /** 
     *  
     */ 
    private static final long serialVersionUID = -3111492742628447261L; 
 
    public String getUserName() throws RemoteException { 
        // TODO Auto-generated method stub 
        return "Tommy Lee"; 
    } 
 
    public Account getAdminAccount() throws RemoteException { 
        // TODO Auto-generated method stub 
        Account account=new Account(); 
        account.setUsername("admin"); 
        account.setPassword("admin"); 
        return account; 
    } 
 
} 

 

4. 定义一个主程序入口,注册你已经实现的RMI接口,包括开放端口等。其实很简单:

把我们的接口名称,命名为“userManager”,方便client进行调用

package dataserver.entry; 
 
import java.rmi.AlreadyBoundException; 
import java.rmi.RemoteException; 
import java.rmi.registry.LocateRegistry; 
import java.rmi.registry.Registry; 
import java.rmi.server.UnicastRemoteObject; 
 
import dataserver.rmi.UserManagerImpl; 
import dataserver.rmi.stub.UserManagerInterface; 
 
public class Entry { 
 
    public static void main(String []args) throws AlreadyBoundException, RemoteException{ 
     
 
            UserManagerImpl userManager=new UserManagerImpl(); 
            UserManagerInterface userManagerI=(UserManagerInterface)UnicastRemoteObject.exportObject(userManager,0); 
            // Bind the remote object's stub in the registry 
            Registry registry = LocateRegistry.createRegistry(2001); 
            registry.rebind("userManager", userManagerI); 
            System.out.println("server is ready"); 
    } 
} 

 

5. Server端的代码已经全部写完,但是还要把bean类(Account)和接口类(UserMangerInterface)打包成jar,以便可以在下面导入进client端的项目中。

项目--》右键--》导出--》jar--》选择bean和interface--》命名为RmiServerInterface.jar--》finish


 

6.  开始创建client端的程序。新建一个project。创建完成后,把刚才jar包导入进client的项目中。

7.  导入我们的接口jar以后,可以开始编写一个client端的主程序,并调用server端的方法。

package weiblog.rmi; 
import java.rmi.NotBoundException; 
import java.rmi.RemoteException; 
import java.rmi.registry.LocateRegistry; 
import java.rmi.registry.Registry; 
 
import dataserver.rmi.stub.UserManagerInterface; 
 
public class Entry2 { 
 
    public static void main(String []args){ 
         
        try { 
            Registry registry = LocateRegistry.getRegistry("localhost",2001); 
            UserManagerInterface userManager = (UserManagerInterface) registry.lookup("userManager"); 
            System.out.println(""+userManager.getAdminAccount().getUsername() 
                    +userManager.getAdminAccount().getPassword()); 
        } catch (RemoteException e) { 
            // TODO Auto-generated catch block 
            e.printStackTrace(); 
        } catch (NotBoundException e) { 
            // TODO Auto-generated catch block 
            e.printStackTrace(); 
        } 
         
    } 
} 

 

8. 启动server端的主程序,然后启动client端的主程序。

server控制台打印:server is ready

client控制台打印:adminadmin

大功告成!!

 

原文转自:http://6221123.blog.51cto.com/6211123/1112633

  • 大小: 17.8 KB
分享到:
评论

相关推荐

    RMI网络编程开发之二 如何搭建基于JDK1.5的分布式JAVA RMI 程序

    NULL 博文链接:https://javasam.iteye.com/blog/1848846

    RMI.rar_Java RMI_java.rmi_java.rmi.Remot_remote

    Java RMI (Remote Method Invocation 远程方法调用)是用Java在JDK1.1中实现的,它大大增强了Java开发分布式应用的能力。

    Java开发基于rmi的数据库中间件设计源码,并利用中间件建立一个数据库应用(Java web项目),分布式对象技术课程实践

    Java开发基于rmi的数据库中间件设计源码,并利用中间件建立一个数据库应(Java web项目),分布式对象技术课程实践 主机安装Node.js,并在控制台进入front-end-pages目录下,按顺序执行以下命令运行前端: npm install ...

    Java RMI远程方法调用详解

    RMI是Java的一组拥护开发分布式应用程序的API。RMI使用Java语言接口定义了远程对象,它集合了Java...  RMI(Remote Method Invocation,远程方法调用)是用Java在JDK1.1中实现的,它大大增强了Java开发分布式应用的能

    Java程序设计复习题.doc

    A.Java是面向过程的编程语言 B.Java支持分布式计算 C.Java是跨平台的编程语言 D.Java支持多线程 3. Java的核心包中,提供编程应用的基本类的包是 A 。 A.java.lang B.java.util C.java.applet D.java.rmi ...

    1Java程序设计复习题.doc

    A.Java是面向过程的编程语言 B.Java支持分布式计算 C.Java是跨平台的编程语言 D.Java支持多线程 3. Java的核心包中,提供编程应用的基本类的包是 A 。 A.java.lang B.java.util C.java.applet D.java.rmi ...

    Java程序设计复习题.docx.docx

    Java程序设计复习题 Java程序设计复习题全文共19页,当前为第1页。Java程序设计复习题全文共19页,当前为第1页。一、选择题: Java程序设计复习题全文共19页,当前为第1页。 Java程序设计复习题全文共19页,当前为第...

    java jdk-api-1.6 中文 chmd

    java.rmi.dgc 为 RMI 分布式垃圾回收提供了类和接口。 java.rmi.registry 提供 RMI 注册表的一个类和两个接口。 java.rmi.server 提供支持服务器端 RMI 的类和接口。 java.security 为安全框架提供类和接口。 ...

    JDK_API_1_6_zh_CN_downcc.com.zip 良心一级分

    java.rmi.dgc 为 RMI 分布式垃圾回收提供了类和接口。 java.rmi.registry 提供 RMI 注册表的一个类和两个接口。 java.rmi.server 提供支持服务器端 RMI 的类和接口。 java.security 为安全框架提供类和接口。 ...

    [Java参考文档].JDK_API 1.6

    java.rmi.dgc 为 RMI 分布式垃圾回收提供了类和接口。 java.rmi.registry 提供 RMI 注册表的一个类和两个接口。 java.rmi.server 提供支持服务器端 RMI 的类和接口。 java.security 为安全框架提供类和接口。 java....

    Java 1.6 API 中文 New

    java.rmi.dgc 为 RMI 分布式垃圾回收提供了类和接口。 java.rmi.registry 提供 RMI 注册表的一个类和两个接口。 java.rmi.server 提供支持服务器端 RMI 的类和接口。 java.security 为安全框架提供类和接口。 java....

    Java项目开发与毕业设计指导

    Ch12:基于Agent实现的分布式计算 本程序的运行基于Aglet,首先要安装和配置Aglet:推荐安装Aglet稳定版本。对于不是开发者,我们推荐从编译好的包中安装。所有的库文件和平台都被打包成一个jar(Java Archive)...

    java api最新7.0

    java.rmi.dgc 为 RMI 分布式垃圾回收提供了类和接口。 java.rmi.registry 提供 RMI 注册表的一个类和两个接口。 java.rmi. 提供支持服务器端 RMI 的类和接口。 java.security 为安全框架提供类和接口。 java....

    java远程方法调用

    Java RMI(Remote Method Invocation,远程方法调用)是Java在JDK1.1及以后的版本中实现的,它能让一个Java程序调用网络中另外一台计算机上的Java方法,就如同调用本地方法一样。RMI大大增强了Java开发分布式应用的...

    JDK_1_6 API

    java.rmi.dgc 为 RMI 分布式垃圾回收提供了类和接口。 java.rmi.registry 提供 RMI 注册表的一个类和两个接口。 java.rmi.server 提供支持服务器端 RMI 的类和接口。 java.security 为安全框架提供类和接口。 java....

    [Java参考文档]

    java.rmi.dgc 为 RMI 分布式垃圾回收提供了类和接口。 java.rmi.registry 提供 RMI 注册表的一个类和两个接口。 java.rmi.server 提供支持服务器端 RMI 的类和接口。 java.security 为安全框架提供类和接口。 ...

    Java笔试面试宝典.docx

    RMI(Remote Method Invocation,远程方法调用)是用Java在JDK1.1中实现的,它大大增强了Java开发分布式应用的能力。Java作为一种风靡一时的网络开发语言,其巨大的威力就体现在它强大的开发分布式网络应用的能力上...

    【白雪红叶】JAVA学习技术栈梳理思维导图.xmind

    关于java程序员发展需要学习的路线整理集合 技术 应用技术 计算机基础知识 cpu mem disk net 线程,进程 第三方库 poi Jsoup zxing Gson 数据结构 树 栈 链表 队列 图 操作系统 linux 代码控制...

Global site tag (gtag.js) - Google Analytics