RMI 제작 및 사용법

|

Remote로 사용할 Data Object

import java.io.*;

public class TestDataObj implements Serializable
{
    private int Tag;
    private int Stat;

    public void setTag(int iTag) { this.TagNo = iTag; }
    public void setStat(int iStat)   { this.Stat = iStat; }

    public int getTag()   { return this.Tag; }
    public int getStat()    { return this.Stat; }
}

넘길 Object를 직렬화 해줘야 하기 때문에 implements Serializable 해줘야 한다.

Interface 선언

import java.rmi.*;

public interface IReadData extends Remote
{
    public TestDataObj GetTestDataObj() throws RemoteException;
}

rmi에서 사용할  Data Object

import java.rmi.server.*;
import java.rmi.*;
import java.io.*;

public class ReadDataImpl extends UnicastRemoteObject implements IReadData
{
    public ReadDataImpl() throws RemoteException
    {
        super();
    }
    public TestDataObj GetTestDataObj()
    {
        TestDataObj Data = new TestDataObj();
        Data.setTag(1);
        Data.setStat(5);
        return rtlData;
    }
}

rmi Server

import java.rmi.*;
import java.net.*;

public class RmiShmServer
{
    public static void main(String[] args)
    {
        try
        {
            ReadDataImpl remoteObj = new ReadDataImpl ();
            Naming.rebind("rmi://localhost:1099/TestRemote", remoteObj);
            System.out.println("Test Remote Obj Bound to the registry");
        }
        catch (RemoteException e)
        {
            System.err.println("incoming method call" + e);
        }
        catch (MalformedURLException e)
        {
            System.err.println("Checking URL " + e);
        }
    }
}

rmi 주소를 넣어 줄시 rmi://localhost:[port]/[Remote Object] 형식으로 만들어 준다

나중에 rmiregistry 등록시 port를 기입 해준다.

rmi Client

import java.rmi.*;
import java.net.*;

public class RmiShmClinet
{
    public static void main(String[] args)
    {
        try
        {
            Object obj = Naming.lookup("rmi://localhost:1099/TestRemote");
            IReadData remoteObj = (IReadData)obj;
            TestDataObj Data = remoteObj.GetTestDataObj();
            System.out.println(Data.getTag() + ":" + Data.getStat());
        }
        catch (RemoteException e)
        {
            System.out.println("Somthig has gone wrong during reote method call.." + e);
        }
        catch (NotBoundException e)
        {
            System.out.println("Could't Bound.. ");
        }
        catch (java.net.MalformedURLException e)
        {
            System.out.println("Check url String..");
        }
    }
}

Server에서 선언한 주소를 사용하여 Remote Object를 바라본다.


unix 명령어

1차 console

prompt>javac *.java

prompt>rmic ReadDataImpl

prompt>rmiregistry 1099 &

(Background로 rmiregistry 실행)

prompt>java RmiShmServer


2차 console

prompt>java RmiShmClinet

Data 확인


Compile이 잘 되지 않을 경우 profile의 classpath를 잡아 준다.

CLASSPATH=경로:.

export CLASSPATH

대략 이런식이 되겠지?!




And