Chào các anh chị trên diễn đàn,
em xây dựng một chương trình đơn giản về RMI như sau:
file Ball.java
Code:
import java.rmi.*;
import java.io.*;
public class Ball implements Serializable, Remote {
private int weight;
public Ball(int w){
this.weight=w;
}
public int getWeight(){
return weight;
}
public void setWeight(int w){
this.weight=w;
}
}
file ServerSide.java
Code:
import java.rmi.*;
public interface ServerSide extends Remote {
public void ping(Ball b) throws RemoteException;
}
file ServerSideImpl.java
Code:
import java.rmi.*;
public class ServerSideImpl implements ServerSide {
public void ping(Ball b) throws RemoteException {
b.setWeight(b.getWeight()+15);
}
}
file Setup.java
Code:
import java.rmi.*;
import java.rmi.server.*;
public class Setup{
public static void main(String args[]) throws Exception {
ServerSide server=new ServerSideImpl();
UnicastRemoteObject.exportObject(server);
Naming.rebind("rmi://localhost/server",server);
System.out.println("Waiting for client...");
}
}
file Client.java
Code:
import java.rmi.*;
import java.rmi.server.*;
public class Client{
public static void main(String args[]) throws Exception {
Ball ball=new Ball(20);
UnicastRemoteObject.exportObject(ball);
ServerSide server=(ServerSide)Naming.lookup("rmi://localhost/server");
System.out.println("------before-----");
System.out.println(ball.getWeight());
System.out.println("------before-----");
server.ping(ball);
System.out.println("------after------");
System.out.println(ball.getWeight());
System.out.println("------after------");
//System.out.println("------new------");
//System.out.println(newBall.getWeight());
//System.out.println("------new------");
}
}
em biên dịch toàn bộ các file java và rmic tất cả các file có Remote.
Theo em hiểu về tham chiếu trong RMI là những đối tượng nào implements Remote thì có khả năng tham chiếu từ xa.
Nhưng khi em chạy java Client thì bị quăng ra một mớ Exception.
Không biết có phải em hiểu sai về RMI không nữa nhờ các anh chị giải thích giúp.