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

Bài giảng lập trình ứng dụng mạng bài 4 GV võ tấn dũng

47 188 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 47
Dung lượng 436,29 KB

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

Nội dung

ORBObject 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ôngqua một trình môi giới

Trang 1

(Common Object Request Broker Architecture)

TRƯỜNG CAO ĐẲNG CÔNG NGHỆ THÔNG TIN TP.HCM

Trang 2

PHẦN 1

CÁC KHÁI NIỆM

Trang 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óichung 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) đượchì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ácnhau có thể gọi lẫn nhau theo mô hình đối tượng phântá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)

Trang 4

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

Trang 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ượngcũ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

Trang 6

IDL ÁNH XẠ SANG JAVA

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

IDL CORBA JAVA

short, unsigned short

long, unsigned long

long long, unsigned long long

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

Trang 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ôngqua 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) Tuynhiên từ Java 1.2 máy ảo Java đã nhúng luôn khả năngORB và xem như nó là một phần của Java chuẩn

C++

CORBA

Object

Java CORBA Object

Trang 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

Java CORBA Object X

Lớp trung gian

Skel ORB

Máy Sever

Lời gọi đối tượng trên lý thuyết

giao thức IIOP

Trang 10

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

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

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

TRÊN MÁY CHỦ:

TRÊN MÁY KHÁCH:

Trang 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ượngtrên máy server Đối tượng trên máy server sẽ trả về chuỗimang lời chào “Hello CORBA”

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ủ

Công việc phía Client:

• Xây dựng chương trìnhgọi đối tượng Hello củamáy chủ

Trang 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 cungcấp phương thức sayHello() Đặc tả đối tượng bằng ngônngữ CORBA IDL được diễn đạt như sau:

• 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

Trang 14

• Với nội dung của tập tin Hello.idl, ta sử dụng chương trìnhidlj.exe để chuyển đặc tả sang ngôn ngữ Java Đánh lệnhbiê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ớpHelloPOA Đối tượng CORBA thật sự của lớp Hello sẽđược cài đặt ở bước kế tiếp

Trang 15

CÁC CÔNG VIỆC PHÍA SERVER (step 3)

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

Trang 16

00011400000000000002000000010000002000000000000100010000000205010001000100200001 0109000000010001010000000026000000020002

TransientNameServer: setting port for initial object references to: 900

Ready.

• 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àychạy trên cổng 900 Ta có thể thay đổi cổng 1020 cho nóbằng lệnh:

tnameserv -ORBInitialPort 1020

Trang 17

CÁC CÔNG VIỆC PHÍA SERVER (step 5)

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");

//code còn ở slide tiếp theo

Xây dựng chương trình cài đặt và đăng ký đối tượng CORBA HelloServant tại máy chủ:

Trang 18

//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){

obj.wait();

} }

}

tnameserv đang chạy trên một cửa số DOS-prompt

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 Waiting for client…

Trang 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ùngtrì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ệnhsau:

idlj -fclient Hello.idl

• Kết quả ta thu được các tập tin sau:

Trang 20

