loading...

Lập trình RMI trong java

02:03:42 - 04/08/2018 - admin

RMI là viết tắt của Remote Method Invocation. Lập trình RMI trong java là một cơ chế cho phép một đối tượng cư trú trong một hệ thống (JVM) để truy cập/ gọi một đối tượng đang chạy trên một JVM khác. RMI được sử dụng để xây dựng các ứng dụng phân tán, nó cung cấp giao tiếp từ xa giữa các chương trình Java. Nó được cung cấp trong gói java.rmi.

Gọi phương thức từ xa (RMI) cho phép một đối tượng java https://www.devpro.edu.vn/lap-trinh-huong-doi-tuong-java-la-gi gọi phương thức trên một đối tượng đang chạy trên một máy khác. RMI cung cấp giao tiếp từ xa giữa chương trình java. RMI được sử dụng để xây dựng ứng dụng phân tán.

Khái niệm về ứng dụng RMI

Một ứng dụng RMI có thể được chia thành hai phần, chương trình Client và chương trình Server. Một chương trình máy chủ tạo ra một số đối tượng từ xa, làm tài liệu tham khảo của họ có sẵn cho khách hàng để gọi phương thức trên nó. Một chương trình Client yêu cầu các đối tượng từ xa trên máy chủ và gọi phương thức trên chúng. Stub và Skeleton là hai đối tượng quan trọng được sử dụng để giao tiếp với đối tượng từ xa.

Stub và Skeleton

Stub đóng vai trò là cửa ngõ cho chương trình khách hàng. Nó nằm ở phía Client và giao tiếp với đối tượng Skeleton . Nó thiết lập kết nối giữa đối tượng từ xa và truyền yêu cầu đến nó.

Đối tượng Skeleton nằm trên chương trình máy chủ. Nó có trách nhiệm chuyển yêu cầu từ Stub đến đối tượng ở xa.

Tạo một ứng dụng RMI đơn giản có các bước sau:

Có 6 bước để viết chương trình RMI.

  • Tạo giao diện từ xa
  • Cung cấp việc triển khai giao diện từ xa
  • Biên dịch lớp thực hiện và tạo các đối tượng stub và skeleton bằng cách sử dụng công cụ rmic
  • Bắt đầu dịch vụ đăng ký bằng công cụ rmiregistry
  • Tạo và khởi động ứng dụng từ xa
  • Tạo và khởi động ứng dụng máy khách

Ví dụ RMI

Trong ví dụ này, chúng tôi đã làm theo tất cả 6 bước để tạo và chạy ứng dụng rmi. Ứng dụng khách chỉ cần hai tệp, giao diện từ xa và ứng dụng khách. Trong ứng dụng rmi, cả máy khách lẫn máy chủ đều tương tác với giao diện từ xa. Ứng dụng khách gọi các phương thức trên đối tượng proxy, RMI gửi yêu cầu tới JVM từ xa. Giá trị trả về được gửi trở lại đối tượng proxy và sau đó đến ứng dụng khách.

Bước 1: Tạo giao diện từ xa

Để tạo giao diện từ xa, mở rộng giao diện Remote và khai báo RemoteException với tất cả các phương thức của giao diện từ xa. Ở đây. Chỉ có một phương thức có tên là add () và nó khai báo RemoteException.

import java.rmi.*;  

public interface Adder extends Remote{  

public int add(int x,int y)throws RemoteException;  

}  

Bước 2: Cung cấp việc thực hiện giao diện từ xa

Bây giờ cung cấp việc thực hiện giao diện từ xa. Để cung cấp việc triển khai giao diện từ xa, chúng tôi cần mở rộng lớp UnicastRemoteObject, hoặc sử dụng phương thức exportObject () của lớp UnicastRemoteObject

Trong trường hợp, bạn mở rộng lớp UnicastRemoteObject, bạn phải định nghĩa một hàm tạo khai báo RemoteException.

import java.rmi.*;  

import java.rmi.server.*;  

public class AdderRemote extends UnicastRemoteObject implements Adder{  

AdderRemote()throws RemoteException{  

super();  

}  

public int add(int x,int y){return x+y;}  

}  

