Tải bản đầy đủ (.ppt) (93 trang)

Lập trình mạng 9 RMI Remote Method Invocation

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 (1.97 MB, 93 trang )

Chapter 9
RMI
Remote Method Invocation
GV: Nguyễn Thị Thanh Vân
1
Java Simplified / Session 22 / 2 of 45

Giới thiệu

Hoạt động của RMI

Hoạt động của lớp trung gian

Thiết kế và cài đặt một chương trình RMI

Thực thi hệ chương trình RMI, ex

Chuyển tham số trong RMI, ex

Tham trị

Tham chiếu

Tuần tự hóa đối tượng, ex

Factory Object, ex

RMI với firewall
Nội dung
2
Java Simplified / Session 22 / 3 of 45



Lập trình HĐT phân tán:

Môi trường hợp tác

Tận dụng nguồn tài nguyên phân tán trên mạng

Java: giải quyết vấn đề lập trình phân tán

Có .NET của Microsoft

Trong Java, sử dụng kỹ thuật RMI để cài đặt
các đối tượng phân tán.

KT xuyên suốt trong toàn bộ kiến trúc của Java
Giới thiệu
3
Java Simplified / Session 22 / 4 of 45

Local method Invocation: 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ộ
Muốn nạp nội dung hàm hay đối tượng ở 1 máy
nào đó gọi chúng từ một máy khác?

Remote Method Invocation (RMI) : 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.
Giới thiệu

4
Java Simplified / Session 22 / 5 of 45
Mô hình tri u g i các đ i tư ng t xaệ ọ ố ợ ừ
Computer C
C1
Computer A
A2
A1
Computer B
B3
B2
B2
5
Java Simplified / Session 22 / 6 of 45

Like RPC ,RMI has the following similarities

Remote calls can be made

Client/server contract based on interface

Unlike

RPC : hỗ trợ đa ngôn ngữ

RMI: chỉ hỗ trợ các ứng dụng được viết bằng Java
RMI và RPC (Remote Procedure Calling)
6
Java Simplified / Session 22 / 7 of 45
RMI – Client/Server

Client Server
Client (nơi gọi phương thức của các đối tượng ở xa)
Server (nơi đối tượng thật sự được cài đặt để thực thi mã
lệnh của phương thức).
7
Java Simplified / Session 22 / 8 of 45

Hỗ trợ gọi phương thức từ xa trên các đối
tượng trong các máy ảo (JVM) khác nhau

Tích hợp mô hình đối tượng phân tán vào ngôn
ngữ lập trình Java theo một cách tự nhiên, có tin
cậy trong khi vẫn duy trì các ngữ cảnh đối tượng
của ngôn ngữ lập trình Java

Làm cho mô hình đối tượng phân tán và mô hình
đối tượng cục bộ không có sự khác biệt.
Mục đích của RMI
8
Java Simplified / Session 22 / 9 of 45

Việc gọi phương thức của đối tượng từ xa
luôn phức tạp hơn gọi phương thức cục bộ:

Việc tham chiếu đến biến, địa chỉ của đối tượng
khác nhau ở các máy khác nhau

Các tham số truyền cho phương thức của đối
tượng ở xa phải được đóng gói và chuyển qua
mạng đến phương thức thực sự. (local-stack)


Lời gọi phương thức từ xa phải thông qua mạng
và có thể bị ngắt ngang do mạng gặp sự cố

Phụ thuộc vào kết nối mạng
Vấn đề phát sinh
9
Java Simplified / Session 22 / 10 of 45

Đối tượng trên hai máy khác nhau không gọi
trực tiếp mà thông qua lớp trung gian.

Lớp trung gian tồn tại ở cả hai phía Client và
Server.
◦ Lớp ở máy Client gọi là Stub,

Lớp ở máy Server gọi là Skel(Skeletion)

Lớp trung gian Stub sẽ biết cách thông báo
lỗi khi có các sự cố về mạng cho Client
Giải pháp
10
Java Simplified / Session 22 / 11 of 45
Lớp trung gian Stub và Skeletion
Computer C
C1
Computer A
A2
A1
Computer B