/* 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","");

Trang 21

CÁC CÔNG VIỆC PHÍA CLIENT (step 3)

Trang 22

TÌM HIỂU CÁC ĐỐI TƯỢNG CORBA ĐÃ CÀI ĐẶT

• Các tập tin trung gian cài đặt phía máy chủ (server):

• Các tập tin trung gian cài đặt phía máy khách (client):

HelloOperations.java Hello.java

HelloPOA.java

HelloHelper.java HelloHolder.java Hello.java

HelloOperations.java _HelloStub.java

Trang 24

KHỞI ĐỘNG ORB BẰNG LỜI GỌI HÀM

• Ở ví dụ Hello nói trên chúng ta đã khởi động trình môi giới

ở hai phía khách chủ bằng cách gọi lệnh:

Trang 25

KHỞI ĐỘNG ORB BẰNG DÒNG LỆNH

• Trong trường hợp ta không dùng các giá trị mặc định củaORB thì ta có thể khởi tạo các đối số cho ORB từ dònglệnh như sau:

Trang 26

KHỞI ĐỘNG ORB TRONG MÃ LỆNH

• Ta có thể chỉ định các tùy chọn để ORB khởi động ngay trong mã lệnh như sau:

• Trong trường hợp ta chỉ định cả hai tùy chọn là vừa từ tham số dòng lệnh và vừa từ mã lệnh thì ORB sẽ ưu tiên lấy các tùy chọn do mã lệnh thiết lập

Trang 28

JNDI & DỊCH VỤ NAMING TRONG RMI

• Khi muốn sử dụng một đối tượng nào đó, ta phải biết têncủa đối tượng và nơi mà đối tượng đó được cất giữ

• Mỗi dịch vụ quản lý tên đều quy định cách thức để lưu trữ

và gắn tên cho các đối tượng Dịch vụ quản lý tên cũngcung cấp cách thức tìm kiếm và đặt tên cho đối tượng mộtcách nhất định

• Java đặc tả một tập hợp các hàm API dùng để phục vụcho việc quản lý, lưu tên và tìm kiếm các đối tượng Cáchàm API loại này được gọi là JNDI (Java Naming Directory Interface)

• JNDI chỉ đưa ra đặc tả ở dạng interface Các dịch vụ nàomuốn sử dụng JNDI thì phải cài đặt giao tiếp do Java qui định

Trang 29

JNDI & DỊCH VỤ NAMING TRONG RMI(tt)

• Dịch vụ Naming chỉ hỗ trợ cho các đối tượng RMI trongJava Naming có cách truy xuất đối tượng theo địa chỉdạng URL dựa vào tên đối tượng khi đăng ký

• Ví dụ, tên myhello được ràng buộc với đối tượng Hello

Trang 30

JNDI & DỊCH VỤ COS NAMING CỦA CORBA

• Cũng dựa vào đặc tả JNDI của Java nhưng CORBA xây dựng một cơ chế lưu trữ và tham chiếu của đối tượng khác với dịch

vụ Naming của RMI CORBA phân ra khái niệm Naming Context và Naming Component.

• Namning Context (đóng vai trò như một thư mục) là một đối tượng có khả năng dẫn tham chiếu đến một Naming Component hay một Naming Context khác.

• Naming Component (tương tự như một file): là một thành phần chứa tên, có khả năng ràng buộc tên với một đối tượng bất kỳ nào đó (và đối tượng này phải là đối tượng CORBA).

• Naming Component và Naming Context quan hệ với nhau theo cấu trúc hình cây tương tự như cấu trúc cây thư mục của hệ thống file Trình tnameserv.exe chính là dịch vụ lưu trữ theo cách này trong CORBA.

Trang 31

JNDI & DỊCH VỤ COS NAMING CỦA CORBA(tt1)

Object A

Tên ràng buộc của đối tượng

Trang 32

• Ta thấy Market là một Naming Context Nó cho phép tìm 3 thành phần khác là Stock, Shelf và Panel Trong đó Stock

và Shelf là hai Naming Context Stock chứa 2 thành phần

là Toys và Fruit Shelf chứa một thành phần mang tên làBook Đối tượng Object A được ràng buộc với Toys Đốitượng Object B với Fruit Đối tượng Object C bởi cả haiBook và Panel

• Nếu đứng từ Market tham chiếu đến Object A thì phải chỉ

Trang 33

• Tiến hành cài đặt một chương trình sau đây để lưu trữ cácđối tượng theo cấu trúc hình cây ở slide trên:

(xem trong nội dung các file kèm theo sau đây)

Generic.idl GenericServant.java NamingRegister.java NamingBrowse.java

Trang 34

PHẦN 7

LƯU ĐỊA CHỈ THAM CHIẾU CỦA

ĐỐI TƯỢNG CORBA Ở DẠNG CHUỖI

Trang 35

KỸ THUẬT STRING FIELD (IOR)

• Nếu thấy dịch vụ COS Naming của CORBA quá phức tạpthì vẫn còn cách truy xuất khác dễ dàng mà không cầnđến COS Naming

• CORBA cho phép chuyển đổi tham chiếu của một đốitượng trên máy chủ thành một chuỗi (String) Ta lưu chuỗinày thành tập tin và chuyển đến trình máy khách Trìnhmáy khách đọc nội dung của chuỗi sau đó khôi phục chuỗitrở lại thành tham chiếu của đối tượng Kỹ thuật này trongCORBA gọi là String field (còn có tên khác là IOR-Interoperable Object References)

Trang 37

THAM CHIẾU NGƯỢC (CALL BACK)

• Tham chiếu ngược là lời gọi từ trình chủ ngược về các đốitượng đặt trên máy khách Đối tượng CORBA cũng chophép ta thực hiện kỹ thuật này

• Sau đây ta sẽ viết lại các đối tượng RMI AtServer vàAtClient trong bài số 3 (nói về RMI) theo cách củaCORBA

• AtServer là đối tượng CORBA cài đặt trên máy chủ AtClient là đối tượng CORBA chạy trên máy khách Chương trình khách gọi AtServer trên máy chủ và gửitham chiếu của AtClient đến trình chủ AtServer sử dụngtham chiếu của AtClient để gọi ngược về trình khách

Trang 38

• Bước 1: Đặc tả đối tượng AtClient và AtServer bằng ngôn

ngữ IDL trong file ClientServer.idl

void registerClient(in AtClient c);

void callServerMethod(in string message);

}

• biên dịch ClientServer.idl:

idlj -fserver ClientServer.idl idlj -fclient ClientServer.idl

Trang 39

BÀI VÍ DỤ VỀ CALLBACK (STEP 2)

• Bước 2: Cài đặt 2 giao tiếp AtClient và AtServer thành 2 đối tượng CORBA là AtClientServant và AtServerServant

Trang 40

• Bước 3: Xây dựng trình chủ để cài đặt và đăng ký đối

tượng AtServer trên máy chủ

public static void main(String args[]) throws Exception{

System.out.println(“CORBA Callback demo”);

//khởi động trình môi giới

ORB orb=ORB.init(args,null);

//Tạo đối tượng AtServer

AtServer servant=new AtServerServant();

//Kết nối đối tượng AtServer với trình môi giới

orb.connect(servant);

//đăng ký tên đối tượng với dịch vụ COS Naming

org.omg.CORBA.Object nameService = orb.resolve_initial_references(“NameService”);

Trang 41

BÀI VÍ DỤ VỀ CALLBACK (STEP 3 tt)

• Bước 3: (tiếp theo)

Trang 42

• Bước 4: Cài đặt trình khách, gọi đối tượng AtServer trên

//Tạo đối tượng AtClient

AtClientServant clientservant=new AtClientServant();

//Kết nối đối tượng AtClientServant với trình môi giới

orb.connect(clientservant);

//nhờ COS Naming tìm tham chiếu AtServer qua tên gọi AtServerObject

org.omg.CORBA.Object nameService = orb.resolve_initial_references(“NameService”);

Trang 43

BÀI VÍ DỤ VỀ CALLBACK (STEP 4 tt)

• Bước 4: (tiếp theo)

Trang 44

• Bước 5: Biên dịch và chạy chương trình Ta tạo thư mục

C:\CORBA\callback Lưu tất cả mã nguồn vào thư mụcnày Chuyển vào thư mục biên dịch và chạy chương trìnhnhư sau:

Trang 45

PHẦN 9

CÁC VẤN ĐỀ KHÁC

Trang 46

– Visibroker của hãng Borland

Xem trong Chương Ba, sách “Java tập 2”, tác giả Phương Lan, NXB Thống Kê, năm 2004.

Trang 47

BÀI 4

Ngày đăng: 04/12/2015, 07:39

HÌNH ẢNH LIÊN QUAN

Bảng ánh xạ giữa IDL và Java: - Bài giảng lập trình ứng dụng mạng  bài 4   GV  võ tấn dũng
ng ánh xạ giữa IDL và Java: (Trang 6)

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w