Ứng dụng Java RMI
Để viết một ứng dụng Java RMI, bạn sẽ phải làm theo các bước dưới đây:
- Xác định giao diện từ xa
- Phát triển lớp thực thi (đối tượng từ xa)
- Phát triển chương trình máy chủ
- Phát triển chương trình khách hàng
- Biên dịch ứng dụng
- Thực thi ứng dụng
Xác định giao diện từ xa
Giao diện từ xa cung cấp mô tả về tất cả các phương thức của một đối tượng từ xa cụ thể. Máy khách giao tiếp với giao diện từ xa này.
Để tạo giao diện từ xa -
Tạo giao diện mở rộng giao diện xác định trước Remote thuộc về gói.
Khai báo tất cả các phương thức nghiệp vụ có thể được gọi bởi khách hàng trong giao diện này.
Vì có khả năng xảy ra sự cố mạng trong các cuộc gọi từ xa, một ngoại lệ có tên RemoteExceptioncó thể xảy ra; vứt nó.
Sau đây là một ví dụ về giao diện từ xa. Ở đây chúng tôi đã xác định một giao diện với tênHello và nó có một phương thức được gọi là printMsg().
import java.rmi.Remote;
import java.rmi.RemoteException;
// Creating Remote interface for our application
public interface Hello extends Remote {
void printMsg() throws RemoteException;
}
Phát triển lớp triển khai (Đối tượng từ xa)
Chúng ta cần triển khai giao diện từ xa đã tạo ở bước trước. (Chúng ta có thể viết một lớp triển khai riêng biệt hoặc chúng ta có thể trực tiếp làm cho chương trình máy chủ triển khai giao diện này.)
Để phát triển một lớp triển khai -
- Thực hiện giao diện đã tạo ở bước trước.
- Cung cấp triển khai cho tất cả các phương thức trừu tượng của giao diện từ xa.
Sau đây là một lớp thực hiện. Ở đây, chúng tôi đã tạo một lớp có tênImplExample và triển khai giao diện Hello đã tạo ở bước trước và được cung cấp body đối với phương pháp này sẽ in một thông báo.
// Implementing the remote interface
public class ImplExample implements Hello {
// Implementing the interface method
public void printMsg() {
System.out.println("This is an example RMI program");
}
}
Phát triển chương trình máy chủ
Một chương trình máy chủ RMI nên triển khai giao diện từ xa hoặc mở rộng lớp thực thi. Ở đây, chúng ta nên tạo một đối tượng từ xa và liên kết nó vớiRMIregistry.
Để phát triển một chương trình máy chủ -
Tạo một lớp khách hàng từ nơi bạn muốn gọi đối tượng từ xa.
Create a remote object bằng cách khởi tạo lớp triển khai như hình dưới đây.
Xuất đối tượng từ xa bằng phương pháp exportObject() của lớp có tên UnicastRemoteObject cái nào thuộc về gói java.rmi.server.
Nhận sổ đăng ký RMI bằng cách sử dụng getRegistry() phương pháp của LocateRegistry lớp thuộc về gói java.rmi.registry.
Ràng buộc đối tượng từ xa được tạo vào sổ đăng ký bằng cách sử dụng bind() phương thức của lớp có tên Registry. Đối với phương thức này, hãy chuyển một chuỗi đại diện cho tên liên kết và đối tượng được xuất dưới dạng tham số.
Sau đây là một ví dụ về chương trình máy chủ RMI.
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class Server extends ImplExample {
public Server() {}
public static void main(String args[]) {
try {
// Instantiating the implementation class
ImplExample obj = new ImplExample();
// Exporting the object of implementation class
// (here we are exporting the remote object to the stub)
Hello stub = (Hello) UnicastRemoteObject.exportObject(obj, 0);
// Binding the remote object (stub) in the registry
Registry registry = LocateRegistry.getRegistry();
registry.bind("Hello", stub);
System.err.println("Server ready");
} catch (Exception e) {
System.err.println("Server exception: " + e.toString());
e.printStackTrace();
}
}
}
Phát triển Chương trình Khách hàng
Viết một chương trình khách trong đó, tìm nạp đối tượng từ xa và gọi phương thức cần thiết bằng đối tượng này.
Để phát triển một chương trình khách hàng -
Tạo một lớp khách hàng từ nơi bạn định gọi đối tượng từ xa.
Nhận sổ đăng ký RMI bằng cách sử dụng getRegistry() phương pháp của LocateRegistry lớp thuộc về gói java.rmi.registry.
Tìm nạp đối tượng từ sổ đăng ký bằng phương pháp lookup() của lớp Registry cái nào thuộc về gói java.rmi.registry.
Đối với phương thức này, bạn cần chuyển một giá trị chuỗi đại diện cho tên liên kết dưới dạng tham số. Điều này sẽ trả lại cho bạn đối tượng từ xa.
Lookup () trả về một đối tượng kiểu từ xa, truyền xuống kiểu Hello.
Cuối cùng gọi phương thức được yêu cầu bằng cách sử dụng đối tượng từ xa thu được.
Sau đây là một ví dụ về chương trình khách hàng RMI.
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class Client {
private Client() {}
public static void main(String[] args) {
try {
// Getting the registry
Registry registry = LocateRegistry.getRegistry(null);
// Looking up the registry for the remote object
Hello stub = (Hello) registry.lookup("Hello");
// Calling the remote method using the obtained object
stub.printMsg();
// System.out.println("Remote method invoked");
} catch (Exception e) {
System.err.println("Client exception: " + e.toString());
e.printStackTrace();
}
}
}
Biên dịch ứng dụng
Để biên dịch ứng dụng -
- Biên dịch giao diện Từ xa.
- Biên dịch lớp thực hiện.
- Biên dịch chương trình máy chủ.
- Biên dịch chương trình khách hàng.
Hoặc là,
Mở thư mục mà bạn đã lưu trữ tất cả các chương trình và biên dịch tất cả các tệp Java như hình dưới đây.
Javac *.java
Thực thi ứng dụng
Step 1 - Bắt đầu rmi đăng ký bằng cách sử dụng lệnh sau.
start rmiregistry
Điều này sẽ bắt đầu một rmi đăng ký trên một cửa sổ riêng biệt như hình dưới đây.
Step 2 - Chạy tệp lớp máy chủ như hình dưới đây.
Java Server
Step 3 - Chạy tệp lớp khách hàng như hình dưới đây.
java Client
Verification - Ngay khi bạn khởi động máy khách, bạn sẽ thấy kết quả sau trong máy chủ.