Phần mềm rmi là gì, java rmi và Ứng dụng phân tán Đơn giản

RMI (Remote Method Invocation) có tác dụng một API cung cấp kỹ thuật tạo vận dụng phân tán trong Java. RMI cho phép một đối tượng người sử dụng gọi những phương thức trên một đối tượng người dùng khác đang chạy trên một lắp thêm ảo Java khác (JVM)

RMI chung cấp giao tiếp từ xa giữa những ứng dụng thực hiện hai đối tượng người tiêu dùng stub và skeleton.

Bạn đang xem: Phần mềm rmi là gì, java rmi và Ứng dụng phân tán Đơn giản

Stub: stub là một trong những đối tượng, chuyển động như một cổng sống phía thứ khách. Toàn bộ các yêu mong gửi đi phần đa được chuyển hẳn sang nó. Nó ngụ tại phía Client và đại diện cho đối tượng người dùng remote. Khi người gọi gọi cách tiến hành trên đối tượng người tiêu dùng stub, nó sẽ tiến hành các quá trình sau:

Khởi tạo liên kết với sản phẩm công nghệ ảo từ xa (JVM)Ghi cùng truyền các tham số tới thiết bị ảo trường đoản cú xa (JVM)Đợi tác dụng trả vềĐọc quý hiếm trả về hoặc những ngoại lệ (exception)Cuối cùng, trả về giá trị cho người gọi.

Skeleton: là một đối tượng, vận động như một cổng cho đối tượng người dùng phía sản phẩm chủ. Tất cả các yêu cầu đến được chuyển hẳn sang nó. Khi skeleton nhận được yêu cầu tới, nó sẽ triển khai các các bước sau:

Đọc những tham số cho cách thức remoteGoi thủ tục trên đối tượng người tiêu dùng remote thực tếViết với truyền kết quả tới tín đồ gọi.

Để viết một vận dụng với Java RMI, bạn phải theo công việc sau:

Định nghĩa một lớp đồ họa (Remote Interface)Triển khai lớp thực thi của lớp đồ họa (remote object)Viết code mang đến chương trình chạy sinh sống ServerViết code mang lại chương trình chạy ngơi nghỉ ClientBiên dịch ứng dụngChạy ứng dụng


Nội dung

Các bước chạy một vận dụng Java RMI bằng dòng lệnh1. Tạo những lớp (Class) và những lớp giao diện (Interface) cho bài xích toán3. Chạy ứng dụng

Cách giải pháp xử lý và giao tiếp ra mắt trong RMI

*

Các cách chạy một ứng dụng Java RMI bởi dòng lệnh

Yêu cầu: Viết một lịch trình tính giai thừa bởi lập trình phân tán với Java RMI

1. Tạo các lớp (Class) và những lớp bối cảnh (Interface) cho bài toán

Bước 1: chế tạo một Interface kết quá từ lớp java.rmi.Remote

Remote Interface khái niệm đối tượng có thể được gọi từ xa vì chưng Client. Interface này có thể được liên kết với chương trình của Client. Interface này nên được thừa kế tự java.rmi.Remote.

//Code: obatambeienwasirherbal.comimport java.math.BigInteger;//Tạo một tấm Interfacepublic interface Factorialextends java.rmi.Remote //Khai báo một cách làm tính giai thừapublic BigInteger fact(int num)throws java.rmi.RemoteException;Bước 2: tạo một Class quá kế từ java.rmi.server.UnicastRemoteObject và tiến hành lớp Interface ở bước 1Lớp này sẽ xúc tiến Interface bước trước. Triển khai các tính toán quan trọng cho câu hỏi tính gia thừa.

//Code: obatambeienwasirherbal.comimport java.math.BigInteger;//Class này vượt kế và triển khai Interface ở bước 1public class FactorialImplextends java.rmi.server.UnicastRemoteObjectimplements Factorial {// Khai báo Constructorpublic FactorialImpl()throws java.rmi.RemoteExceptionsuper();// đo lường và tính toán thuật toán giai thừa// triển khai phương thức fact()// nhằm tính giai vượt của một sốpublic BigInteger fact(int num)throws java.rmi.RemoteException{BigInteger factorial = BigInteger.ONE;for (int i = 1; i cách 3: chế tạo một Class chạy sinh sống phía server (với add localhost cùng tên Service)Để cung cấp Service, lịch trình Server được tạo bằng phương pháp sử dụng cách thức java.rmi.Naming.rebind () hoàn toàn có thể được hotline với nhì đối số: đối tượng người sử dụng tham chiếu (tên dịch vụ) cùng tham chiếu đến đối tượng thực thi.

