RMI 시작 인스턴스

RMI는 JavaEE의 핵심 구성 요소이며 분산 개발의 기초입니다.다음은 RMI의 응용 프로세스를 보여 주는 예입니다.
  • 업무 인터페이스 구축

  • RMI 서비스를 제공하는 인터페이스 클래스는 자바를 계승해야 합니다.rmi.원격 인터페이스와 모든 업무 방법은 RemoteException을 던져야 합니다.
    PerfectTime.java
    package com.adams.rmi;
    
    import java.rmi.Remote;
    import java.rmi.RemoteException;
    
    public interface PerfectTime extends Remote {
    	public String getPerfectTime(int i) throws RemoteException;
    }
    
  • 업무 인터페이스를 실현한다

  • PerfectTime 인터페이스를 실현하는 클래스는 UnicastRemoteObject 클래스java를 계승해야 합니다.rmi.server.UnicastRemoteObject.
    PerfectTimeImpl.java
    package com.adams.rmi;
    
    import java.rmi.RemoteException;
    import java.rmi.server.UnicastRemoteObject;
    
    public class PerfectTimeImpl extends UnicastRemoteObject implements PerfectTime {
    
    	private static final long serialVersionUID = -4970146374243011725L;
    
    	protected PerfectTimeImpl() throws RemoteException {
    		// super();
    	}
    
    	@Override
    	public String getPerfectTime(int i) throws RemoteException {
    		return "hello,Adams!This is RMI Example.===" + i;
    	}
    
    }
    
  • 서비스 단말기를 만들고 업무 실례를 등록하며 서비스를 시작합니다

  • RemoteServer.java
    package com.adams.rmi;
    
    import java.net.MalformedURLException;
    import java.rmi.AlreadyBoundException;
    import java.rmi.Naming;
    import java.rmi.RemoteException;
    import java.rmi.registry.LocateRegistry;
    
    public class RemoteServer {
    	private String ip = "localhost";
    	private int port = 8019;
    	public void init() {
    		try {
    			LocateRegistry.createRegistry(port);
    			PerfectTime pt = new PerfectTimeImpl();
    			Naming.bind("//" + ip + ":" + port + "/PerfectTime", pt);
    		} catch(RemoteException e) {
    			e.printStackTrace();
    		} catch(MalformedURLException e) {
    			e.printStackTrace();
    		} catch(AlreadyBoundException e) {
    			e.printStackTrace();
    		}
    	}
    	
    	public String getIp() {
    		return ip;
    	}
    
    	public static void main(String[] args) {
    		RemoteServer rs = new RemoteServer();
    		/*// ip , rmi ip
    		System.setProperty("java.rmi.server.hostname", rs.getIp());  */
    		System.out.println("RMI ...");
    		rs.init();
    		System.out.println("RMI .");
    	}
    
    }
    
  • 클라이언트를 구축하고 클라이언트를 통해 RMI 인터페이스를 호출합니다

  • RemoteClient.java
    package com.adams.rmi;
    
    import java.net.MalformedURLException;
    import java.rmi.Naming;
    import java.rmi.NotBoundException;
    import java.rmi.RemoteException;
    
    public class RemoteClient {
    	private String ip = "localhost";
    	private int port = 8019;
    	private PerfectTime perfectTime;
    	
    	public RemoteClient() {
    		try {
    			perfectTime = (PerfectTime)Naming.lookup("rmi://" + ip + ":" + port + "/PerfectTime");
    		} catch(MalformedURLException e) {
    			e.printStackTrace();
    		} catch(RemoteException e) {
    			e.printStackTrace();
    		} catch(NotBoundException e) {
    			e.printStackTrace();
    		}
    	}
    	
    	public String getTime(int i) {
    		String ret = "";
    		try {
    			ret = perfectTime.getPerfectTime(i);
    		} catch(RemoteException e) {
    			e.printStackTrace();
    		}
    		return ret;
    	}
    
    	public static void main(String[] args) {
    		RemoteClient rc = new RemoteClient();
    		System.out.println(rc.getTime(198));
    	}
    
    }
    

    실행 결과:
    hello,Adams!This is RMI Example.===198

    좋은 웹페이지 즐겨찾기