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

code 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 (184.81 KB, 49 trang )

Java Simplified / Session 22 / 1 of 45


Invocati
on: lời
cầu
khẩn
Java Simplified / Session 22 / 2 of 45
09/14/15
Thực chất RMI là một cơ chế gọi phương thức từ xa đã được thực hiện và tích hợp trong ngôn ngữ Java. Vì Java là một ngôn
ngữ lập trình hướng đối tượng, nên phương pháp lập trình trong RMI là phương pháp hướng đối tượng do đó các thao tác
hay các lời gọi phương thức đều liên quan đến đối tượng. Ngoài ra, RMI còn cho phép một Client có thể gửi tới một đối tượng
đến cho Server xử lý, và đối tượng này cũng có thể được xem là tham số cho lời gọi hàm từ xa, đối tượng này cũng có những
dữ liệu bên trong và các hành vi như một đối tượng thực sự.
Java Simplified / Session 22 / 3 of 45
09/14/15
Thực chất RMI là một cơ chế gọi phương thức từ xa đã được thực hiện và tích hợp trong ngôn ngữ Java. Vì Java là một ngôn
ngữ lập trình hướng đối tượng, nên phương pháp lập trình trong RMI là phương pháp hướng đối tượng do đó các thao tác
hay các lời gọi phương thức đều liên quan đến đối tượng. Ngoài ra, RMI còn cho phép một Client có thể gửi tới một đối tượng
đến cho Server xử lý, và đối tượng này cũng có thể được xem là tham số cho lời gọi hàm từ xa, đối tượng này cũng có những
dữ liệu bên trong và các hành vi như một đối tượng thực sự.
Java Simplified / Session 22 / 4 of 45
The concept of performing computation over the network has been around before java
•A popular way to distribute work over the network through RPC
•The implementation of RPC over the network was mostly procedural because of the restrictions on the Languages that
implemented it.
•And hence the implementation of RPC happened to be procedura
Java Simplified / Session 22 / 5 of 45
Đối tượng Remote: một đối tượng được tạo ra để cho phép những đối tượng khác trên một máy JVM khác gọi tới nó.
Phương thức Remote: Đối tượng Remote chứa một số các phương thức, những phương thức này có thể được gọi từ xa bởi
các đối tượng trong JVM khác .


Java Simplified / Session 22 / 6 of 45
Cơ chế truyền và quản lý biến dữ liệu giữa các tiến trình trên các máy khác nhau (mashalling)
Java Simplified / Session 22 / 7 of 45
Trình biên dịch rmic.exe sẽ tạo ra hai lớp trung gian C1_Skel và C1_Stub. Lớp C1_Stub sẽ được đem về máy A.
Khi A1 trên máy A gọi C1 nó sẽ chuyển lời gọi đến lớp C1_Stub, C1_Stub chịu trách nhiệm đóng gói tham số, chuyển vào
không gian địa chỉ tương thích với đối tượng C1 sau đó gọi phương thức tương ứng.
 Nếu có phương thức của đối tượng C1 trả về sẽ được lớp C1_Skel đóng gói trả ngược về cho C1_Stub chuyển giao kết
quả cuối cùng lại cho A1. Nếu khi kết nối mạng gặp sự cố thì lớp trung gian Stub sẽ thông báo lỗi đến đối tượng A1. Theo cơ
chế này A1 luôn nghĩ rằng nó đang hoạt động trực tiếp với đối tượng C1 trên máy cục bộ.
Java Simplified / Session 22 / 8 of 45
09/14/15
(rmic.exe)
Java Simplified / Session 22 / 9 of 45
(rmic.exe)
Java Simplified / Session 22 / 10 of 45
Stub là đối tượng ủy quyền của đối tượng thực sự nằm trên hệ thống từ xa
Java Simplified / Session 22 / 11 of 45
09/14/15
Tầng giao vận gửi các lời gọi trên Internet. Phía server, tầng giao vận lắng nghe các liên kết đến. Trên cơ sở nhận lời gọi
phương thức, tầng giao vận chuyển lời gọi cho tầng tham chiếu trên server. Tầng tham chiếu chuyển đổi các tham chiếu được
gửi bởi client thành các tham chiếu cho các máy ảo cục bộ. Sau đó nó chuyển yêu cầu cho skeleton. Skeleton đọc tham số và
truyền dữ liệu cho chương trình server, chương trình server sẽ thực hiện lời gọi phương thức thực sự. Nếu lời gọi phương
thức trả về giá trị, giá trị được gửi xuống cho skeleton, tầng tham chiếu ở xa, và tầng giao vận trên phía server, thông qua
Internet và sau đó chuyển lên cho tầng giao vận, tầng tham chiếu ở xa, stub trên phía client.
Java Simplified / Session 22 / 12 of 45
09/14/15
(Java Naming Directory Interface): Naming.lookup() và Naming.bind()
Java Simplified / Session 22 / 13 of 45
09/14/15
trong đó:

