Chương 5: Phân Tán Đối Tượng Trong Java

GIẢNG VIÊN : THS. NGUYỄN MINH THÀNH

EMAIL : THANHNM@ITC.EDU.VN

Nội Dung

1. Giới thiệu về hệ thống phân tán

2. Phân tán đối tượng với RMI

3. Phân tán đối tượng với CORBA

MÔ HÌNH CLIENT-SERVER & LẬP TRÌNH SOCKET

2

Giới thiệu về hệ thống phân tán  Phần mềm đang ngày càng trở nên phức tạp quá mức và dường như đang vượt khỏi khả năng kiểm soát của các mô hình phát triển hiện có.

 Việc kinh doanh phần mềm không còn chỉ là bán nguyên một ứng dụng, mà còn có thể chỉ bán một dịch vụ của hệ thống.  Ví dụ : Google bán dịch vụ bản đồ, quảng cáo… cho phép

nhúng vào các ứng dụng của các công ty khác

 Mô hình phân tán đối tượng giúp cho việc truy xuất các dịch vụ của các đối tượng từ xa trở nên phổ biến.

MÔ HÌNH CLIENT-SERVER & LẬP TRÌNH SOCKET

3

Phân Tán Đối Tượng Với RMI

MÔ HÌNH CLIENT-SERVER & LẬP TRÌNH SOCKET

4

Phân Tán Đối Tượng Với RMI

Giới Thiệu về RMI RMI (Remote Method Invoke) là một cơ chế triệu gọi phương thức từ xa đã được thực hiện và tích hợp trong ngôn ngữ Java. 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ự.

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

5

Phân Tán Đối Tượng Với RMI

Mục đích của RMI

• Hỗ trợ gọi phương thức từ xa trên các đối tượng trong các máy ảo 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 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 sự khác biệt giữa 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. • Tạo ra các ứng dụng phân tán có độ tin cậy một cách dễ dàng • Duy trì sự an toàn kiểu được cung cấp bởi môi trường thời gian chạy của nền tảng Java • Hỗ trợ các ngữ cảnh tham chiếu khác nhau cho các đối tượng từ xa • Duy trì môi trường an toàn của Java bằng các trình bảo an và các trình nạp lớp.

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

6

Phân Tán Đối Tượng Với RMI

Lưu ý  Cũng như tất cả các chương trình khác trong Java, chương trình RMI cũng được xây dựng bởi các giao tiếp và lớp.  Chỉ có những phương thức khai báo trong giao tiếp hoặc lớp thừa kế từ giao tiếp Remote hoặc các lớp con của Remote mới được Client gọi từ xa.  Giao tiếp Remote nằm trong packet java.rmi

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

7

Phân Tán Đối Tượng Với RMI

Các lớp trung gian Stub và Skeleton Trong kỹ thuật lập trình phân tán RMI, để các đối tượng trên các máy Java ảo khác nhau có thể truyền tin với nhau thông qua các lớp trung gian: Stub và Skeleton. Vai trò của lớp trung gian: Lớp trung gian tồn tại cả ở hai phía client và server  Phía client lớp trung gian này gọi là Stub (lớp móc)  Phía server lớp trung gian này gọi là Skeleton(lớp nối)

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

8

Phân Tán Đối Tượng Với RMI

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

Các hệ thống RMI phục vụ cho việc truyền tin thường được chia thành hai loại: client và server. Server RMI phải đăng ký với một dịch vụ tra tìm và đăng ký tên. Dịch vụ này cho phép các client truy tìm chúng, hoặc chúng có thể tham chiếu tới dịch vụ trong một mô hình khác. Mỗi khi server đựơc đăng ký, nó sẽ chờ các yêu cầu RMI từ các client. Các client RMI sẽ gửi các thông điệp RMI để gọi một phương thức trên một đối tượng từ xa trên Server. Trước khi thực hiện gọi phương thức từ xa, client phải nhận được một tham chiếu từ xa. Ứng dụng client yêu cầu một tên dịch vụcụthể, và nhận một URL trỏtới tài nguyên từ xa theo mẫu : rmi://hostname:port/servicename

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

