logo

  • Hỏi Đáp
  • Kiến Thức
  • Sức Khỏe
  • Tử Vi
  • Công Nghệ
No Result
View All Result
logo
No Result
View All Result
Trang chủ Hỏi Đáp rmi là gì

RMI LÀ GÌ

by Admin _ January 01, 2023

Giới thiệu

RMI là một sự cài đặt cơ chế RPC vào ngôn ngữ lập trình hướng đối tượng Java. Hệ thống RMI được cho phép một đối tượng chạy trên một sản phẩm ảo Java này còn có thể kích hoạt một phương thức của một đối tượng đang chạy bên trên một thiết bị ảo Java khác. Đối tượng gồm phương thức được gọi từ xa gọi là những đối tượng ở xa (Remote Object).

Bạn đang xem: Rmi là gì

Một ứng dụng RMI thường bao gồm 2 phần phân biệt: Môt chương trình Server với một chương trình Client. 

Chương trình server tạo một số các Remote Object, tạo những tham chiếu (reference) đến bọn chúng và chờ những chương trình Client kích hoạt những phương thức của những Remote Object này.  Chương trình Client lấy một tham chiếu đến một hoặc nhiều Remote Object trên Server và kích hoạt những phương thức từ xa trải qua các tham chiếu.

Một chương trình Client bao gồm thể kích hoạt những phương thức ở xa trên một hay nhiều Server. Tức là sự thực thi của chương trình được trải rộng bên trên nhiều thiết bị tính. Đây đó là đặc điểm của những ứng dụng phân tán. Nói bí quyết khác, RMI là cơ chế để xây dựng các ứng dụng phân tán dưới ngôn ngữ Java.


Kiến trúc của chương trình Client-Server theo cơ chế RMI

Kiến trúc một chương trình Client-Server theo cơ chế RMI được tế bào tả như hình dưới đây:

*
Kiến trúc chương trình kiểu RMI

Trong đó:

server là chương trình cung cấp những đối tượng gồm thể được gọi từ xa. Client là chương trình tất cả tham chiếu đến những phương thức của những đối tượng ở xa trên Server. Stub chứa những tham chiếu đến những phương thức ở xa trên Server. Skeleton đón nhận những tham chiếu từ Stub để kích hoạt phương thức tương ứng trên Server.  Remote Reference Layer là hệ thống truyền thông của RMI.

Con đường kích hoạt một phương thức ở xa được mô tả như hình dưới đây:

*
Cơ chế hoạt động của RMI

Các cơ chế liên quan trong một ứng dụng đối tượng phân tán

Trong một ứng dụng phân tán cần có các cơ chế sau:

Cơ chế định vị đối tượng ở xa (Locate remote objects): Cơ chế này xác định bí quyết thức cơ mà chương trình Client bao gồm thể lấy được tham chiếu (Stub) đến các đối tượng ở xa. Thông thường người ta sử dụng một Dịch vụ danh bạ (Naming Service) lưu giữ những tham khảo đến các đối tượng được cho phép gọi từ xa nhưng Client sau đó tất cả thể tìm kiếm. Cơ chế giao tiếp với những đối tượng ở xa (Communicate with remote objects): chi tiết của cơ chế giao tiếp với những đối tượng ở xa được thiết lập đặt bởi hệ thống RMI. Tải các lớp dạng bytecodes cho những lớp nhưng nó được chuyển tải qua lại giữa máy ảo (Load class bytecodes for objects that are passed around): vì RMI có thể chấp nhận được các chương trình gọi phương thức từ xa trao đổi  những đối tượng  với  những phương thức ở xa dưới dạng các tham số hay giá bán trị trả về của phương thức, đề xuất RMI cần bao gồm cơ chế cần thiết để tải mã Bytecodes của các đối tượng từ thiết bị ảo này sang sản phẩm công nghệ ảo khác.

Hình dưới đây tế bào tả một ứng dụng phân tán dưới RMI sử dụng dịch vụ danh bạ để lấy các tham khảo của các đối tượng ở xa. Trong đó:

hệ thống đăng ký kết tên cho đối tượng tất cả thể được gọi từ xa của bản thân với Dịch vụ danh bạ (Registry Server). Client tra cứu đối tượng ở xa trải qua tên đã được đăng ký trên Registry hệ thống (looks up) cùng tiếp đó gọi các phương thức ở xa. Hình minh họa cũng cho thấy biện pháp thức mà lại hệ thống RMI sử dụng một WebServer sẵn gồm để truyền tải mã bytecodes của các lớp qua lại giữa Client với Server.
*
sứ mệnh của dịch vụ thương hiệu

