===== 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();
;
}
}
}