Lập trình đối tượng phân tán là một vấn đề nóng bỏng của công nghệ phân tán phần mềm ngày này. Java là ngôn ngữ đi tiên phong với RMI(Remote Method Invocation), một kỹ thuật cài đặt các đối tượng phân tán vô cùng hiệu vô cùng hiệu quả và linh động
Thông thường các chương trình của chúng ta được viết dưới dạng thủ tục hàm và việc các hàm gọi lẫn nhau và truyền tham số chỉ xảy ra ở máy cục bộ. Kỹ thuật RMI - mang ý nghĩa là triệu gọi phương thức từ xa là cách thức giao tiếp giữa các đối tượng trong Java có mã lệnh cài đặt nằm ở trên các máy khác nhau có thể triệu gọi lẫn nhau.
Để giải quyết một số vấn đề trong việc truyền thông giữa client <-> Server. RMI không gọi trực tiếp mà thông qua lớp trung gian. Lớp này tồn tại ở cả 2 phía client và server.
-> Lớp Client gọi là Stub
-> Lớp ở máy Server gọi là Skel(Skeleton)
IAccount.java
package com.rmi;
import java.rmi.Remote;
import java.rmi.RemoteException;
import com.bean.User;
/**
* @author framgiavn
*/
public interface IAccount extends Remote {
/**
* @return
* @throws RemoteException
*/
public User getUser() throws RemoteException;
}
Tạo một lớp thực thi Implement cho Interface
AccountServiceImpl.java
package com.sept.server.impl;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import com.bean.User;
import com.rmi.IAccount;
/**
*
* @author framgiavn
*
*/
public class AccountServiceImpl extends UnicastRemoteObject implements IAccount {
private static final long serialVersionUID = 1L;
public AccountServiceImpl() throws RemoteException {
}
public User getUser() {
User u = new User();
u.setId(23);
u.setUname("framgia");
u.setPasswd("222");
return u;
}
}
Cài đặt cho đối tượng trên Server: RMIServer.java
package com.sept.server.impl;
import java.net.MalformedURLException;
import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import com.rmi.IAccount;
/**
* @author framgiavn
*/
public class RMIServer {
public static void main(String args[]) {
try {
IAccount rAccount = new AccountServiceImpl();
LocateRegistry.createRegistry(6789);
// Đăng ký đối tượng này với rmiregistry
Naming.bind("rmi://192.168.1.230:6789/SeptemberRMI", rAccount);
System.out.println(">>>>>INFO: RMI Server started!!!!!!!!");
} catch (RemoteException e) {
e.printStackTrace();
} catch (AlreadyBoundException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
3 Cài đặt đối tượng trên client: RMIClient.java
package com.sept.client.impl;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import com.rmi.IAccount;
/**
*
* @author framgiavn
*
*/
public class RMIClient {
public static void main(String args[]) {
try {
//Xác định RMI máy chủ.
IAccount iAccount = (IAccount) Naming.lookup("rmi://192.168.1.230:6789/SeptemberRMI");
System.out.println("Name: " + iAccount.getUser().getUname());
} catch (NotBoundException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
Khởi động server:
Thực thi client, gọi hàm từ server RMI
Trên là giới thiệu cơ bản về Java RMI hy vọng các bạn hứng thú với việc lập trình ứng dụng phân tán
Unpublished comment
Viết câu trả lời