Server Object: Các đốitượng chủ muốn được trình khách truy tìm được từ xa thì trước hết phải đăng ký với rmiregistry
Client Object: kết nối với trình đăng ký và y/c cung cấp cho nó một URL của đối tượng từ xa.
Trình đăng ký cung cấp một tham chiếu tới đối tượng đó và client sử dụng tham chiếu này để gọi các phương thức trên
server.
Java Simplified / Session 22 / 14 of 45
Qui trình chuyển tham số và dữ liệu qua lại giữa 2 lớp trung gian gọi là mashaling data
Java Simplified / Session 22 / 15 of 45
Rmi://hostname:port/ObjectName
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.
Phần giao thức được thay thế bằng rmi.
Phần đường dẫn của URL là tên gắn với đối tượng từ xa trên server chứ không phải là tên một tệp tin
Java Simplified / Session 22 / 16 of 45
NotBoundException: nếu server ở xa không nhận ra tên của nó.
RemoteException nếu trình không thể liên lạc được với trình đăng ký .
AccessException nếu server từ chối tra tìm tên cho host cụ thể.
MalformedURLException nếu URL không đúng cú pháp nó sẽ đưa ra ngoại lệ
Java Simplified / Session 22 / 17 of 45
NotBoundException: nếu server ở xa không nhận ra tên của nó.
RemoteException nếu trình không thể liên lạc được với trình đăng ký .
AccessException nếu server từ chối tra tìm tên cho host cụ thể.
MalformedURLException nếu URL không đúng cú pháp nó sẽ đưa ra ngoại lệ
.
Java Simplified / Session 22 / 18 of 45
09/14/15
NotBoundException: nếu server ở xa không nhận ra tên của nó.
RemoteException nếu trình không thể liên lạc được với trình đăng ký .
AccessException nếu server từ chối tra tìm tên cho host cụ thể.
MalformedURLException nếu URL không đúng cú pháp nó sẽ đưa ra ngoại lệ
.

Java Simplified / Session 22 / 19 of 45

Về mặt kỹ thuật đối tượng từ xa không phải là một thể hiện của RemoteObject.
Java Simplified / Session 22 / 20 of 45
09/14/15
Hiện nay, chỉ cần sinh ra tệp _Stub là đủ
Tại sao ko chạy dc rmic.
Java Simplified / Session 22 / 21 of 45
09/14/15
Trình khách sau khi chuyển kiểu đối tượng về dạng tường minh thì có thể truy xuất đối tượng từ xa theo cách thông thường
như cục bộ
Java Simplified / Session 22 / 22 of 45
09/14/15
Chương trình này chạy ở dạng service.
Java Simplified / Session 22 / 23 of 45
1. Đối tượngcài đặt các p thức và gọi hàm Naming.bind() để đăngký với bộ registry trên máy chủ
2. Đối tượng trên máy khách muốn gọi phương c ủa đối tượng trên máy chủ trước hết phải gọi hàm Naming.lookup() để truy
tìm tham chiếu trên đến đối tượng từ xa theo tên.
3. Bộ tham chiếu registry sẽ trả về tham chiếu đến đối tượng ở xa thông qua lớp giao tiếp interface mà đối tượng ở xa cung
cấp
4. Dựa váo lớp giao tiếp interface đối tượng, ở máy khách sẽ gọi các phương thức trên máy chủ .
5. Khi m ột phương thức đượcgọi, lời gọi sẽ chuyễn đến lớp trung gian _Stub. Xử lý tham số của phương thức gọi đến lớp
_Skel trên máy chủ
6. Lớp trung gian _Skel trên máy chủ sẽ trực tiếp yêu cầu đối tượng thực thi phương thức và chuyển trả kết quả cho máy
khách.
Java Simplified / Session 22 / 24 of 45
09/14/15
Ba máy ảo này có thể xem là ba máy tính khác nhau nhưng do chạy trên cùng một máy nên IP Address giống nhau là
127.0.0.1
Java Simplified / Session 22 / 25 of 45

09/14/15
Thực tế mô hình trên muốn hoạt động trên mạng thật thì chỉ có thể tách ra làm hai chứ không thể tách ra ba, vì Java không
cho phép rmiregistry chạy trên máy khác nơi đối tượng Rmi đang hoạt động

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×