JAVA远程调用RMI

Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用应用程序编程接口。它使客户机上运行的程序可以调用远程服务器上的对象。远程方法调用特性使Java编程人员能够在网络环境中分布操作。RMI全部的宗旨就是尽可能简化远程接口对象的使用。

Java RMI极大地依赖于接口。在需要创建一个远程对象的时候,程序员通过传递一个接口来隐藏底层的实现细节。客户端得到的远程对象句柄正好与本地的根代码连接,由后者负责透过网络通信。这样一来,程序员只需关心如何通过自己的接口句柄发送消息。

接口的两种常见实现方式是:最初使用JRMP(Java Remote Message Protocol,Java远程消息交换协议)实现;此外还可以用与CORBA兼容的方法实现。RMI一般指的是编程接口,也有时候同时包括JRMP和API(应用程序编程接口),而RMI-IIOP则一般指RMI接口接管绝大部分的功能,以支持CORBA的实现。

最初的RMI API设计为通用地支持不同形式的接口实现。后来,CORBA增加了传值(pass by value)功能,以实现RMI接口。然而RMI-IIOPJRMP实现的接口并不完全一致。

所使用Java包的名字是java.rmi

上例子:

Server端编写

1、//定义实体类用于RMI传递对象,注意该对象一定要序列化

public class Account implements Serializable{
     private static final long serialVersionUID = 1L;
     String userName;
     String password;
     省略getter and setter...
 }

2、定义接口

接口定义了2个方法,一个用于RMI传递字符串、一个传递对象

public interface UserManagerInterface extends Remote{
 public String getUserName() throws RemoteException;
 public Account getAdminAccount() throws RemoteException;

}
3、定义实现类

public class UserManagerImpl implements UserManagerInterface {

     @Override
     public String getUserName() throws RemoteException {
          // TODO Auto-generated method stub
         return "abc";
     }

     @Override
     public Account getAdminAccount() throws RemoteException {
          Account account = new Account();
          account.setUserName("admin");
          account.setPassword("123");
          return account;
     }

}

4、发布RMI服务端

public class Entry {
     public static void main(String[] args) throws RemoteException{
          UserManagerInterface userManagerImpl = new UserManagerImpl();
          UserManagerInterface userManagerInterface =

                   (UserManagerInterface)UnicastRemoteObject.exportObject(userManagerImpl,0);
          Registry registry = LocateRegistry.createRegistry(1099);
          registry.rebind("userManager", userManagerInterface);


          System.out.println("server is ready");
     }
}

至此服务端代码完成

=====================

但是还要把bean类(Account)和接口类(UserMangerInterface)打包成jar,以便可以在下面导入进client端的项目中。

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

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

2、创建客户端代码测试代码

public class ClientEntry {
     public static void main(String[] args){
          try {
                Registry registry = LocateRegistry.getRegistry("localhost", 1099);
                UserManagerInterface userManagerInterface =

                        (UserManagerInterface)registry.lookup("userManager");
   
                System.out.println(userManagerInterface.getUserName());
   
                Account accout = userManagerInterface.getAdminAccount();
                if(accout != null){
                   System.out.println("userName=" + accout.getUserName() +

                          ";password=" + accout.getPassword());
                 }
            } catch (Exception e) {
                   e.printStackTrace();
           }
      }
}

运行客户端,打印结果

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值