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