1. Trang chủ
  2. » Công Nghệ Thông Tin

code Remote Method Invocation

49 361 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 49
Dung lượng 2,18 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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ữ

Trang 1

Java Simplified / Session 22 / 1 of 45

Invocati

on: lời

cầu

khẩn

Trang 2

Java Simplified / Session 22 / 2 of 45

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ự

Trang 3

Java Simplified / Session 22 / 3 of 45

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ự

Trang 4

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

Trang 5

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

Trang 6

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)

Trang 7

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ộ

Trang 8

Java Simplified / Session 22 / 8 of 45

(rmic.exe)

Trang 9

Java Simplified / Session 22 / 9 of 45

(rmic.exe)

Trang 10

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

Trang 11

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

Trang 12

Java Simplified / Session 22 / 12 of 45

09/14/15

(Java Naming Directory Interface): Naming.lookup() và Naming.bind()

Trang 13

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

Trang 14

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

Trang 15

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

Trang 16

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ệ

Trang 17

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ệ

Trang 18

Java Simplified / Session 22 / 18 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ệ

Trang 19

Java Simplified / Session 22 / 19 of 45

Trang 20

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

Trang 21

Java Simplified / Session 22 / 21 of 45

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ộ

Trang 22

Java Simplified / Session 22 / 22 of 45

Chương trình này chạy ở dạng service

Trang 23

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

Trang 24

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

Trang 25

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

Trang 26

Java Simplified / Session 22 / 26 of 45

09/14/15

đăng kí rồi thì không gọi được

LocateRegistry.createRegistry()l ần th ứ hai trên cùng m ột cổng của máy ch ủ

Ví dụ:

LocateRegistry.createRegistry(1234);……… Naming.bind(“rmi://localhost:1234/myCal”,cal);

Trang 27

Java Simplified / Session 22 / 27 of 45

Khi Calculatorserver yêu cầu rmiregistry đăng ký tên đối tượng, rmiregistry sẽ đi truy tìm lớp trung gian

CalculatorImpl_Stub.Trên máy ảo rmiregistry đang chạy nếu CLASSPATH không trỏđếnđường dẫn C:\RMI\SV thì

nhậnđượcthông báo lỗi trả về trên máy ảonơiCalculatorserver yêu cầuđăngký đốitượng:

java.lang.ClassNotFoundException:Calculatorimpl_Stub

Để thay đổi giá trị cho CLASSPATH ta dùng lệnh: Set Classpath Ví dụ:

Set Classpath=.;C:\RMI\SV

Giá trị mặcđịnhcủa Classpath là trỏđếnthưmục chứa

hiện hành Lúc đó Classpath=.; Khi thay đổi giá trị cho Classpath ở một máy ảo sẽ không làm ảnh hưởng tới Classpath c ủa máy

Trang 28

Java Simplified / Session 22 / 28 of 45

Lớp trung gian CalculatorImpl_Stub.class không có ý nghĩa đối với các nhà phát triển ứng dụng Nó chỉ cần thiết cho cơ chế RMI của Java Chính vì điều này Java cung cấp cho bạn cách thức nạp tự động lớp CalculatorImpl_Stub.class từ xa thông qua tùy chọn Codebase khi đăng ký đối tượng với rmiregistry trên máy chủ Ở máy chủ phải hỗ trợ thêm dịch vụ WebServer chạy trên máy nơi rmiregistry đang chạy Sau đó chép tập tin CalculatorImpl_Stub.class vào thư mục myclass của trình chủ web server Khi sử dụng tùy chọn Codebase thì biến Classpath trên máy ảo nơi rmiregistry đang chạy không được trỏ

đếncùng thư mục chứa CalculatorImpl_Stub.class Nếu không rmiregistry sẽ luôn ưu tiên lấy lớp CalculatorImpl_Stub.class từ đườngdẫn Classpath mà bỏ qua tùy chọn Codebase

Trang 29

Java Simplified / Session 22 / 29 of 45

Khi máy khách có yêu cầu rmiregistry trả về tham chiếu của đối tượng, nếu máy khách chưa có lớp

Calculatorimpl_Stub.class,rmiregistry sẽ hướng dẫn máy khách tự động nạp lớp này từ địa chỉ codebase:

http://172.16.11.12/myclass/

ở đúng trong thư mục Dir) java –Djava.rmi.server.codebase=“http://IP/Dir/” <name>