Bước 3: Tạo các đối tượng stub và skeleton sử dụng công cụ rmic.

Bước tiếp theo là tạo các đối tượng stub và skeleton sử dụng trình biên dịch rmi. Công cụ rmic gọi trình biên dịch RMI và tạo các đối tượng stub và skeleton.

rmic AdderRemote  

Bước 4: Bắt đầu dịch vụ đăng ký bằng công cụ rmiregistry

Bây giờ bắt đầu dịch vụ đăng ký bằng cách sử dụng công cụ rmiregistry. Nếu bạn không chỉ định số cổng, nó sẽ sử dụng số cổng mặc định. Trong ví dụ này, chúng tôi đang sử dụng số cổng 5000.

rmiregistry  5000

Bước 5: Tạo và chạy ứng dụng máy chủ

Bây giờ các dịch vụ rmi cần được lưu trữ trong một tiến trình máy chủ. Lớp Đặt tên cung cấp các phương thức để nhận và lưu trữ đối tượng từ xa. Lớp Đặt tên cung cấp 5 phương thức.

public static java.rmi.Remote lookup (java.lang.String) ném java.rmi.NotBoundException, java.net.MalformedURLException, java.rmi.RemoteException; Nó trả về tham chiếu của đối tượng ở xa.
public static void bind (java.lang.String, java.rmi.Remote) ném java.rmi.AlreadyBoundException, java.net.MalformedURLException, java.rmi.RemoteException; Nó liên kết đối tượng từ xa với tên đã cho.
public static void unbind (java.lang.String) ném java.rmi.RemoteException, java.rmi.NotBoundException, java.net.MalformedURLException; Nó phá hủy đối tượng từ xa bị ràng buộc với tên đã cho.
public static void rebind (java.lang.String, java.rmi.Remote) ném java.rmi.RemoteException, java.net.MalformedURLException; Nó liên kết đối tượng từ xa với tên mới.
public static java.lang.String [] list (java.lang.String) ném java.rmi.RemoteException, java.net.MalformedURLException; Nó trả về một mảng các tên của các đối tượng từ xa bị ràng buộc trong sổ đăng ký.

Trong ví dụ này, chúng ta ràng buộc đối tượng từ xa bằng tên sonoo.

import java.rmi.*;  

import java.rmi.registry.*;  

public class MyServer{  

public static void main(String args[]){  

try{  

Adder stub=new AdderRemote();  

Naming.rebind(“rmi://localhost:5000/sonoo”,stub);  

}catch(Exception e){System.out.println(e);}  

}  

}  

Bước 6: Tạo và chạy ứng dụng máy khách

Tại máy khách, chúng ta đang nhận đối tượng stub bằng phương thức lookup () của lớp Naming và gọi phương thức trên đối tượng này. Trong ví dụ này, chúng tôi đang chạy các ứng dụng máy chủ và ứng dụng khách, trong cùng một máy vì vậy chúng tôi đang sử dụng localhost. Nếu bạn muốn truy cập đối tượng từ xa từ một máy khác, hãy thay đổi localhost thành tên máy chủ (hoặc địa chỉ IP), nơi có đối tượng ở xa.

import java.rmi.*;  

public class MyClient{  

public static void main(String args[]){  

try{  

Adder stub=(Adder)Naming.lookup(“rmi://localhost:5000/sonoo”);  

System.out.println(stub.add(34,4));  

}catch(Exception e){}  

}  

}  

Đầu ra của ví dụ RMI này:

Lập trình RMI trong java https://www.devpro.edu.vn/tai-lieu-tu-hoc-lap-trinh-java là một cơ chế hữu ích để gọi các phương thức của các đối tượng từ xa. Java RMI cho phép một máy ảo Java gọi các phương thức của một máy ảo khác, và để chia sẻ bất kỳ loại đối tượng Java nào, ngay cả khi máy khách hoặc máy chủ chưa bao giờ gặp loại đối tượng đó trước đây.

Bài viết liên quan: Lập trình java form trong NetBeans IDE

Ý kiến bạn đọc

Bình luận qua Disqus Facebook