package com.my.study.rmi;
import java.io.Serializable;
/*
* Entity must implements Serializable interface
*/
public class Person implements Serializable {
private static final long serialVersionUID = 1L;
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package com.my.study.rmi;
import java.rmi.Remote;
import java.rmi.RemoteException;
/*
* 1, Interface must extend Remote,
* 2, All functions must throw RemoteException
*/
public interface IPersonService extends Remote {
Person findPersonById(int id) throws RemoteException;
}
package com.my.study.rmi;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
/*
* Implementation must extends UnicastRemoteObject
*/
public class PersonServiceImpl extends UnicastRemoteObject implements
IPersonService {
private static final long serialVersionUID = 1L;
public PersonServiceImpl() throws RemoteException {
}
public Person findPersonById(int id) throws RemoteException {
Person p = new Person();
p.setId(id);
p.setName("XiaoMing");
return p;
}
}
package com.my.study.rmi;
import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;
public class Server {
public static void main(String[] args) {
try {
IPersonService personService = new PersonServiceImpl();
// Listen 8888 port
LocateRegistry.createRegistry(8888);
// Rebind a object to a path, path format: rmi://127.0.0.1:<PORT>/<serviceName>
Naming.rebind("rmi://127.0.0.1:8888/personService", personService);
System.out.println("Service startup successfully.");
} catch (Exception e) {
e.printStackTrace();
}
}
}
package com.my.study.rmi;
import java.rmi.Naming;
public class Client {
public static void main(String[] args) {
try {
// Use Naming.lookup() to get binded object.
IPersonService person = (IPersonService) Naming
.lookup("rmi://localhost:8888/personService");
System.out.println("Name: " + person.findPersonById(2).getName());
} catch (Exception e) {
e.printStackTrace();
}
}
}