9

Phân Tán Đối Tượng Với RMI

Cơ chế hoạt động của RMI (tt)

Mỗi khi có được một tham chiếu, client có thể tương tác với dịch vụ từ xa. Các chi tiết liên quan đến mạng hoàn toàn được che dấu đối với những người phát triển ứng dụng làm việc với các đối tượng từ xa đơn giản như làm việc với các đối tượng cục bộ. Điều này có thể có được thông qua sự phân chia hệ thống RMI thành hai thành phần, stub và skeleton.

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

10

Phân Tán Đối Tượng Với RMI

Các lớp và giao tiếp trong gói java.rmi

 Giao tiếp Remote

 Giao tiếp rỗng, các giao tiếp hoặc lớp muốn khai báo các phương thức gọi từ xa

phải kế thừa hoặc thực thi giao tiếp này.

 Lớp 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/myObject thành các đối tượng từ xa cụ thể trên host xác định.

 Public static Remote lookup(String url)throws RemotException,

NotBoundException, AccessException, MalformedURLException : Client sử dụng phương thức này để tìm kiếm một đối tượng từ xa gắn liền với tên đối tượng.

 Public static void bind(String url, Remote object)throws RemotException, AlreadyBoundException, MalformedURLException, AccessException : Server sử dụng phương thức để liên kết một tên với một đối tượng ở server khác.

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

11

Phân Tán Đối Tượng Với RMI

Các lớp và giao tiếp trong gói java.rmi

Lớp Naming

 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.

 Public static String[] list(String url) throws RemotException : Phương

thức này trảvề một mảng chuỗi, mỗi chuỗi là một URL đã được gắn với một tham chiếu.

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

12

Phân Tán Đối Tượng Với RMI

Các lớp và giao tiếp trong gói java.rmi.registry

Giao tiếp Registry và lớp LocateRegistry cho phép các client tìm kiếm các đối tượng ở xa trên một server theo tên.

Giao tiếp Registry

• 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.

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

13

Phân Tán Đối Tượng Với RMI

Các lớp và giao tiếp trong gói java.rmi.registry

Lớp LocateRegistry : Lớp java.rmi.registry.LocateRegistry cho phép client tìm trong trình đăng ký . • Public static Registry getRegistry() throws RemoteException • Public static Registry getRegistry(int port) throws RemoteException • Public static Registry getRegistry(String host) throws RemoteException • Public static Registry getRegistry(String host, int port) throws RemoteException • Public static Registry getRegistry(String host, int port, RMIClientSocketFactory factory) throws RemoteException Mỗi phương thức trên trả về một đối tượng Registry được sử dụng để nhận các đối tượng từ xa thông qua tên. • Public void LocateRegistry.createRegistry(port) : khởi tạo một trình đăng ký trên Server

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

14

Phân Tán Đối Tượng Với RMI

Cài đặt chương trình

Ví dụ minh họa :

 Xây dựng chương trình tính tổng 2 số. Trong đó :

 Server đóng vai trò thực hiện tính tổng bằng cách cho phép client triệu gọi

hàm từ xa.

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

15

 Client triệu gọi hàm tính tổng từ Server và nhận kết quả hiện ra màn hình

Phân Tán Đối Tượng Với RMI

Xây dựng các file Source

Bước 1: Xây dựng giao diện chứa các phương thức có thể triệu gọi từ xa public interface Calculator extends Remote{ public int sum(int num1, int num2)throws

RemoteException; } Bước 2: Viết lớp thực thi giao tiếp public class CalculatorImpl implements Calculator{ public CalculatorImpl()throws RemoteException{

super();

} @Override public int sum(int num1, int num2)throws

RemoteException{

return num1 + num2;

}

}

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

16

Phân Tán Đối Tượng Với RMI

Xây dựng các file Source (tt)

