Tải bản đầy đủ (.pdf) (29 trang)

RMI (Remote Method Invocation) pps

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (801.11 KB, 29 trang )

RMI
(Remote Method Invocation)
G i ph ng th c t xaọ ươ ứ ừ
Nhóm 19
Lớp: 06TH1D
Sinh viên:
Phù Truyền Kiên 060044T
Giang Quốc Quyền 060094T
Phạm Duy Linh 060212T
RMI Các vấn đề

Khái niệm RMI

Những bước xây dựng và ứng dụng RMI

Chạy và biên dịch một chương trình RMI

Cấu hình Enterprise RMI

RMI Applet
RMI Gọi phương thức từ xa

Thông thường các chương trình của chúng ta được viết
dưới dạng thủ tục chay hàm. Mã lệnh của hàm (hay thủ
tục) được nạp thẳng vào bộ nhớ và thực thi ngay trên
máy cục bộ. Vậy thì có cách nào nạp nội dung của hàm
hay đối tượng ở một máy nào đó và gọi chúng từ một
máy khác hay không?

RMI (Remote Method Invoke –có nghĩa là gọi phương
thức từ xa) là cách thức giao tiếp giữa các đối tượng


Java có mã lệnh cài đặt nằm trên máy khác nhau có thể
gọi lẫn nhau.
RMI Gọi phương thức từ xa

Việc phân phối các đối tượng qua những máy khác nhau để
tận dụng phần cứng và phần mềm chuyên dụng

Người phát triển xây dựng mạng dịch vụ và cài đặt nó trên
những máy cụ thể

Người dùng yêu cầu một thực thể thuộc lớp sử dụng cú
pháp URL

Người dùng sử dụng đối tượng giống như nó là 1 đối tượng
cụ thể, cục bộ

Kết nối mạng tự động

Các bản Java cho phép bạn vận chuyển những cấu trúc dữ
liệu phức tạp thông qua mạng mà ko cần viết code để phân
tích và xây dựng lại chúng.
RMI Quá trình hoạt động

Ứng dụng RMI bao gồm hai chương trình riêng biệt, server (máy
chủ) và client (máy khách)

Chương trình máy chủ sẽ tạo ra đối tượng ở xa, những đối tượng
này được điều chỉnh có thể tham chiếu được và chờ cho đến khi
máy khách thiết lập các phương thức gọi lên các đối tượng này.


Chương trình máy khách sẽ nhận được tham chiếu của một hay
nhiều đối tượng sau đó tiến hành các phương thức gọi lên chúng.
RMI Quá trình hoạt động

Các tham số truyền cho các phương thức của đối tượng ở xa phải
được đóng gói và chuyển qua mạng để đến được với phương thức
thực sự (việc truyền kết quả trở về cũng vậy).

Để giải quyết các vấn đề trên, đối tượng Java trên hai máy khác
nhau không gọi nhau trực tiếp mà thông qua các lớp trung gian nằm
trên cả máy khách và máy chủ.

Phía máy khách, lớp trung gian này được gọi là Stub.

Phía máy chủ, lớp trung gian này được gọi là Skeleton.
RMI Quá trình hoạt động
• Đầu tiên RMI-server đăng ký tên của
nó với bộ Registry.
•RMI-client tìm tên của RMI-server trong
bộ Registry để thiết lập truy cập từ xa
với RMI-server.
•Stub đóng gói thamsố rồi gửi đến
Skeleton.
•Skeleton gọi phương thức từ xa rồi
đóng gói kết quả gửi về Stub.
RMI Quá trình hoạt động
STUB

Hoạt động stub
-Gói nhận dạng đối tượng từ xa

-Gói phương pháp nhận dạng
-Đóng gói các thông số
-Gởi gói đến Skeleton của server (máy chính)
RMI Quá trình hoạt động
SKELETON