trả về lớp Stub Và ghi nhớ lại URL

Trang 30

Java Simplified / Session 22 / 30 of 45

09/14/15

Nạp tập tin từ xa và chính sách bảo mật từ phía máy khách

:Với Java tất cả các thao tác kết nối và chép tập tin lạ từ một máykhác về một máy đều phải thông qua lớp bảo vệ

G ọi làsecurityManager Để t ạo lớp b ảo v ệ ta dùng lệnh sau:

System.setSecurityManager(new RMiSecurityManager());

Trang 31

Java Simplified / Session 22 / 31 of 45

09/14/15

Nạp tập tin từ xa và chính sách bảo mật từ phía máy khách

:Với Java tất cả các thao tác kết nối và chép tập tin lạ từ một máykhác về một máy đều phải thông qua lớp bảo vệ

G ọi làsecurityManager Để t ạo lớp b ảo v ệ ta dùng lệnh sau:

System.setSecurityManager(new RMiSecurityManager());

Trang 32

Java Simplified / Session 22 / 32 of 45

Không phòng vệ

Java đã xây dựng môi trường hỗ trợ lập tình phân tán rất hiệu quả và dễ dàng, bao trùm tất cả các vấn đề về RMI: J2EE – Enterprise Java Bean J2EE được xây dựng dựa trên nền RMI

Trang 33

Java Simplified / Session 22 / 33 of 45

•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ị.Truyền theo tham trị Giá trị của tham số mà hàm hay phương thức xử lý chỉ là bản sao của biến truyền từ ngoài vào

Truyền theo tham chiếu khi biếnđốitượngđược truy ền vào phương thức nếu bên trong phương thức thay đổi giá trị

củađốitượng thì khi lời gọiphương thức chấm dứt giá trị củađốitượng c ũng thay đổi theo

Trang 34

Java Simplified / Session 22 / 34 of 45

09 / 14 / 15

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

Trang 35

Java Simplified / Session 22 / 35 of 45

Nếuđốitượngball quá lớn việc đóng gói toàn bộđốitương chuyểnđi chuyển lại trên mạng sẽảnhhưởngđến tốcđộ th ực thi

củachương trình.Bây giờ chúng ta s ẽ xây dựngchương trình có thể thamchiếu và xử lý trực tiếpđốitượng nằm trên máy

khách Nghĩa làn ếutrình ch ủđược trình khách truy xuất từ xa thì trình kháchcũng được gọi từ xa bởi trình chủ B ằng cách này trình ch ủ vàtrình khách có thể triệu gọi lẫn nhau

Trang 36

Java Simplified / Session 22 / 36 of 45

09 / 14 / 15

Note: trình khách có thể tham chiếu đến đối tượng của trình chủ:

- đối tượng trên máy chủ phải cài đặt lớp giao tiếp Remote

- Sinh ra các lớp trung gian Stub và Skeleton

- Đăng ký rmiregistry

Trang 37

Java Simplified / Session 22 / 37 of 45

09/14/15

Khi trình khách gọi server.callServerMethod() của đối tượng chủ, phương thức này trên máy chủ lại sử dụng và gọi ngược lại

phương thức client.callClientMethod() của đối tượng đang chạy trên trình khách Trước khi gọi callClientMethod() trình chủ

thực hiện tính toán (in ra i), kết quả tính toán được chuyển về cho trình khách và trình khach tự động in ra kq

Do dùng callback nên trình chủ tính toán xong đã chủ động y/c trình khách tiếp nhận kq, nếu ko có callback thì trình khách

phải tự canh time để gọi pt trên trình chủ để lấy kq về

Trang 38

Java Simplified / Session 22 / 38 of 45

Tùy thuộc vào hàm thông báo sự hiện diện và khả năng giao tiếp từ xa : UnicastRemoteObject.exportObject()