B1
C1_Stub
B1_Stub
B1_Skel
C1_Skel
11
Java Simplified / Session 22 / 12 of 45

Trình biên dịch Java (rmic.exe) sẽ tạo ra 2 lớp trung gian:
◦ Lớp Stub (lớp móc): chuyển về cho client

Lớp Skeleton (lớp nối): Phía Server

Stub và Skeletion sẽ giúp các đối tượng ở xa giao dịch
với nhau ?
◦ Đối tượng Server (trên máy Server) cần cung cấp một giao diện
tương ứng với các phương thức của nó (Server Object) cho
phép đối tượng Client gọi nó trên máy Client dễ dàng.

Đối tượng client sẽ luôn nghĩ rằng nó đang hoạt động trực tiếp
với đối tượng server trên máy cục bộ.
Lớp trung gian Stub và Skeletion
12
Java Simplified / Session 22 / 13 of 45

Ví dụ:
Phương thức A truyền cho phương thức B hai số a,b.
Phương thức B sẽ cộng hai số a,b cho ra kết quả c
và trả về phương thức A.
Quá trình diễn ra như sau:

Lớp trung gian Stub và Skeletion
a,b
c
13
Java Simplified / Session 22 / 14 of 45
Kiến trúc của RMI

The Stub and Skeleton layer, which intercepts method calls made
by the client to the interface reference variable and redirects these
calls to a remote RMI service.

The Remote Reference layer understands how to interpret and
manage references made from clients to the remote service objects.

The Transport layer, which is based on TCP/IP connections between
machines in a network. It provides basic connectivity, as well as some
firewall penetration strategies.
14
Java Simplified / Session 22 / 15 of 45
Kiến trúc của RMI
15
Java Simplified / Session 22 / 16 of 45
Quá trình hoạt động của RMI
Registry
RMI Server
Skeleton
Remote Machine (Server)
Stub
RMI Client
Local Machine (Client)




call



return
bind




lookup
16
Java Simplified / Session 22 / 17 of 45
B1: RMI-server đăng ký tên của đối tượng với bộ q.lý Registry.
B2: Bộ quản lý Registry trả về tham chiếu đến đối tượng ở xa
(RMI Server) thông qua lớp giao tiếp
B3-4: RMI-client liên lạc với bộ Registry để lấy về tham chiếu
đến đối tượng trên Server.
Các quá trình đăng ký và truy tìm tên đối tượng được Java
quản lý bằng các hàm giao tiếp API JNDI
B5-7: Client sẽ gọi các phương thức của đối tượng trên Server
Khi một phương thức được gọi, sẽ được chuyển tiếp đến
lớp trung gian Stub, rồi gọi đến lớp Skeleton (hđ Stub).
B8-10: Lớp Skeleton sẽ trực tiếp yêu cầu đối tượng thực thi
phương thức và trả kết quả cho Client (hđ Skeletion)
Quá trình hoạt động của RMI
17

Java Simplified / Session 22 / 18 of 45

là một chương trình dịch vụ chạy ở hậu
trường (rmiregistry.exe), thực hiện mở ổ cắm
socket và lắng nghe các yêu cầu gởi đến
cổng mặc định 1099, có thể chỉ định một
cổng khác với cổng 1099.

Ví dụ: C:\j2sdk1.4.0\bin\ rmiregistry.exe 9999

Đóng vai trò như là một DNS nhỏ cho các đối
tượng từ xa thực hiện tìm kiếm dịch vụ,
Trình (bộ quản lý)đăng ký Registry
Client
Server
Registry
18
Java Simplified / Session 22 / 19 of 45
Hoạt động của Stub, Skeleton

Client gọi một phương thức từ xa, lời gọi
này đượ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ố:


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

Gói phương pháp nhận dạng

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

trả kết quả về Stub phía client.
19
Java Simplified / Session 22 / 20 of 45

