Remote Method Invocation (RMI) là một cơ chế trong Java cho phép gọi phương thức từ xa (trên một JVM khác) giống như cách gọi phương thức cục bộ. RMI giúp các đối tượng ở các JVM khác nhau giao tiếp với nhau, qua mạng hoặc trên cùng một máy tính. Để xây dựng và triển khai một ứng dụng RMI, cần thực hiện một số bước cụ thể.
Dưới đây là các bước cơ bản để một chương trình RMI hoạt động:
import java.rmi.Remote; import java.rmi.RemoteException; public interface MyRemoteInterface extends Remote { // Phương thức từ xa phải ném RemoteException public String sayHello() throws RemoteException; }
import java.rmi.server.UnicastRemoteObject; import java.rmi.RemoteException; public class MyRemoteImpl extends UnicastRemoteObject implements MyRemoteInterface { // Constructor bắt buộc phải ném RemoteException protected MyRemoteImpl() throws RemoteException { super(); } // Cài đặt phương thức từ xa @Override public String sayHello() throws RemoteException { return "Hello from RMI Server!"; } }
rmiregistry
hoặc thông qua mã Java bằng cách sử dụng LocateRegistry.createRegistry().import java.rmi.registry.LocateRegistry; public class RMIServer { public static void main(String[] args) { try { // Tạo RMI registry trên cổng mặc định 1099 LocateRegistry.createRegistry(1099); System.out.println("RMI Registry is running on port 1099..."); } catch (Exception e) { e.printStackTrace(); } } }
import java.rmi.Naming; public class RMIServer { public static void main(String[] args) { try { // Tạo RMI registry LocateRegistry.createRegistry(1099); System.out.println("RMI Registry is running on port 1099..."); // Tạo đối tượng từ xa MyRemoteInterface remoteObject = new MyRemoteImpl(); // Đăng ký đối tượng với RMI registry Naming.rebind("rmi://localhost:1099/RemoteHello", remoteObject); System.out.println("Remote object is bound to the registry..."); } catch (Exception e) { e.printStackTrace(); } } }
import java.rmi.Naming; public class RMIClient { public static void main(String[] args) { try { // Tìm đối tượng từ xa thông qua RMI registry MyRemoteInterface remoteObject = (MyRemoteInterface) Naming.lookup("rmi://localhost:1099/RemoteHello"); // Gọi phương thức từ xa String response = remoteObject.sayHello(); System.out.println("Response from server: " + response); } catch (Exception e) { e.printStackTrace(); } } }
RMIServer.java
để khởi tạo RMI registry và đăng ký đối tượng từ xa.RMIClient.java
để gọi phương thức từ xa từ server.rmic
để biên dịch stub (nếu cần)rmic
để tạo stub và skeleton cho các đối tượng từ xa. Tuy nhiên, từ Java 5 trở đi, Java đã tự động xử lý quá trình tạo stub. Bạn không cần thực hiện bước này nữa trừ khi sử dụng phiên bản Java cũ.RemoteException
, vì nó xử lý các vấn đề liên quan đến mạng.Serializable
.Để tạo một chương trình RMI hoạt động, cần thực hiện các bước chính như thiết kế interface từ xa, triển khai interface, đăng ký đối tượng với RMI registry, và tạo client để gọi các phương thức từ xa. Quá trình này cho phép các JVM khác nhau có thể giao tiếp và trao đổi dữ liệu, đồng thời thực hiện các thao tác từ xa thông qua mạng.