• java远程调用rmi入门实例


          RMI是Java的一组拥护开发分布式应用程序API。RMI使用Java语言接口定义了远程对象,它集合了Java序列化和Java远程方法协议(Java Remote Method Protocol)。

    简单地说。这样使原先的程序在同一操作系统的方法调用,变成了不同操作系统之间程序的方法调用。因为J2EE是分布式程序平台,它以RMI机制实现程序组件在不同操作系统之间的通信。比方,一个EJB能够通过RMI调用Web上还有一台机器上的EJB远程方法。

        用例server端结构大概如此

        

    首先定义要传送的实体类。由于要网络传输,必须实现序列化

    User.java

    package com.yiyuwanglu.rmi.entity;
    
    import java.io.Serializable;
    
    public class User implements Serializable {
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = -8400949180923337013L;
    	private String id;
    	private String name;
    	private int age;
    
    	
    
    	public String getId() {
    		return id;
    	}
    
    	public void setId(String id) {
    		this.id = id;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    
    	}
    
    	public int getAge() {
    		return age;
    	}
    
    	public void setAge(int age) {
    		this.age = age;
    	}
    
    }
    
    第二定义实体接口,必须继承 java.rmi.Remote

    UserService

    package com.yiyuwanglu.rmi.service;
    
    import java.rmi.Remote;
    import java.rmi.RemoteException;
    
    import com.yiyuwanglu.rmi.entity.User;
    
    public interface UserService extends Remote {
    	public User getUserById(String id)throws RemoteException;
    }
    
    第三。实现接口 记得继承UnicastRemoteObject

    UserServiceImpl

    package com.yiyuwanglu.rmi.service.impl;
    
    import java.rmi.RemoteException;
    import java.rmi.server.UnicastRemoteObject;
    
    import com.yiyuwanglu.rmi.entity.User;
    import com.yiyuwanglu.rmi.service.UserService;
    
    public class UserServiceImpl extends UnicastRemoteObject  implements UserService {
    
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = 6222175854495075991L;
    
    	public UserServiceImpl() throws RemoteException {
    		super();
    		// TODO Auto-generated constructor stub
    	}
    
    	@Override
    	public User getUserById(String id) {
    		User user=new User();
    		user.setId(id);
    		user.setAge(100);
    		user.setName("測试");
    		return user;
    	}
    
    }

    server端启动

    Program.java

    package com.yiyuwanglu.rmi.program;
    
    import java.net.MalformedURLException;
    import java.nio.channels.AlreadyBoundException;
    import java.rmi.Naming;  
    import java.rmi.RemoteException;
    import java.rmi.registry.LocateRegistry;  
    
    import com.yiyuwanglu.rmi.service.UserService;
    import com.yiyuwanglu.rmi.service.impl.UserServiceImpl;
      
    public class Program{  
        public static void main(String[] args) {  
            // TODO Auto-generated method stub  
            try {  
                UserService userService=new UserServiceImpl();  
                //注冊通讯端口  
                LocateRegistry.createRegistry(6600);  
                //注冊通讯路径  
                Naming.rebind("rmi://127.0.0.1:6600/userService", userService);  
                System.out.println("Service Start!");  
            }  catch (RemoteException e) {
                System.out.println("创建远程对象发生异常!");
                e.printStackTrace();
            } catch (AlreadyBoundException e) {
                System.out.println("发生反复绑定对象异常!");
                e.printStackTrace();
            } catch (MalformedURLException e) {
                System.out.println("发生URL畸形异常!

    "); e.printStackTrace(); } } }


    client測试。最好找还有一台机子(当然同一台机子或许,只是为了模拟真实情况,还是还有一台机子。记得iP要换)创建client,切记:相关的类的包的路径要跟server一样

    比如:client的 UserService

    package com.yiyuwanglu.rmi.service;
    最后client调用

    package com.yiyuwanglu.rmi.program;
    
    import java.rmi.Naming;
    
    import com.yiyuwanglu.rmi.entity.User;
    import com.yiyuwanglu.rmi.service.UserService;
    
    public class Client {
    	 public static void main(String[] args){  
    	        try{  
    	            //调用远程对象,注意RMI路径与接口必须与server配置一致  
    	        	UserService userService=(UserService)Naming.lookup("rmi://127.0.0.1:6600/userService");  
    	            User user =userService.getUserById("1245");
    	             System.out.println(user.getName());
    	        }catch(Exception ex){  
    	            ex.printStackTrace();  
    	        }  
    	    }  
    }
    


    先启动server端
    Program
    然后启动client
    Client
    
    显示结果各自是

    Service Start!

    client

    測试



  • 相关阅读:
    github上fork的项目,如何同步原作者更新的内容?
    设计模式-简单工厂模式详解
    设计模式-建造者模式详解
    设计模式-原型模式详解
    设计模式-单例模式详解
    SqlServer断开所有连接
    Winform重写键盘按键事件
    从拖拉控件编程到面向设计编程(一)
    Springboot vue 前后分离 跨域 Activiti6 工作流 集成代码生成器 shiro权限
    java 微信自定义菜单 java微信接口开发 公众平台 SSM redis shiro 多数据源
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/6816797.html
Copyright © 2020-2023  润新知