Egyszerű Java-RMI példa

Telepítsük a gradle-t innen: https://gradle.org/releases/ A bin könyvtárat adjuk hozzá a PATH-hoz.

A teljes forráskód elérhető itt:

git clone https://github.com/knehez/isi.git
cd java_rmi

Nyissunk két terminált, az egyikben:

gradle runRegisterService

A másikban:

gradle run

A program részletesen:

1.) Definiáljuk az RObject interfészeket, mindkettő implementálja a Remote interfészt

package org.ait;
import java.rmi.*;
 
public interface RObject extends Remote {
  // egyszerű paraméterátadás
  void primitiveArg(int num) throws RemoteException;
 
  // érték szerinti paraméterátadás
  void argumentByValue(Integer num) throws RemoteException;
}

2.) Implementáljuk a távoli objektumok kódját

package org.ait;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
 
public class RObjectImpl extends UnicastRemoteObject implements RObject {
      private static final long serialVersionUID = 6350331764929058681L;
      public RObjectImpl() throws RemoteException {
      } 
 
      @Override
      public void primitiveArg(int num) throws RemoteException {
         System.out.println(num);
      }
 
      @Override
      public void argumentByValue(Integer num) throws RemoteException {
         System.out.println(num);
      }
}

3.) Indítsuk el az RMI registry-t. Ez egy Java JDK komponens, elindítani a létrehozott projekt /bin könyvtárából kell.

> rmiregistry.exe   

4.) Hozzuk létre egy példányát a távoli objektumnak és kössük hozzá a registry-hez

package org.ait;
 
import java.rmi.Naming;
 
public class RegisterService {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			RObject robj = new RObjectImpl();
			Naming.rebind("rmi://localhost:1099/RObjectServer", robj);
			System.out.println("Registered...");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

Indítsuk el a RegisterService-t, ha fut a rmiregistry, csak akkor fog tudni regisztrálni.

5.) Használjuk a távoli objektumot

Indítsuk el az alábbi kódot.

package org.ait;
 
import java.rmi.Naming;
 
public class Client {
	public static void main(String[] args) {
		try {
			// Távoli objektum lekérése a registry-ből
			RObject robj = (RObject) Naming.lookup("rmi://localhost:1099/RObjectServer");
 
			// Egyszerű argumentum
			robj.primitiveArg(2012);
 
			// Serilaizált argumentum
			robj.argumentByValue(new Integer(2012));
 
		} catch (Exception e) {
			e.printStackTrace();
			;
		}
	}
}