Thì đối tượng sẽ được truyền theo tham chiếu,

Nếu ko thì truyền theo tham trị

Trang 39

Java Simplified / Session 22 / 39 of 45

Việc lưu đối tượng trên đĩa, dữ liệu trên tạp tin là loại dữ liệu tuần tự (trải phẳng đối tượng ra theo thứ tự)

để truyền các đối tượng giữa các máy ảo JVM hoặc dưới dạng các tham số trong lời gọi phương thức từ client tới server hoặc

là các giá trị trả về từ một lời gọi phương thức

Trang 40

Java Simplified / Session 22 / 40 of 45

0 9 /1 4 /1 5

Một dịch vụ đăng ký có thể tiếp nhận và quản lý cùng lúc nhiều đối tượng chủ khác nhau

Trang 41

Java Simplified / Session 22 / 41 of 45

09/14/15

Trong java cũng cho phép chúng ta lấy về danh sách các đốitượng mà rmiregistry đang nắm giữ Dướiđây là chương trình tìmhiểudanh sách tên tên cácđốitượngdo rmiregistry nắmgiữ

Trang 42

Java Simplified / Session 22 / 42 of 45

Khi trình khách gọi server.callServerMethod() của đối tượng chủ, phương thức này trên máy chủ lại sử dụng và gọi ngược lại phương thức client.callClientMethod() của đối tượng đang chạy trên trình khách Trước khi gọi callClientMethod() trình chủ thực hiện tính toán (in ra i), kết quả tính toán được chuyển về cho trình khách và trình khach tự động in ra kq

Do dùng callback nên trình chủ tính toán xong đã chủ động y/c trình khách tiếp nhận kq, nếu ko có callback thì trình khách phải tự canh time để gọi pt trên trình chủ để lấy kq về

Trang 43

Java Simplified / Session 22 / 43 of 45

09/14/15

Khi trình khách gọi server.callServerMethod() của đối tượng chủ, phương thức này trên máy chủ lại sử dụng và gọi ngược lại

phương thức client.callClientMethod() của đối tượng đang chạy trên trình khách Trước khi gọi callClientMethod() trình chủ

thực hiện tính toán (in ra i), kết quả tính toán được chuyển về cho trình khách và trình khach tự động in ra kq

Do dùng callback nên trình chủ tính toán xong đã chủ động y/c trình khách tiếp nhận kq, nếu ko có callback thì trình khách

phải tự canh time để gọi pt trên trình chủ để lấy kq về

Trang 44

Java Simplified / Session 22 / 44 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ộ

Trang 45

Java Simplified / Session 22 / 45 of 45

Firewall chỉ mở 1 số cổng phổ biến cho client dùng server: 80, 21, 23, 110

Trang 46

Java Simplified / Session 22 / 46 of 45

09 /1 4 /1 5

Trình môi giới

Trang 47

Java Simplified / Session 22 / 47 of 45

Interoperate Internet Object Protocol

a Phần cài đặt đối tượng Corba trên máy chủ:

- Đặc tả đối tượng X bằng IDL của Corba

- Chuyển đặc tả X thành một ngôn ngữ cụ thể (dùng 1 trình biên dịch tương ứng, ex: idlj.exe -> java; idl2cpp.exe-> C++)

- Trình biên dịch sẽ tạo ra lớp _Skel

- Cài đặt đối tượng băng ngôn ngữ (Java)

b Phần kết nối với đối tượng khách:

- Sử dụng IDL của X y/c trình biên dịch tạo ra _Stub (trình biên dịch tương ưng với trình khách)

- Trình khách gọi đối tượng chủ, lời gọi sẽ chuyển đến lớp _Stub, rồi đến trình môi giới ORB ORB của khách và chủ sẽ giao tiếp với nhau qua IIOP Tiếp đó ORB trên máy chủ sẽ chuyển lời gọi đến lớp _Skel Cuối cung đối tượng Corba sẽ thực hiện phương thức của nó được gọi

Ngày đăng: 14/09/2015, 10:53