Hoạt động Skeleton
-Mở gói tham số
-Gọi giá trị trả về hoặc các ngoại lệ
-Sắp xếp các phương pháp trả về
-Gửi gói trở lại cho stub của client (máy khách)
RMI Quá trình hoạt động
GIAO TIẾP STUB VÀ SKELETON
• Client gọi một phương thức từ xa, lời gọi này đầu
tiên được chuyển tiếp đến Stub.
• Stub có nhiệm vụ gửi tiếp lời yêu cầu này đến
Skeleton phía server bằng cách Stub mở một
socket đến server, đóng gói các tham số rồi truyền luồng dữ
liệu này đến Skeleton.
• Skeleton chứa đựng một phương thức nhận các
lời yêu cầu từ xa, mở gói tham số, gọi hàm thực sự trên
server để tính toán rồi trả kết quả về Stub phía client.
RMI Các bước xây dựng
1. Định nghĩa một giao tiếp từ xa (remote interface) trên
server.
2. Xây dựng một đối tượng từ xa (remote object) bằng cách
Hiện thực giao tiếp từ xa (remote interface).
3. Xây dựng chương trình phía Server.
4. Xây dựng chương trình phía Client.
5. Biên dịch các file Java nguồn (phía client vàserver).

6. Sinh ra các Stub phía client và Skeleton phía server.
7. Khởi động bộ đăng ký RMI (RMI registry)
8. Khởi động các đối tượng từ xa phía server
9. Chạychương trình phía client.
RMI Các bước xây dựng
1.ĐỊNH NGHĨA MỘT REMOTE INTERFACE
Để tạo một ứng dụng RMI, bước đầu tiên là định nghĩa
một Remote Interface giữa các đối tượng Client và Sever.
Các phương thức trong Remote Inteface muốn được
gọi từ xa đều phải có khả năng ném ra ngoại lệ Remote
Exception.
/* Calculator.java*/
package calculator;
import java.rmi.*;
public interface Calculator extends Remote
{
public int sum(int x,int y) throws RemoteException;
}
RMI Các bước xây dựng
2. HIỆN THỰC REMOTE INTERFACE
Lớp Calculator ở bước1 chỉ là một Remote Interface, nó chỉ
đặc tả các phương thức của đối tượng. Từ giao tiếp đó, đối
tượng thực sự phải được cài đặt như sau:
/* CalculatorImpl.java*/
import java.rmi.*;
public class CalculatorImpl implements Calculator
{
public int addNum(int x,int y) throws RemoteException
{
System.out.println(“Client request to calculate”);

return (x+y);
}
}
RMI Các bước xây dựng
3.XÂY DỰNG CHƯƠNG TRÌNH TRÊN MÁY SERVER
Bây giờ ta viết một chương trình để cài đặt đối tượng
Calculator trên máy server. Ta đặt tên chương trình này là
CalculatorServer:
/* CalculatorServer.java*/
import java.rmi.server.*;
Import java.rmi.*;
public class CalculatorServer{
public static void main(Stringargs[]) {
try{
//tạo đối tượng Calculator thực sự
CalculatorImpl c= new CalculatorImpl();
System.out.println(“ExportingCalculator…”);
RMI Các bước xây dựng
3.XÂY DỰNG CHƯƠNG TRÌNH TRÊN MÁY SERVER

//thông báo sự hiện diện của đối tượng cho máy ảo Java
UnicastRemoteObject.exportObject (c);
//đăng ký đối tượng với bộ quản lý rmi
Naming.bind(“rmi://localhost/Mycalculator”,c);
System.out.println(“RegisterCalculator!”);
} catch(Exceptione) { System.out.println(e); }
}
}
RMI Các bước xây dựng
4.XÂY DỰNG CHƯƠNG TRÌNH PHÍA CLIENT

Ở bước này ta thiết kế chương trình phía bên máy
khách(client) có khả năng gọi và sử dụng đối tượng
Calculator trên máy chủ (server), như sau:
/* CalculatorClient.java*/
import java.rmi.*;
public class CalculatorClient {
public static void main(String args[])
{
try{
RMI Các bước xây dựng
4.XÂY DỰNG CHƯƠNG TRÌNH PHÍA CLIENT
// tìm đối tượng cần truy xuất theo tên
System.out.println(“Findingobject…”);
Calculator c= (Calculator)Naming.lookup
(“rmi://localhost/MyCalculator”);
// gọi phương thức của đối tượng
System.out.println(c.addNum(12,1));
} catch(Exception e) { System.out.println(e); }
}
}
RMI Các bước xây dựng
5. BIÊN DỊCH CÁC FILE JAVA NGUỒN
Phía server ta đã có các file nguồn là Calculator.java,
CalculatorImpl.java, CalculatorServer.java. Tiến hành
biên dịch chúng như sau:
C:\RMI>javacCalculator.java
C:\RMI>javacCalculatorImpl.java
C:\RMI>javacCalculatorServer.java
PhíabênClient ta đã có file nguồn là CalculatorClient.java.
Tiến hành biên dịch như sau:

C:\RMI>javacCalculatorClient.java
RMI Các bước xây dựng
6. SINH LỚP TRUNG GIAN STUB & SKETLETON
Dựa vào lớp cài đặt CalculatorImpl.class, trình biên dịch
rmic.exe của Java sẽ cung cấp cho ta hai lớp trung gian
Stub và Skeleton. Mở cửa sổ DOS-promp(cmd) rồi đánh
lệnh biên dịch sau:
C:\RMI>rmicCalculatorImpl
Kết quả ta sẽ thu được hai tập tin
CalculatorImpl_Stub.class
và CalculatorImpl_Skel.class
RMI Các bước xây dựng
7. CHẠY CHƯƠNG TRÌNH rmiregistry.exe
Mở cửa sổ DOS-prompt (cmd) chạy chương trình
rmiregistry từ dòng lệnh như sau:
C:\RMI>rmiregistry.exe
Chương trình này chạy ở dạng service. Nó có
nhiệm vụ đón nhận các kết nối chứa thông tin về đối
tượng do phương thức Naming.bind() gửi đến.
Mặc định rmiregistry.exe lắng nghe các kết nối gửi
đến cổng 1099.
RMI Các bước xây dựng
8. KHỞI ĐỘNG CÁC ĐỐI TƯỢNG PHÍA SERVER
Bây giờ ta mở một cửa sổ DOS-prompt khác chạy chương
trình CalculatorServer như sau:
C:\RMI>java CalculatorServer
Exporting Calculator…
Register Calculator!
Cũng như rmiregistry.exe, saukhiCalculatorServer được gọi, hàm
Naming.bind() sẽ đi vào vòng lặp vô tận để chờ nhận yêu cầu từ

client đến.
RMI Các bước xây dựng
9. CHẠY CHƯƠNG TRÌNH PHÍA CLIENT
Bây giờ ta mở thêm một cửa sổ DOS-prompt thứ ba để chạy
chương trình CalculatorClient như sau:
C:\RMI>java CalculatorClient
Finding Object…
13
(kết quả trả về tổng của 12+1 chính là lời gọi đến phương thức
addNum() của đối tượng CalculatorImpl.
RMI Tích hợp tham số
•Trong Java, đối tượng được truyền theo tham chiếu còn các kiểu
dữ liệu đơn giản như int, char,… được truyền theo tham trị.
• Đối với việc truyền tham số qua mạng theo cơ chế RMI thì có hai
nguyên tắc sau:
-Tất cả các kiểu dữ liệu đơn giản như int, char,… đều được
truyền theo thamtrị.
-Tất cả các dữ liệu kiểu đối tượng muốn truyền qua mạng đều
buộc phải cài đặt một trong hai tiếp là Remote hoặc Serializable.
Các đối tượng cài giao tiếp Remote sẽ được truyền theo tham chiếu
còn các đối tượng cài đặt giao tiếp Serializable sẽ được truyền theo
tham trị.
RMI Cấu hình Enterprise

Những file stub cần được đặt trên một HTTP server cho việc download

Trong Java 2, giao thức RMI 1.2 không yêu cầu skeleton

Client phải cài đặt 1 RMISecurityManager để tải những lớp RMI từ xa


System.setSecurityManager (new RMISecurityManager());

Client cần có một policy file để kết nối và đăng ký và HTTP server

×