Giao tiếp Remote
Giao tiếp này không khai báo bất kỳ phương thức nào. Các phương thức
được khai báo trong phương thức này là các giao tiếp có thể được gọi từ xa.

Lớp Naming
Lớp java.rmi.Naming truyền tin trực tiếp với một trình đăng ký đang chạy trên
server để ánh xạ các URL rmi://hostname/Objectname thành các đối tượng
từ xa cụ thể trên host xác định:

Rmi là giao thức dùng để đăng kí.

Hostname và port là đ/c IP và số hiêu cổng của Server nơi bộ Registry đang chạy.


Objectname là tên tự đặt, các ct phía client sẽ dựa vào tên này để truy tìm tham chiếu
đến đối tượng cần dùng.
URL rmi vs. URL http.
Các lớp và các giao tiếp trong gói java.rmi
20
Java Simplified / Session 22 / 21 of 45

Lớp Naming cung cấp các phương thức sau:

public static String[] list(String url) throws
RemotException
trả về một mảng các xâu ký tự, mỗi xâu là một URL đã được gắn với
một tham chiếu. url là URL của trình đăng ký Naming.

public static Remote lookup(String url) throws
RemotException, NotBoundException,
AccessException, MalformedURLException
Client lookup để tìm kiếm một đối tượng từ xa gắn liền với tên đối
tượng.
NotBoundException: server ở xa không nhận ra tên của nó.
Naming class - methods
21
Java Simplified / Session 22 / 22 of 45

Public static void bind(String url, Remote object)
throws RemotException, AlreadyBoundException,
MalformedURLException, AccessException
để liên kết một tên với một đối tượng ở xa. Nếu thành công thì client có
thể tìm kiếm đối tượng stub từ trình đăng ký.


Có rất nhiều tình huống có thể xảy ra khi gán tên.
◦ MalformedURLException: url không đúng cú pháp.

RemoteException: không thể liên lạc được với trình đ.ký
◦ AccessException: client không được phép gán các đối tượng trong
trình đăng ký.

AlreadyBoundException: nếu đối tượng URL đã gắn với một đối
tượng cục bộ
Naming class - methods
22
Java Simplified / Session 22 / 23 of 45

public static void rebind(String url,
Remote obj)throws RemoteException,
AccessException, MalformedURLException

Phương thức này giống như phương thức bind()
ngoại trừ việc là nó gán URL cho đối tượng ngay cả
khi URL đã được gán.
Naming class - methods
23
Java Simplified / Session 22 / 24 of 45
RemoteObject class
UnicastRemote
Object
UnicastRemote
Server
RemoteServer
RemoteObject

Object
UnicastRemote
Server
Remote

RemoteObject class

Các đối tượng từ xa là thể hiện của các lớp con
của RemoteObject.

RemoteServer class

là lớp con của lớp RemoteObject;

là lớp cha của lớp UnicastRemoteObject.

UnicastRemoteObject class

là một lớp con cụ thể của lớp RemoteServer.

Để tạo ra một đối tượng ở xa:

ta phải thừa kế lớp UnicastRemoteServer

khai báo lớp này thực thi giao tiếp Remote

Phương thức exportObject(Object): làm cho máy
ảo Java nhận diện được đối tượng Object.
24
Java Simplified / Session 22 / 25 of 45


cho phép các client tìm kiếm các đối tượng ở xa trên một server theo tên.

Các phương thức

Bind() để gán một tên với một đối tượng từ xa cụ thể
◦ List() liệt kê tất cả các tên đã được đăng ký với trình đăng ký
◦ Lookup() tìm một đối tượng từ xa cụ thể với một URL cho trước gắn với nó
◦ Rebind() gán một tên với một đối tượng ở xa khác
◦ Unbind() loại bỏ một tên đã được gán cho một đối tượng ở xa trong trình đăng ký

Registry.REGISTRY_PORT là cổng mặc định để lắng nghe các các yêu cầu. Giá
trị mặc định là 1099.
Giao tiếp Registry
25

×