public class MySerializableClassServer{ public static void main(String args[]){. try{[r]
(1)VẤN ĐỀ THAM TRỊ VÀ THAM BIẾN TRONG KỸ THUẬT LẬP TRÌNH
PHÂN TÁN ĐỐI TƯỢNG
Kế thừa từ lớp Remote: đối tượng được tham khảo theo tham biến (GET OBJECT BY
REFERENCE) Ví dụ:
RemoteClass: (interface & implement): đối tượng được gọi từ xa
MyRemoteClass.java import java.rmi.*;
public interface MyRemoteClass extends Remote{
public int getMyAttribute() throws RemoteException;
public void setMyAttribute(int value) throws RemoteException; }
MyRemoteClassImpl.java import java.rmi.*;
public class MyRemoteClassImpl implements MyRemoteClass{ private int myAttribute=0;
public int getMyAttribute() throws RemoteException {
return myAttribute; }
public void setMyAttribute(int value) throws RemoteException {
myAttribute=value; }
}
ServerClass : đăng ký đối tượng RemoteClass
MyRemoteClassServer.java import java.rmi.server.*;
import java.rmi.*;
public class MyRemoteClassServer{ public static void main(String args[]){
try{
MyRemoteClassImpl c=new MyRemoteClassImpl(); System.out.println("Exporting MyRemoteClass "); UnicastRemoteObject.exportObject(c);
Naming.bind("rmi://localhost/MyRemoteClass",c); System.out.println("Register MyRemoteClass!"); while (true){
System.out.println("Value of c " +c.getMyAttribute()); }
}catch(Exception e){
System.out.println(e); }
(2)ClientClass : sử dụng đối tượng RemoteClass
MyRemoteClassClient.java import java.rmi.*;
public class MyRemoteClassClient{ public static void main(String args[]){
try{
System.out.println("DEMO: GET OBJECT BY REFERENCE");
MyRemoteClass c=(MyRemoteClass)Naming.lookup("rmi://localhost/MyRemoteClass"); c.setMyAttribute(12);
System.out.println("Value of c: " +c.getMyAttribute());
MyRemoteClass c1=(MyRemoteClass)Naming.lookup("rmi://localhost/MyRemoteClass"); System.out.println("Value of c1: " + c1.getMyAttribute());
c1.setMyAttribute(16);
System.out.println("Value of c after c1 set to 16: " +c.getMyAttribute()); }catch(Exception e){
System.out.println(e); }
} }
Hiện thực từ lớp Serializable: đối tượng được tham khảo theo tham trị
RemoteClass: (interface & implement): đối tượng được gọi từ xa
MyRemoteClass.java import java.rmi.*;
public interface MyRemoteClass extends Remote{
public MySerializableClass myFunction(MySerializableClass c) throws RemoteException; }
MyRemoteClassImpl.java import java.rmi.*;
public class MyRemoteClassImpl implements MyRemoteClass{
public MySerializableClass myFunction(MySerializableClass c) throws RemoteException {
c.setMyAttribute(c.getMyAttribute()*2);//Change c return c;
} }
SerializableClass : đối tượng làm tham số gọi qua RemoteClass
MySerializableClass.java import java.io.*;
public class MySerializableClass implements Serializable{ private int myAttribute=0;
public int getMyAttribute() {
return myAttribute; }
public void setMyAttribute(int value) {
myAttribute=value; }
(3)ServerClass : đăng ký đối tượng RemoteClass
MySerializableClassServer.java import java.rmi.server.*;
import java.rmi.*;
public class MySerializableClassServer{ public static void main(String args[]){
try{
MyRemoteClassImpl c=new MyRemoteClassImpl(); System.out.println("Exporting MyRemoteClass "); UnicastRemoteObject.exportObject(c);
Naming.bind("rmi://localhost/MyRemoteClass",c); System.out.println("Register MyRemoteClass!"); }catch(Exception e){
System.out.println(e); }
} }
ClientClass : sử dụng đối tượng RemoteClass
MySerializableClassClient.java import java.rmi.*;
public class MySerializableClassClient{ public static void main(String args[]){
try{
System.out.println("DEMO: GET OBJECT BY VALUE");
MyRemoteClass c=(MyRemoteClass)Naming.lookup("rmi://localhost/MyRemoteClass"); //
MySerializableClass myData=new MySerializableClass(); myData.setMyAttribute(16);
System.out.println("Data before call Remote Function: " + myData.getMyAttribute()); //
MySerializableClass myNewData=c.myFunction(myData); //
System.out.println("Data after call Remote Function: " + myData.getMyAttribute());
System.out.println("Return Data from Remote Function: " + myNewData.getMyAttribute()); }catch(Exception e){
System.out.println(e); }