Cơ chế vận hành của của một ứng dụng Client-Server theo kiểu RMI 

*
Cơ chế vận hành của của một ứng dụng Client-Server theo kiểu RMITiến trình vận hành của một ứng dụng Client-Server theo kiểu RMI diễn ra như sau:

Bước 1: hệ thống tạo ra những đối tượng được cho phép gọi từ xa cùng với những Stub với Skeleton của chúng. Bước 2: server sử dụng lớp Naming để đăng cam kết tên đến một đối tượng từ xa (1).  Bước 3: Naming đăng ký kết Stub của đối tượng từ xa với Registry vps (2). Bước 4: Registry vps sẵn sàng cung cấp tham thảo đến đối tượng từ xa khi bao gồm yêu cầu (3). Client yêu thương cầu Naming định vị đối tượng xa qua thương hiệu đã được đăng cam kết (phương thức lookup) với dịch vụ thương hiệu (4). Naming tải Stub của đối tượng xa từ dịch vụ tên cơ mà đối tượng xa đã đăng cam kết về Client (5). sở hữu đặt đối tượng Stub với trả về tham khảo đối tượng xa mang lại Client (6). Client thực thi một lời gọi phương thức xa thông qua đối tượng Stub (7). 
*
Client thực thi một lời gọi phương thức xa

Các lớp hỗ trợ chương trình theo kiểu Client-Server vào Java

Java hỗ trợ những lớp cần thiết để download đặt các ứng dụng Client-Server theo kiểu RMI trong những gói: java.rmi. Trong số đó những lớp thường được dùng là:

java.rmi.Naming java.rmi.RMISecurityManager java.rmi.RemoteException; java.rmi.server.RemoteObject java.rmi.server.RemoteServer java.rmi. Server.UnicastRemoteObject
Xây dựng một ứng dụng phân tán với RMI

Xây dụng một ứng dụng phân tán bằng cơ chế RMI gồm những bước sau: 

Thiết kế và cài đặt đặt các thành phần của ứng dụng. Biên dịch các chương trình nguồn với tạo ra Stub cùng Skeleton. Tạo các lớp bao gồm thể truy xuất từ mạng cần thiết. Khởi tạo ứng dụng

Thiết kế và thiết lập đặt những thành phần của ứng dụng.

Xem thêm: Các Loại Ung Thư Mau - Bạn Có Thể Mắc Ung Thư Máu Nếu Có Triệu Chứng Này

Đầu tiên bạn phải xác định lớp như thế nào là lớp cục bộ, lớp nào là lớp được gọi từ xa. Nó bao gồm những bước sau:

Định nghĩa những giao diện cho các phương thức ở xa (remote interfaces): Một remote interface mô tả những phương thức nhưng mà nó có thể được kích hoạt từ xa bởi các Client. Đi cùng với việc định nghĩa Remote Interface là việc xác định các lớp cục bộ làm cho tham số hay giá trị trả về của những phương thức được gọi từ xa. Cài đặt các đối tượng từ xa (remote objects): những Remote Object phải cài đặt mang lại một hoặc nhiều Remote Interfaces đã được định nghĩa. Các lớp của  Remote Object class download đặt cho những phương thức được gọi từ xa đã được khai báo vào Remote Interface và bao gồm thể định nghĩa và mua đặt đến cả các phương thức được sử dụng cục bộ. Nếu có những lớp làm cho đối số hay giá bán trị trả về cho những phương thức được gọi từ xa thì ta cũng định nghĩa và cài đặt chúng. Cài đặt những chương trình Client: các chương trình Client gồm sử dụng những Remote Object có thể được mua đặt ở bất kỳ thời điểm nào sau thời điểm các Remote Interface đã được định nghĩa.

Biên dịch các tập tin nguồn với tạo Stubs với Skeleton

Giai đoạn này gồm 2 bước: Bước thứ nhất là sử dụng chương trình biên dịch javac để biên dịch những tập tin nguồn như những remote interface, những lớp thiết lập đặt cho những remote interface, lớp server, lớp client và các lớp liên quan khác. Kế tiếp ta cần sử dụng trình biện dịch rmic để tạo ra stub với skeleton cho các đối tượng từ xa từ các lớp download đặt cho những remote interface.


Tạo những lớp tất cả thể truy nã xuất từ mạng

Tạo một tập tin chứa tất cả các file có liên quan như những remote interface stub, các lớp hỗ trợ mà chúng cần thiết phải tải về Client  và làm cho tập tin này có thể truy tìm cập đến thông qua một website server.


Thực thi ứng dụng

