intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng Lập trình ứng dụng mạng: Bài 4 - GV. Võ Tấn Dũng

Chia sẻ: Fczxxv Fczxxv | Ngày: | Loại File: PDF | Số trang:47

123
lượt xem
25
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Nội dung trình bày trong bài 4 Corba (Common Object Request Broker Architecture) thuộc bài giảng lập trình ứng dụng mạng nhằm trình bày về khái niệm Corba, ngôn ngữ đặc tả, IDL trong Corba, IDL ánh xạ sang java, Corba và mô hình phân tán.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Lập trình ứng dụng mạng: Bài 4 - GV. Võ Tấn Dũng

  1. TRƯỜNG CAO ĐẲNG CÔNG NGHỆ THÔNG TIN TP.HCM LẬP TRÌNH ỨNG DỤNG MẠNG BÀI 4 CORBA (Common Object Request Broker Architecture) GIẢNG VIÊN: VÕ TẤN DŨNG
  2. PHẦN 1 CÁC KHÁI NIỆM GV: Võ Tấn Dũng
  3. KHÁI NIỆM 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 (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 đối tượ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 tả giao tiếp (IDL-Interface Description Language) GV: Võ Tấn Dũng 3
  4. 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 GV: Võ Tấn Dũng ngôn ngữ cụ thể. 4
  5. 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 GV: Võ Tấn Dũng 5
  6. IDL ÁNH XẠ SANG JAVA Bảng ánh xạ giữa IDL và Java: IDL CORBA JAVA - Để chuyển từ interface của module package Java sang IDL ta dùng lệnh: interface Interface rmic –idl YourObject.class constant public static final boolean boolean char, wchar char - Để chuyển từ một đặc tả IDL octet byte sang một interface của Java ta string, wstring String dùng lệnh: short, unsigned short short long, unsigned long int idlj YourObject.idl long long, unsigned long long long float float double double enum, struct, union class sequence, array array exception class operation method GV: Võ Tấn Dũng 6
  7. PHẦN 2 CORBA VÀ MÔ HÌNH PHÂN TÁN GV: Võ Tấn Dũng
  8. ORB(Object Request Broker) chương trình môi giới trung gian • Các đối tượng sau khi được viết bằng những ngôn ngữ lập trình khác nhau muốn gọi được lẫn nhau phải thông qua một trình môi giới trung gian của CORBA là ORB • 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. C++ Internet / Java ORB ORB IDL IDL CORBA Mạng CORBA Object Object GV: Võ Tấn Dũng 8
  9. CƠ CHẾ LÀM VIỆC CỦA ORB • 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. Thật sự thì 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 Máy Client Máy Sever C++ Java Client CORBA Object X Lớp trung gian Lớp trung gian Stub Skel giao thức IIOP ORB ORB GV: Võ Tấn Dũng Lời gọi đối tượng trên lý thuyết 9 Lời gọi đối tượng thực tế
  10. QUY TRÌNH XÂY DỰNG ỨNG DỤNG CORBA TRÊN MÁY CHỦ: • Đặ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 MÁY KHÁCH: • 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 GV: Võ Tấn Dũng của nó. 10
  11. PHẦN 3 XÂY DỰNG ỨNG DỤNG CORBA TRONG MÔI TRƯỜNG JAVA GV: Võ Tấn Dũng
  12. CHƯƠNG TRÌNH HELLO WORLD • 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 Server: Công việc phía Client: • Xây dựng đặc tả Hello.idl • Xây dựng chương trình • Xây dựng đối tượng gọi đối tượng Hello của Hello bằng idlj và ngôn máy chủ. 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ủ. GV: Võ Tấn Dũng 12
  13. CÁC CÔNG VIỆC PHÍA SERVER (step 1) • Chúng ta cần một đối tượng Hello. Đối tượng này cung cấp phương thức sayHello(). Đặc tả đối tượng bằng ngôn ngữ CORBA IDL được diễn đạt như sau: interface Hello { string sayHello(); }; • Lưu đoạn mã trên thành tập tin Helo.idl trong thư mục tùy ý, ở đây ta chọn lưu trong thư mục C:\CORBA\Hello GV: Võ Tấn Dũng 13
  14. CÁC CÔNG VIỆC PHÍA SERVER (step 2) • Với nội dung của tập tin Hello.idl, ta sử dụng chương trình idlj.exe để chuyển đặc tả sang ngôn ngữ Java. Đánh lệnh biên dịch như sau: idlj -fserver Hello.idl • Kết quả ta thu được các tập tin sau: 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 • Muốn cài đặt đối tượng CORBA ta quan tâm đến lớp HelloPOA. Đối tượng CORBA thật sự của lớp Hello sẽ GV: Võ Tấn Dũng được cài đặt ở bước kế tiếp. 14
  15. CÁC CÔNG VIỆC PHÍA SERVER (step 3) /* HelloServant.java*/ public class HelloServant extends HelloPOA { public String sayHello() { System.out.println("Client contact !"); return "Hello CORBA"; } } • Lớp HelloPOA nguyên thủy kế thừa từ lớp CORBA.Object, cho nên lớp HelloServent được kế thừ từ HelloPOA cũng là một đối tượng CORBA chính thống. • Các lớp Hello.class, HelloOperations.class là những lớp trung gian hỗ trợ cho lời gọi của trình môi giới ORB đến đối tượng CORBA. • Lệnh dịch tất các tập tin Java nguồn nói trên như sau: GV: Võ Tấn Dũng C:\CORBA\Hello>javac *.java 15
  16. CÁC CÔNG VIỆC PHÍA SERVER (step 4) • Bước tiếp theo ta khởi động trình đăng ký đối tượng CORBA trên server, trình này là tnameserv.exe. Mặc định dịch vụ này chạy trên cổng 900. Ta có thể thay đổi cổng 1020 cho nó bằng lệnh: tnameserv -ORBInitialPort 1020 C:\CORBA\Hello>tnameserv Initial Naming Context: IOR:000000000000002b49444c3a6f6d672e6f72672f436f734e616d696e672f4e616d696e67436f 6e746578744578743a312e30000000000001000000000000009a000102000000000c3139322e3136 382e312e32000384000000000045afabcb0000000020000f42400000000100000000000000020000 0008526f6f74504f41000000000d544e616d65536572766963650000000000000008000000010000 00011400000000000002000000010000002000000000000100010000000205010001000100200001 0109000000010001010000000026000000020002 TransientNameServer: setting port for initial object references to: 900 Ready. GV: Võ Tấn Dũng 16
  17. CÁC CÔNG VIỆC PHÍA SERVER (step 5) Xây dựng chương trình cài đặt và đăng ký đối tượng CORBA HelloServant tại máy chủ: /*Setup.java*/ import org.omg.CORBA.*; import org.omg.CosNaming.*; import org.omg.CosNaming.NamingContextPackage.*; public class Setup { public static void main(String args[]) throws Exception{ System.out.println("Setup CORBA Hello Object"); //khởi động trình môi giới đối tượng ORB ORB orb=ORB.init(args,null); //tạo đối tượng CORBA HelloServant servant= new HelloServant(); //kết nối đối tượng CORBA với trình môi giới ORB orb.connect(servant); //lấytham chiếu đến dịch vụ đăng ký tnameserv org.omg.CORBA.Object nameService= orb.resolve_initial_references("NameService"); GV: Võ Tấn Dũng //code còn ở slide tiếp theo 17
  18. CÁC CÔNG VIỆC PHÍA SERVER (step 5) //lấy về các thông tin ngữ cảnh hay môi trường //mà dịch vụ tnameserv đang hoạt động NamingContext nsContext = NamingContextHelper.narrow(nameService); //tạo tên của đối tượng NameComponent nc=new NameComponent("Hello",""); //tạo đường dẫn để lưu tên đối tượng NameComponent path[]={nc}; //ràng buộc đối tượng theo tên do dịch vụ tnameserv quản lý nsContext.rebind(path,servant); System.out.println("Waiting for client ..."); //tạo đối tượng Java java.lang.Object obj = new java.lang.Object(); //vòng lặp vô tận chờ nhận yêu cầu từ máy khách synchronized (obj){ tnameserv đang chạy trên một cửa số DOS-prompt. obj.wait(); Mở thêm một cửa sổ DOS-prompt khác: C:\CORBA\Hello>javac Setup.java } C:\CORBA\Hello>java Setup } Setup CORBA Hello Object GV: Võ Tấn Dũng } Waiting for client… 18
  19. CÁC CÔNG VIỆC PHÍA CLIENT(step 1) • Tại client, trước tiên là tạo ra các lớp trung gian. Dùng trình idlj.exe để chuyển đặc tả IDL của Hello về các lớp đặc tả bằng Java phía Client bằng cách lưu tập tin Hello.idl vào C:\CORBA\Hello\Client rồi thực hiện lệnh sau: idlj -fclient Hello.idl • Kết quả ta thu được các tập tin sau: HelloHelper.java HelloHolder.java _HelloStub.java chính là lớp Hello.java trung gian thực hiện giao tiếp giữa ORB và đối tượng HelloOperations.java CORBA _HelloStub.java GV: Võ Tấn Dũng 19
  20. CÁC CÔNG VIỆC PHÍA CLIENT (step 2) /* Client.java*/ //Cài đặt trình khách như sau: import org.omg.CORBA.*; import org.omg.CosNaming.*; public class Client { public static void main(String args[]) throws Exception{ //khởi động trình môi giới ORB ORB orb=ORB.init(args,null); // tham chiếu đến dịch vụ tên tnameserv org.omg.CORBA.Object nameService=orb.resolve_initial_references("NameService"); //chuyển tham chiếu về đối tượng Naming Context NamingContext nsContext = NamingContextHelper.narrow( nameService); //tạo đường dẫn mang tên đối tượng NameComponent nc=new NameComponent("Hello",""); NameComponent path[]={nc}; //Lấy về tham chiếu của đối tượng CORBA trên máy chủ dựa vào tên Hello servant=HelloHelper.narrow(nsContext.resolve(path)); System.out.println( servant.sayHello() ); } GV: Võ Tấn Dũng } 20
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2