Bài giảng Lập trình Java - Chương 5: Phân tán đối tượng trong Java - Nguyễn Minh Thành

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

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

23Ngô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ể.

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

24Ngô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

pdf43 trang | Chia sẻ: trungkhoi17 | Lượt xem: 527 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài giảng Lập trình Java - Chương 5: Phân tán đối tượng trong Java - Nguyễn Minh Thành, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
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 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 Phân Tán Đối Tượng Với RMI 5 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 QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 11  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. Phân Tán Đối Tượng Với RMI Các lớp và giao tiếp trong gói java.rmi QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 12 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. Phân Tán Đối Tượng Với RMI Các lớp và giao tiếp trong gói java.rmi.registry QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 13 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. Phân Tán Đối Tượng Với RMI Các lớp và giao tiếp trong gói java.rmi.registry QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 14 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 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.  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 QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 15 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 QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 19 Phía Server Phia Client Calculator.class Calculator.class CalculatorImpl.class CalculatorImpl_Stub.class CalculatorImpl_Stub.class RMIClientDemo.class 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 RMI Phân Tán Đối Tượng Với CORBA MÔ HÌNH CLIENT-SERVER & LẬP TRÌNH SOCKET 22 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 Phân Tán Đối Tượng Với CORBA 23 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 Phân Tán Đối Tượng Với CORBA 24 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 Phân Tán Đối Tượng Với CORBA 25 Ngôn ngữ đặc tả (IDL) trong CORBA QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA Phân Tán Đối Tượng Với CORBA 26 Bảng ánh xạ giữa IDL và JavaIDL CORBA JAVA 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 -Để 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 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” 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 Công việc phía Client •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ủ. •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  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 : QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 32 Phân Tán Đối Tượng Với CORBA interface Hello { string sayHello(); }; 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  Kết quả thu được các file sau : QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 33 Phân Tán Đối Tượng Với CORBA idlj –fall Hello.idl HelloOperations.java Tập tin chuyển đặc tả IDL thành đặc tả interface của Java Hello.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 HelloPOA.java Tập tin chứa lớp cài đặt cho đối tượng CORBA HelloHelper.java Tập tin chứa lớp hỗ trợ các thao tác trên các kiểu dữ liệu HelloHolder.java Tập tin chứa lớp hỗ trợ cho việc truyền các tham số out và inout. _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 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  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 public class HelloImpl extends HelloPOA { public String sayHello(){ System.out.println("Client contact !"); return "Hello 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 QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 35 Phân Tán Đối Tượng Với CORBA public class HelloServer { public static void main(String args[]) { try{ // 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 tượng di động) // và kích hoạt trình quản lý POA POA rootpoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA")); rootpoa.the_POAManager().activate(); 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 QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 36 Phân Tán Đối Tượng Với 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 = orb.resolve_initial_references("NameService"); 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 QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 37 Phân Tán Đối Tượng Với 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 ..."); } } 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 QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 38 Phân Tán Đối Tượng Với CORBA public class HelloClient { static Hello helloImpl; public static void main(String args[]) { try{ //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 = orb.resolve_initial_references("NameService"); 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 QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 39 Phân Tán Đối Tượng Với 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); } } } 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 QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 40 Phân Tán Đối Tượng Với CORBA 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 HelloImpl.class HelloOperations.class HelloOperations.class HelloPOA.class HelloServer.class HelloClient.class 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 Phân Tán Đối Tượng Với CORBA Hết Chương 5

Các file đính kèm theo tài liệu này:

  • pdfbai_giang_lap_trinh_java_chuong_5_phan_tan_doi_tuong_trong_j.pdf