Xem thêm: Sửa Lỗi Ngữ Pháp Và Chính Tả Tiếng Anh Bằng 12 Website Tự Động Tốt Nhất

//Code: obatambeienwasirherbal.comimport java.rmi.Naming;public class FactorialServer //Triển khai constructor của classpublic FactorialServer()try //Tạo một object tham chiếu cho tới InterfaceFactorial c = new FactorialImpl();//Gắn showroom localhost cùng với Service nàyNaming.rebind("rmi://localhost/FactorialService", c);catch (Exception e) //Nếu có lỗi xảy raSystem.err.println("Lỗi khởi tạo ra Server, chi tiết lỗi: " + e);public static void main(String<> args)//Tạo một Objectnew FactorialServer();Bước 4: tạo nên một Class chạy làm việc phía Client (với showroom localhost cùng tên Service)Chương trình Client sẽ gọi phương thức java.rmi.Naming.lookup() với URL RMI với trả về một instance của kiểu đối tượng người dùng (Interface Factorial). Tất cả RMI được tiến hành trên đối tượng người tiêu dùng này

//Code: obatambeienwasirherbal.comimport java.net.MalformedURLException;import java.rmi.Naming;import java.rmi.NotBoundException;import java.rmi.RemoteException;public class FactorialClient public static void main(String<> args)try //Tạp một Remote Object với thuộc tên//Truyền tác dụng tra cứu cho giao diệnFactorial c = (Factorial)Naming.lookup("rmi://localhost/FactorialService");//Gọi cách làm và in kết quảSystem.out.println(c.fact(30));//Nếu bao gồm lỗi xảy racatch (MalformedURLException murle) System.out.println(" MalformedURLException: "+ murle);catch (RemoteException re) System.out.println(" RemoteException: "+ re);catch (NotBoundException nbe) System.out.println(" NotBoundException: "+ nbe);catch (java.lang.ArithmeticException ae) System.out.println(" ArithmeticException: " + ae);

2. Biên dịch toàn cục chương trình

Sử dụng javac để biên dịch tất cả bốn lịch trình và rmic (RMI Compiler) để tạo các lớp Stub cùng Skeleton.
*

3. Chạy ứng dụng

Sau tiến trình biên dịch, khối hệ thống đã sẵn sàng chuẩn bị để chạy. Để chạy hệ thống, hãy mở ba screen Console (di gửi đến băng thông nơi chứa chương trình). Một đến Client, một mang đến Server cùng một cho Registry RMI.

Bước 1: ban đầu với registry, sử dụng rmiregistry

*
Nếu không tồn tại lỗi registry sẽ ban đầu chạy và hiện giờ chuyển sang màn hình hiển thị thứ hai.

Bước 2: Chạy công tác Server với để nhảy Service

Nó đã khởi đụng và đợi liên kết Client và nó đã tải quy trình thực thi vào cỗ nhớ.

*

Bước 3: Chạy lịch trình Client

*

Với biện pháp này, RMI hoàn toàn có thể được chạy trên ba screen Console mang đến localhost. RMI thực hiện Ngăn xếp Network và phòng xếp TCP/IP để tiếp xúc ba lịch trình JVM khác nhau.

Bài tập

Viết công tác tính tổng áp dụng kỹ thuật lập trình với RMI Java. Client gửi mang lại Server một số trong những nguyên k nhập vào từ keyboard đến Server. Hệ thống tính tổng từ là 1 tới k số tự nhiên và giữ hộ lại kết quả tính toán mang đến Client.Viết công tác tính số nón của quý hiếm x với y thực hiện kỹ thuật lập trình sẵn với RMI. Client gửi cho server quý giá x, y để tính x mũ y triển khai tính tại phía Server.Triển khai hai đối tượng người tiêu dùng ObjetString cùng ObjetCalcul: một đối tượng người sử dụng thực hiện nay các hoạt động trên chuỗi ký tự, một đối tượng thực hiện những phép tính số. Để đơn giản dễ dàng hóa, đối tượng ObjetString hỗ trợ một cách làm NbOccurrences(s,w) để đo lường và thống kê số lần lộ diện của một ký tự w trong chuỗi ký kết tự s và đối tượng người tiêu dùng ObjetCalcul cung cấp một phương thức cộng Add (a, b) của nhì số a cùng b, xem giải mã hai phương thức ở bên dưới. áp dụng RMI để thực hiện hai đối tượng người tiêu dùng với những phương thức tương ứng.

public int địa chỉ (int a, int b) return a+b;public int NbOccurrences(String s, String w) { int len = s.length(); int count=0;//Biến đếm khởi tạo ban sơ = 0 for (int i=0; i