Bài giảng công nghệ lập trình tích hợp chương 8 ts nguyễn quang uy

42 0 0
Bài giảng công nghệ lập trình tích hợp chương 8   ts  nguyễn quang uy

Đ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

Chương Lập trình phân tán – CORBA Mục lục chương • • • • • • Cơ Corba Cấu trúc IDL Cài đặt IDL Sử dụng đối tượng factory Đối tượng Persistence RMI-IIOP Cơ Corba • Mặc dù RMI phương pháp mạnh mẽ cho lập trình phân tán, có nhược điểm quan trọng: – Nó làm việc với đối tượng tạo Java • Điều khơng thực tế môi trường đa ngôn ngữ • Một phương pháp phổ quát cho việc phát triển ứng dụng phân tán corba (Common Object Request Broker Architecture) • Corba cho phép server viết ngơn ngữ sử dụng client viết nhiều ngôn ngữ khác Cơ Corba • Corba sản phẩn OMG (Object Management Group), tổ chức gồm 800 công ty nhằm phát triển cơng nghệ dựa đối tượng • Phiên Corba đời năm 1991, phiên (2008) 3.0 • Corba khơng phải cài đặt cụ thể mà đặc tả cho việc cài đặt sử dụng đối tượng phân tán Cơ Corba • Một cài đặt cụ thể corba bao gộm ORB (Object Request Broker) • Trên thị trường có nhiều ORB Một ORB Java IDL • CORBA ORB sử dụng Internet Inter-Orb Protocol (IIOB) dựa TCP/IP để giao tiếp nhà sản xuất khác với Cơ Corba • Một điểm khác biệt corba RMI RMI sử dụng Java để định nghĩa giao diện đối tượng, corba sử dụng ngôn ngữ đặc biệt Interface Definition Language (IDL) • Để cho ORB cung cấp truy cập đến đối tượng ngôn ngữ cụ thể, ORB phải cung cấp ánh xạ đến ngơn ngữ đích • Các ngơn ngữ hộ trợ bao gồm: Java, C++, C, Smalltalk, COBOL and Ada Cơ Corba • Ở phía client, có stub code cho phương thức gọi xa Stub hoạt động proxy cho phương thức xa • Ở phía server có skeleton hoạt động proxy cho phương thức gọi, truyển tất lợi gọi phương thức tham số thành định dạng cài đặt cụ thể Cấu trúc hoạt động Corba Client server ORB Cấu trúc hoạt động Corba Client server khác ORB Cấu trúc đặc tả Java IDL • Java IDL bao gồm phiên IDL ánh xạ từ IDL vào java • IDL hỗ trợ cấu trúc lớp phân tầng – Ở gốc lớp object, nhiên lớp không giống lớp object cua java – Đối tượng xác định tên org.omg.CORBA.Object 10 Cài đặt ứng dụng sử dụng Corba • Tạo server – Server đặt tên subsume – Sẽ phải sử dụng thư viện sau: • org.omg.CosNaming (for the naming service); • org.omg.CosNaming.NamingContextPackage (for special exceptions thrown by the naming service); • org.omg.CORBA (needed by all CORBA applications) 28 Cài đặt ứng dụng sử dụng Corba • Tạo server • Việc tạo server trải qua số bước sau: – Khởi tạo ORB • ORB orb = ORB.init(args,null); – Tạo Servant • HelloServant servant = new HelloServant(); – Đăng ký servant với ORB • orb.connect(servant); 29 Cài đặt ứng dụng sử dụng Corba • Tạo server – Nhận tham chiếu đến ngữ nghĩa tên gốc • org.omg.CORBA.Object objectRef = orb.resolve_initial_references("NameService"); – Thu hẹp tham chiếu ngữ nghía • NamingContext namingContext = NamingContextHelper.narrow(objectRef); – Tạo đối tượng NameComponent cho giao diện • NameComponent nameComp = new NameComponent("Hello", ""); 30 Cài đặt ứng dụng sử dụng Corba • Tạo server – Chỉ đường dẫn đến giao tiếp: Nếu ứng dụng thu mục khai bao sau: • NameComponent[] path = (nameComp}; – Gắn servant với đường dẫn giao tiếp • namingContext.rebind(path,servant); – Đợi client gọi tới • • • • • java.lang.Object syncObj = new java.lang.Object(); synchronized(syncObj) { syncObj.wait(); } 31 Cài đặt ứng dụng sử dụng Corba • File HelloServer: – import SimpleCORBAExample.*; – import org.omg.CosNaming.*; – import org.omg.CosNaming.NamingContextPackage.*; – import org.omg.CORBA.*; – – – – public class HelloServer { public static void main(String[] args) { 32 Cài đặt ứng dụng sử dụng Corba • File HelloServer: – – – – – – – – – – – – – – – – try { ORB orb = ORB.init(args,null); HelloServant servant = new HelloServant(); orb.connect(servant); org.omg.CORBA.Object objectRef = orb.resolve_initial_references("NameService"); NamingContext namingContext = NamingContextHelper.narrow(objectRef); NameComponent nameComp= new NameComponent("Hello", ""); NameComponent[] path = {nameComp}; namingContext.rebind(path,servant); java.lang.Object syncObj = new java.lang.Object(); synchronized(syncObj) { syncObj.wait(); } } 33 Cài đặt ứng dụng sử dụng Corba • File HelloServer: – catch (Exception ex) – { – System.out.println("*** Server error! ***"); – ex.printStackTrace(); – } – } – } – class HelloServant extends _HelloImplBase – { – public String getGreeting() – { – return ("Hello there!"); – } – } 34 Cài đặt ứng dụng sử dụng Corba • Biên dịch server idlj-generated files – Từ thư mục cha thư mục SimpleCORBAExample thực lệnh sau: – javac HelloServer.java SimpleCORBAExample\*.java 35 Cài đặt ứng dụng sử dụng Corba • Tạo Client • Ta cần thực số bước sau: – Khởi tạo ORB • ORB orb = ORB.init(args,null); – Nhận tham chiếu tới ngữ cảnh tên gốc • org.omg.CORBA.Object objectRef = orb.resolve_initial_references("NameService"); – Thu hẹp tham chiếu ngữ cảnh • NamingContext namingContext = NamingContextHelper.narrow(objectRef); 36 Cài đặt ứng dụng sử dụng Corba • Tạo Client – Tạo đối tượng NameComponent cho giao diện • NameComponent nameComp = new NameComponent("Hello", ""); – Chỉ đường dẫn giao diện • NameComponent[] path = (nameComp}; – Nhận tham chiếu đến giao diện • org.omg.CORBA.Object objectRef = namingContext.resolve(path); 37 Cài đặt ứng dụng sử dụng Corba • Tạo Client – Thu hẹp tham chiếu giao diện • Hello helloRef = HelloHelper.narrow(objectRef); – Gọi phương thức yêu cầu hiển thị kết • System.out.println("Message received: " + greeting); 38 Cài đặt ứng dụng sử dụng Corba • Code Client – import SimpleCORBAExample.*; – import org.omg.CosNaming.*; – import org.omg.CORBA.*; – public class HelloClient – { – public static void main(String[] args) – { – try – { – ORB orb = ORB.init(args,null); – org.omg.CORBA.Object objectRef = – orb.resolve_initial_references("NameService"); 39 Cài đặt ứng dụng sử dụng Corba • Code Client – NamingContext namingContext = NamingContextHelper.narrow(objectRef); – NameComponent nameComp= new NameComponent("Hello", ""); – NameComponent[] path = {nameComp}; – objectRef = namingContext.resolve(path);//Re-use existing obj ref – Hello helloRef = HelloHelper.narrow(objectRef); – String greeting = helloRef.getGreeting(); – System.out.println("Message received: " + greeting); – } – catch (Exception ex) – { – System.out.println("*** Client error! ***"); – ex.printStackTrace(); – } – } – } 40 Cài đặt ứng dụng sử dụng Corba • Biên dịch Client – Từ thư mục cha SimpleCORBAExample thực câu lệnh sau: – javac HelloClient.java 41 Cài đặt ứng dụng sử dụng Corba • Chạy ứng dụng – Khởi động CORBA naming service • Khởi động với số hiệu cổng cụ thể • tnameserv -ORBInitialPort 1234 – Chạy Server số hiệu cổng cụ thể • java HelloServer -ORBInitialPort 1234 – Chạy Client số hiệu cổng cụ thể • java HelloClient -ORBInitialPort 1234 42

Ngày đăng: 29/08/2023, 13:04