Bước 3: Viết chương trình cho Server public class RMIServerDemo {

public static void main(String[] args) throws

RemoteException, UnknownHostException, MalformedURLException

{

Calculator cal = new CalculatorImpl(); UnicastRemoteObject.exportObject(cal); Naming.bind("rmi://169.254.80.80/Calculator",

cal);

System.out.println("Server ready for client

requests...");

}

}

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

17

Phân Tán Đối Tượng Với RMI

Xây dựng các file Source (tt)

Bước 4: Viết chương trình cho Client public class RMIClientDemo {

public static void main(String[] args) throws

IOException, NotBoundException{

BufferedReader user =new BufferedReader(new

InputStreamReader(System.in));

System.out.println("Nhap so 1:"); Integer num1= Integer.parseInt(user.readLine()); System.out.println("Nhap so 2:"); Integer num2= Integer.parseInt(user.readLine());

String name="rmi://169.254.80.80/Calculator"; Calculator cal = (Calculator) Naming.lookup(name); Integer kq = cal.sum(num1, num2); System.out.println("Tong =" + kq.toString());

}

}

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

18

Phân Tán Đối Tượng Với RMI

Triển khai ứng dụng

Bước 6: Thực hiện biên dịch các file java, tạo ra các file .class

C:\MyJava>javac Calculator.java C:\MyJava>javac CalculatorImpl.java C:\MyJava>javac RMIServerDemo.java C:\MyJava>javac RMIClientDemo.java

Bước 7: Tạo các lớp trung gian Stub và Skeleton

C:\MyJava>rmic CalculatorImpl //file class

Bước 8: Tổ chức chương trình

Phía Server Phia Client

Calculator.class Calculator.class

CalculatorImpl.class CalculatorImpl_Stub.class

CalculatorImpl_Stub.class RMIClientDemo.class

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

19

RMIServerDemo.class

Phân Tán Đối Tượng Với RMI

Triển khai ứng dụng (tt)

Bước 6: Thực hiện biên dịch các file java, tạo ra các file .class

C:\MyJava>javac Calculator.java C:\MyJava>javac CalculatorImpl.java C:\MyJava>javac RMIServerDemo.java C:\MyJava>javac RMIClientDemo.java

Bước 7: Tạo các lớp trung gian Stub và Skeleton

C:\MyJava>rmic CalculatorImpl //file class

Bước 8: Khởi động phía Server ◦ Khởi động đăng ký

C:\MyJava>start rmiregistry

◦ Khởi động Server

C:\MyJava>start java RMIServerDemo

Bước 9: Chạy chương trình phía Client

C:\MyJava>java RMIClientDemo

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

20

Phân Tán Đối Tượng Với RMI

Tạo ra một trình đăng ký ngay trong server

public class RMIServerDemo {

public static void main(String[] args) throws

RemoteException, UnknownHostException, MalformedURLException

{

Calculator cal = new CalculatorImpl(); UnicastRemoteObject.exportObject(cal); LocateRegistry.createRegistry(1099); Naming.bind("rmi://169.254.80.80/Calculator",

cal);

System.out.println("Server ready for client

requests...");

}

}

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

21

Phân Tán Đối Tượng Với CORBA

MÔ HÌNH CLIENT-SERVER & LẬP TRÌNH SOCKET

22

Phân Tán Đối Tượng Với CORBA

Giới thiệu về CORBA

Các nhà lập trình luôn mong muốn tìm được một tiếng nói chung cho tất cả các ngôn ngữ lập trình hiện có. CORBA (Common Object Request Broker Architecture – kiến trúc môi giới các đối tượng chung) được hình thành từ một tổ chức nghiên cứu quốc tế OMG (Object Management Group). Tham vọng của OMG là đưa ra cách để các đối tượng viết bằng những ngôn ngữ khác nhau có thể gọi lẫn nhau theo mô hình đốitượng phân tán. CORBA không phải là một ngôn ngữ lập trình, CORBA là một ngôn ngữ đặc tiếp (IDL-Interface Description Language)

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

23

Phân Tán Đối Tượng Với CORBA

Ngôn ngữ đặc tả

Các ngôn ngữ lập trình khác nhau thường có một điểm chung đó chính là lời gọi thủ tục, hàm, kiểu dữ liệu, tham số truyền vào hàm, trị trả về của hàm. Điều đầu tiên khi cài đặt hàm là phải khai báo hàm.  Ví dụ:

Trong C/C++: int get_price(char * product) Trong Basic: function get_price(product as string) as integer Trong Java: public static int get_price(String product)

 Người ta có ý tưởng dùng một ngôn ngữ khái quát để đặc tả các hàm trên

rồi dùng một công cụ dịch hàm sang một ngôn ngữ cụ thể.

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

24

Phân Tán Đối Tượng Với CORBA

Ngôn ngữ đặc tả (IDL) trong CORBA

CORBA quy định một tập hợp các mô tả hàm, kiểu dữ liệu, cách khai báo để đặc tả đối tượng. Đặc tả đối tượng cũng giống như khái niệm giao tiếp interface trong Java. Nó chỉ mô tả chức năng của đối tượng thông qua hàm, phương thức, thuộc tính,… mà không có bất kỳ cài đặt mã lệnh nào trong ngôn ngữ đặc tả. Chính vì vậy mà CORBA còn được gọi là ngôn ngữ đặc tả giao tiếp IDL. CORBA cung cấp một số tiện ích để dịch một đặc tả sang một ngôn ngữ lập trình nào đó. Vídụ:

idl2cpp để dịch sang ngôn ngữ C idl2pas để dịch sang ngôn ngữ Pascal idlj (idl2java) để dịch sang ngôn ngữ Java

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

25

Phân Tán Đối Tượng Với CORBA

Ngôn ngữ đặc tả (IDL) trong CORBA

Bảng ánh xạ giữa IDL và Java

-Để chuyển từ interface của Java sang IDL ta dùng lệnh: rmic –idl YourObject.class

- Để chuyển từ một đặc tả IDL sang một interface của Java ta dùng lệnh: idlj YourObject.idl

IDL CORBA JAVA

26

module interface constant boolean char, wchar octet string, wstring short, unsigned short long, unsigned long long long, unsigned long long float double enum, struct, union sequence, array exception operation package Interface public static final boolean char byte String short int long float double class array class method QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

Phân Tán Đối Tượng Với CORBA

ORB(Object Request Broker) (đối tượng môi giới trung gian)

ORB được xây dựng độc lập với máy ảo Java (JMV). Tuy nhiên từ Java 1.2 máy ảo Java đã nhúng luôn khả năng ORB và xem như nó là một phần của Java chuẩn.

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

28

Phân Tán Đối Tượng Với CORBA

ORB(Object Request Broker) (đối tượng môi giới trung gian)

ORB cũng dùng khái niệm lớp trung gian Stub và Skel tương tự như cách làm việc của các đối tượng trong RMI.

Stub và Skel được sinh ra từ trình biên dịch dựa vào đặc tả IDL. Ta không cần phải viết mã lệnh cho lớp Stub và Skel.

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

29

Phân Tán Đối Tượng Với CORBA

QUY TRÌNH XÂY DỰNG ỨNG DỤNG CORBA

Trên Server • Đặc tả đối tượng X bằng ngôn ngữ IDL của CORBA. • Chuyển đặc tả X thành mô tả của một ngôn ngữ cụ thể (ví dụ dùng trình biên dịch idlj.exe để chuyển đặc tả của X sang ngôn ngữ Java). Dựa vào đặc tả IDL yêu cầu trình biên dịch tạo ra lớp trung gian Skel. • Cài đặt đối tượng X bằng ngôn ngữ Java. Trên Client • Sử dụng đặc tả IDL của đối tượng X yêu cầu trình biên dịch tạo ra lớp trung gian Stub. Tùy theo ngôn ngữ muốn viết ở máy khách mà ta sử dụng trình biên dịch thích hợp • Khi trình khách gọi đối tượng chủ, thực tế lời gọi sẽ chuyển qua lớp Stub trên máy khách, gởi đến trình môi giới ORB. Trình ORB trên máy khách sẽ kết nối với trình ORB trên máy chủ theo giao thức IIOP. Trình ORB trên máy chủ chuyển lời gọi cho lớp trung gian Skel trên máy chủ. Cuối cùng đối tượng CORBA trên máy chủ sẽ thực thi phương thức của nó.

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

30

Phân Tán Đối Tượng Với CORBA

Xây dựng ứng dụng CORBA trong môi trường Java

Ta thực hiện viết một chương trình Hello World đơn giản. Chương trình CORBA trên máy client sẽ gọi đối tượng trên máy server. Đối tượng trên máy server sẽ trả về chuỗi mang lời chào “Hello CORBA”

Công việc phía Client •Xây dựng chương trình gọi đối tượng Hello của máychủ.

Công việc phía Server •Xây dựng đặc tả Hello.idl •Xây dựng đối tượng Hello bằng idlj và ngôn ngữ Java. •Khởi động dịch vụ đăng ký tnameserv.exe •Viết chương trình cài đặt đối tượng Hello lên máy chủ.

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

31

Phân Tán Đối Tượng Với CORBA

Công việc phía Server

 Chúng ta sẽ xây dựng đối tượng Hello. Đối tượng này sẽ cung cấp phương thức sayHello().

Bước 1 : đặc tả đối tượng này bằng ngôn ngữ CORBA IDL và lưu trong file C:\MyCorba\Hello.idl như sau :

interface Hello {

string sayHello();

};

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

32

Phân Tán Đối Tượng Với CORBA

Công việc phía Server

Bước 2 :

 Biên dịch file Hello.idl sang ngôn ngữ Java, dùng lệnh

idlj –fall Hello.idl

 Kết quả thu được các file sau :

Tập tin chuyển đặc tả IDL thành đặc tả interface của Java

Hello.java

HelloOperations.java

Tập tin chuyển lớp giao tiếp đối tượng kiểu Java thành lớp giao tiếp đối tượng đặc thù trong CORBA

Tập tin chứa lớp cài đặt cho đối tượng CORBA HelloPOA.java

Tập tin chứa lớp hỗ trợ các thao tác trên các kiểu dữ liệu HelloHelper.java

HelloHolder.java Tập tin chứa lớp hỗ trợ cho việc truyền các tham số out và inout.

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

33

_HelloStub.java Lớp trung gian giúp giao tiếp với các phương thức được định nghĩa bằng IDL

Phân Tán Đối Tượng Với CORBA

Công việc phía Server

Bước 3 :

 Muốn cài đặt đối tượng CORBA ta quan tâm đến lớp HelloPOA (lớp chứa cài đặt

cho đối tượng CORBA).

 Tạo một lớp HelloImpl hiện thực các phương thức trong file IDL và kết thừa từ

lớp HelloPOA

public class HelloImpl extends HelloPOA {

System.out.println("Client contact !"); return "Hello CORBA";

public String sayHello(){

 Lớp HelloPOA nguyên thủy kế thừa từ lớp CORBA.Object, cho nên lớp HelloImpl

được kế thừa từ HelloPOA cũng là một đối tượng CORBA chính thống.

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

34

} }

Phân Tán Đối Tượng Với CORBA

Công việc phía Server

Bước 4 :

 Xây dựng lớp HelloServer để thực hiện việc khởi động trình môi giới, đăng ký đối

tượng CORBA…

public class HelloServer {

try{

public static void main(String args[]) {

// khởi tạo trình môi giới ORB ORB orb = ORB.init(args, null); // lấy tham chiếu đến đối tượng RootPOA (bộ điều phối đối

// và kích hoạt trình quản lý POA POA rootpoa =

tượng di động)

POAHelper.narrow(orb.resolve_initial_references("RootPOA"));

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

35

rootpoa.the_POAManager().activate();

Phân Tán Đối Tượng Với CORBA

Công việc phía Server

Bước 4 :

 Xây dựng lớp HelloServer để thực hiện việc khởi động trình môi giới, đăng ký đối

tượng CORBA…

// tạo đối tượng CORBA và đăng ký với ORB HelloImpl helloImpl = new HelloImpl(); helloImpl.setORB(orb); // tạo đối tượng tham chiếu đến đối tượng CORBA org.omg.CORBA.Object ref = rootpoa.servant_to_reference(helloImpl);

Hello href = HelloHelper.narrow(ref); // lấy tham chiếu đến dịch vụ đăng ký tnameserv org.omg.CORBA.Object objRef =

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

36

orb.resolve_initial_references("NameService");

Phân Tán Đối Tượng Với CORBA

Công việc phía Server

Bước 4 :

 Xây dựng lớp HelloServer để thực hiện việc khởi động trình môi giới, đăng ký đối

tượng CORBA…

//lấy về các thông tin ngữ môitrường //mà dịch vụ tnameserv đang hoạt động NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef); // ràng buộc đối tượng theo tên do dịch vụ tnameserv quảnlý String name = "Hello"; NameComponent path[] = ncRef.to_name(name); ncRef.rebind(path, href); System.out.println("HelloServer ready and waiting..."); // chờ các cuộc triệu gọi từ client orb.run();

}catch (Exception e) {

System.err.println("ERROR: " + e); e.printStackTrace(System.out);

} System.out.println("HelloServer

Exiting ...");

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

37

}

}

Phân Tán Đối Tượng Với CORBA

Công việc phía Client

Bước 5 :

 Xây dựng lớp HelloClient để thực hiện việc gọi hàm từ xa thông qua CORBA

public class HelloClient {

static Hello helloImpl; public static void main(String args[]) {

//tạo đối tượng ORB ORB orb = ORB.init(args, null); // lấy đối tượng đăng ký dịch vụ của ORB org.omg.CORBA.Object objRef =

try{

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

38

orb.resolve_initial_references("NameService");

Phân Tán Đối Tượng Với CORBA

Công việc phía Client

Bước 5 : (tt)

 Xây dựng lớp HelloClient để thực hiện việc gọi hàm từ xa thông qua CORBA

// Lấy thông tin ngữ cảnh của đối tượng đăng ký dịch vụ NamingContextExt ncRef =

NamingContextExtHelper.narrow(objRef);

// lấy đối tượng tham chiếu thông qua tên và thực thi String name = "Hello"; helloImpl = HelloHelper.narrow(ncRef.resolve_str(name)); System.out.println("Đã kết nối đượng với :" + helloImpl); System.out.println(helloImpl.sayHello());

} catch (Exception e) {

}

System.out.println("ERROR : " + e) ; e.printStackTrace(System.out);

}

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

39

}

Phân Tán Đối Tượng Với CORBA

Biên dịch chương trình

Bước 6 : Để tất cả các file vào một thư mục và biên dịch chương trình javac *.java

Các file phía Server Các file phía Client

_HelloStub.class _HelloStub.class

Hello.class Hello.class

HelloHelper.class HelloHelper.class

HelloHolder.class

HelloOperations.class

HelloOperations.class

HelloPOA.class

HelloServer.class

HelloClient.class

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

40

HelloImpl.class

Phân Tán Đối Tượng Với CORBA

Biên dịch chương trình

Bước 7 : Khởi động dịch vụ ORB (trình môi giới trung gian) trên máy Server với port 1050

start orbd -ORBInitialPort 1050

Bước 8 : Khởi động HelloServer

start java HelloServer -ORBInitialPort 1050 -ORBInitialHost 169.254.80.80

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

41

Phân Tán Đối Tượng Với CORBA

Biên dịch chương trình

Bước 9 : Chạy client

java HelloClient -ORBInitialPort 1050 -ORBInitialHost 169.254.80.80

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

42

Phân Tán Đối Tượng Với CORBA

Biên dịch chương trình

Bước 9 : Chạy client

java HelloClient -ORBInitialPort 1050 -ORBInitialHost 169.254.80.80

QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA

43

Hết Chương 5