Thực thi ứng dụng bao gồm việc thực thi rmiregistry server, thực thi server, cùng thực thi client.


Tóm lại các công việc phải làm là:

Tạo giao diện (interface) khai báo các phương thức được gọi từ xa của đối tượng. Tạo lớp mua đặt (implement) mang đến giao diện đã được khai báo. Viết chương trình Server. Viết chương trình Client. Dịch những tập tin nguồn theo dạng RMI để tạo ra các lớp tương ứng với stub đến client, skeleton cho server. Khởi động dịch vụ registry. Thực hiện chương trình Server. Thực thi chương trình Client.

Ví dụ minh họa

Trong ví dụ này họ định nghĩa một phương thức String sayHello() được gọi từ xa. Mỗi khi phương thức này được kích hoạt nó sẽ trả về chuỗi "Hello World" cho Client gọi nó.

Dưới đây là những bước để xây dựng ứng dụng:


Bước 01: Tạo giao diện (interface) khai báo các phương thức được gọi từ xa của đối tượng. 

Cú pháp tổng quát:

import java.rmi.Remote;import java.rmi.RemoteException;public interface InterfaceName extends Remote     ReturnType remoteMethodOne() throws RemoteException;    ReturnType remoteMethodTwo() throws RemoteException;     . . .

Định nghĩa remote interface có tên là HelloItf, gồm phương thức được gọi từ xa là String sayHello() như sau:

import java.rmi.Remote;import java.rmi.RemoteException;public interface HelloItf extends Remote     String sayHello() throws RemoteException;  

Lưu chương trình này vào tập tin HelloItf.java


Bước 02: Tạo lớp download đặt (implement) cho giao diện đã được khai báo:

Cú pháp tổng quát:

import java.rmi. Server.UnicastRemoteObject;import java.rmi.RemoteException;public class RemoteClass extends UnicastRemoteObject implements       InterfaceName     public RemoteClass() throws RemoteException          super();         ....... // Implement of Method        public ReturnType remoteMethodOne() throws RemoteException          ....... // Implement of Method        public ReturnType remoteMethodTwo() throws RemoteException          ....... // Definition of Method   

Định nghĩa lớp tải đặt mang tên là Hello thiết lập đặt mang đến remote interface HelloItf

import java.rmi. Server.UnicastRemoteObject;import java.rmi.RemoteException;public class Hello extends UnicastRemoteObject implements HelloItf      public Hello() throws RemoteException          super();        public String sayHello()          return "Hello World !";     

Lưu chương trình này vào tập tin Hello.java


Bước 03: Viết chương trình Server:

Cú pháp tổng quát:

import java.rmi.Naming; import java.rmi.RemoteException; import java.rmi.RMISecurityManager; public class ServerName      public static void main(String args<>)         if (System.getSecurityManager() == null) // thiết lập đặt cơ chế bảo mật            System.setSecurityManager(new RMISecurityManager());                  try               // Tạo những đối tượng từ xa            RemoteClass remoteObject = new RemoteClass();             // Đăng ký tên cho những đối tượng từ xa            Naming.rebind(“RegistryName", remoteObject);             ...                catch (Exception e)             System.out.println(”Error: . . .” + e);                

Tạo server có tên HelloServer chứa một đối tượng từ xa  obj thuộc lớp mua đặt Hello. Đăng ký kết tên đến đối tượng obj là HelloObject

import java.rmi.Naming; import java.rmi.RemoteException; import java.rmi.RMISecurityManager; public class HelloServer      public static void main(String args<>)         if (System.getSecurityManager() == null)             System.setSecurityManager(new RMISecurityManager());                  try              Hello obj = new Hello();                 Naming.rebind("HelloObject", obj);                 System.out.println("HelloObject is registried");                 catch (Exception e)             System.out.println("Error: " + e);               

Lưu chương trình này vào tập tin HelloServer.java


Bước 04: Viết chương trình Client:

Cú pháp tổng quát:

import java.rmi.Naming;import java.rmi.RemoteException;public class Client      public static void main(String args<>)         String remoteObjectURL = "rmi://NameServer/RegistryName”;         Interfacename object = null;        try             object = (InterfaceName)Naming.lookup(remoteObjectURL);             object.remoteMethodOne();        ...                 catch (Exception e)              System.out.println(" Error: ”+ e);               

Tạo client mang tên là HelloClient, kiếm tìm đối tượng HelloObject trên rmiregistry chẳng hạn tại địa chỉ 172.18.211.160. Gọi phương thức sayHello() và in kết quả trả về ra màn hình.

import java.rmi.Naming;import java.rmi.RemoteException;public class HelloClient      public static void main(String args<>)         String helloURL = "rmi://172.18.211.160/HelloObject";        HelloItf object = null;        try             object = (HelloItf)Naming.lookup( helloURL);             String message = object.sayHello();             System.out.println(message);                 catch (Exception e)             System.out.println("Client Error :" + e);               

Lưu chương trình vào tập tin HelloClient.java


Bước 05: Dịch các tập tin nguồn theo dạng RMI để tạo ra những lớp tương ứng cùng stub mang đến client, skeleton mang lại server: 

Cú pháp tổng quát:

javac InterfaceName.java RemoteClass.java Server.java Client.java( Tạo ra những lớp InterfaceName.class RemoteClass.class Server.class Client.class)

rmic RemoteClass( Tạo ra những lớp cho Skeleton với Stub: RemoteClass_Skel.class RemoteClass_Stub.class)

Biên dịch các lớp vào Hello:

javac Hello.java HelloItf.java HelloServer.java HelloClient.java

rmic Hello.class

Biên dịch những lớp vào Hello

*
Biên dịch những lớp trong Hello


Bước 06: Khởi động dịch vụ rmiregistry

Cú pháp tổng quát:

start rmiregistry

Cổng mặc định là 1099.

Khới động dịch vụ rmiregistry bên trên cổng mặc định như sau:
*

Khới động dịch vụ rmiregistry trên cổng mặc

Khi đó rmiregistry hệ thống sẽ chạy bên trên một cửa sổ mới, giữ nguyên cửa sổ này, ko đóng nó lại.

*
rmiregistry vps chạy trên một cửa sổ mới

Bước 07: Thực hiện chương trình Server

Cú pháp tổng quát:

java -Djava.security.policy =UrlOfPolicyFile   ServerName

Trong đó UrlOfPolicyFile là địa chỉ theo dạng URL của tập tin tế bào tả chế độ về bảo mật mã nguồn của server (policy file). Nó qui định "ai" (chương trình, thiết bị tính, quy trình trên) sẽ có quyền download những tập tin của nó vào đó tất cả stub. Để đơn giản trong phần này ta có thể chấp nhận được tất cả mọi người đều gồm quyền download các tập tin của Server. Khi triển khai những ứng dụng thật sự ta phải bao gồm các cơ chế bảo mật nghiêm ngặt hơn (Tham khảo tài liệu về Security của Java). Tệp tin policy có dạng như sau:

grant // Allow everything for nowpermission java.security.AllPermission;;

Lưu nội dung bên trên vào tập tin mang tên policy.java


Bước 08: Thực thi chương trình Client:

Cú pháp tổng quát mắng

java ClientName

Thực thi HelloClient với địa chỉ của rmiregistry đưa vào vào tham số

*
Thực thi chương trình HelloClientĐể thực thi được chương trình HelloClient cần tất cả hai class nằm thuộc thư mục với nó là HelloItf.class cùng Hello_Stub.class.

Share Tweet Linkedin Pinterest
Previous Post

Rmr là gì

Next Post

Rl là gì

CÙNG CHUYÊN MỤC

df là gì trong kpop

Df là gì trong kpop

25/04/2021
national id của việt nam là gì

National id của việt nam là gì

29/04/2021
flexin là gì

Flexin là gì

25/04/2021
dvfb là gì trên facebook

Dvfb là gì trên facebook

25/04/2021
ioe là gì

Ioe là gì

26/01/2023
unique là gì sql

Unique là gì sql

24/01/2023
db là gì

Db là gì

23/01/2023
cre là gì

Cre là gì

23/01/2023

Newsletter

The most important automotive news and events of the day

We won't spam you. Pinky swear.

Chuyên Mục

  • Hỏi Đáp
  • Kiến Thức
  • Sức Khỏe
  • Tử Vi
  • Công Nghệ

News Post

  • Phần mềm tor

About

Chúng tôi tạo ra trang web nhằm mục đích mang lại kiến thức bổ ích cho cộng đồng, các bài viết được sưu tầm từ nhiều nguồn trên internet giúp mang lại kiến thức khách quan dành cho bạn

©2023 darkedeneurope.com - Website WordPress vì mục đích cộng đồng

Liên Hệ - Giới Thiệu - Nội Quy - Bảo Mật

No Result
View All Result
  • Trang chủ
  • Chuyên mục
    • Hỏi Đáp
    • Kiến Thức
    • Sức Khỏe
    • Tử Vi
    • Công Nghệ
  • Lưu trữ
  • Liên hệ

© 2023 darkedeneurope.com - Website WordPress vì mục đích cộng đồng.