Chương 1
Tổng quan về Corba
I. Lịch sử ra đời của Corba
Nếu bạn là một lập trình viên, bạn sẽ hiểu được công việc nặng nhọc khi phải
viết mã lệnh cho chương trình. Cách thiết kế chương trình theo mô hình thủ tục
( top-down procedural hay thủ tục trên-xuống) dần dần được thay thế bằng mô
hình hướng đối tượng khoa học và hiệu quả hơn.
Lập trình hướng đối tượng đã chứng minh tính đúng đắn và sức mạnh của
nó trong việc thiết kế các hệ thống lớn cũng như dễ dàng trong việc nâng cấp và
bảo trì mã lệnh. Ngày nay, hầu như mọi ngôn ngữ lập trình đều hỗ trợ và thấm
nhuần tư tưởng đối tượng. Mở đầu là Smalltalk, C++, Object Pascal, Delphi,
Visual Basic tiếp đến là các hệ quản trị cơ sở dữ liệu Visual Foxpro, Access,
SQLserver, Oracle… và như bạn đã thấy Java là ngôn ngữ ra đời sau nhưng lại
thuần đối tượng nhất. Trong Java mọi thứ, mọi nơi, mọi khái niệm đều qui về đối
tượng.
Tuy nhiên lại nảy sinh một bất đồng lớn giữa các ngôn ngữ lập trình. Đó là
các đối tượng thiết kế bằng ngôn ngữ nào thì sau khi biên dịch ra mã nhị phân
(binary) chỉ có mã lệnh tương ứng của ngôn ngữ đó mới có khả năng truy xuất
được đối tượng. Đối tượng viết bằng C++ không dễ dàng truy xuất được từ mã
lệnh Delphi hay Visual Basic một cách tự nhiên. Ngay cả đối tượng viết bằng
Java cũng khó lòng gọi được từ các ngôn ngữ lập trình khác (mặc dù đã có một số
kỹ thuật như sử dụng thư viện liên kết động DLL, gọi các hàm thư viện native…
nhưng đó không phải là giải pháp toàn vẹn).
Java ra đời với mong muốn các ứng dụng hay đối tượng viết bằng Java có
thể chạy được mọi lúc mọi nơi trên mọi hệ điều hành (và cho đến nay có thể nói
Sun Microsystem hầu như đã thực hiện được mong ước của mình với sự nổi tiếng
của Java). Tuy nhiên, Java không thể thay thế các ngôn ngữ lập trình khác được.
Không thể bắt mọi lập trình viên trên thế giới đều chuyển sang viết Java trong khi
có hàng trăm triệu dòng mã lệnh của chương trình cũng như thư viện đã được
thiết kế và xây dựng từ các ngôn ngữ “tiền bối” khác (điển hình là C/C++ hay
Pascal) đang hoạt động rất hiệu quả.
Tuy nhiên các nhà lập trình luôn mong muốn tìm được tiếng nói chung cho tất
cả các ngôn ngữ lập trình hiện có. Và thế là Corba ra đời.
Corba đã được coi như là “quốc tế ngữ” trong giới ngôn ngữ lập trình.
II.Corba là gì?
CORBA, hoặc là Common Object Request Broker Architecture (tạm dịch là
Kiến trúc môi giới gọi các đối tượng thông dụng), là một kiến trúc chuẩn cho các
hệ đối tượng phân tán. Nó cho phép một tập các đối tượng hỗn hợp, phân tán siêu
tương tác với nhau.
1
1.OMG
OMG (Object Management Group) là một tổ chức quốc tế được
hình thành từ hơn 700 công ty và tổ chức khác nhau, bao gồm hầu hết các nhà
phát triển, các đại lý chính của công nghệ đối tượng phân tán; bao gồm platform,
cơ sở dữ liệu, và các nhà cung cấp ứng dụng cũng như công cụ phần mềm và các
nhà phát triển hợp nhất.
2. Các mục tiêu, đặc trưng thiết kế CORBA:
2.1.Các mục tiêu của Corba:
Khi xây dựng kiến trúc Corba, các nhà thiết kể mong đáp ứng được một số những
đặc điểm sau:
Khả năng độc lập về:
-
Nền phần cứng (hardware platform).
-
Ngôn ngữ lập trình.
-
Hệ điều hành.
-
Môi giới yêu cầu đối tượng cụ thể.
-
Thứ bậc của phân tán đối tượng.
Tính trong suốt trong liên kết của Corba:
-
Định vị đối tượng trong suốt.
-
Cho phép các đối tượng tạo ra các lời triệu gọi và nhận kết quả trả lại một
cách trong suốt.
-
Tương tác với các đối tượng từ xa giống như đối tượng cục bộ:
Giữa các host khác nhau.
+ Các môi trường phân tán không đồng bộ.
-
Corba sử dụng cơ chế môi giới yêu cầu đối tượng ORB để định vị các đối
tượng.
Corba kiến trúc mở: Tại sao?
-
IDL – Ngôn ngữ định nghĩa giao diện hạt nhân ngôn ngữ trong CORBA.
-
Định nghĩa giao diện IDL được các ngôn ngữ phát triển ứng dụng như C+
+, Java,… sử dụng để triệu gọi các đối tượng từ xa như ngôn ngữ, nền –
platform và trong suốt trong định vị đối tượng. ( Các ngôn ngữ từ xa có thể
không được cài đặt ngôn ngữ giống như các đối tượng cục bộ).
Tính đồng nhất: Các đối tượng của Corba có tính đồng nhất:
-
Server Corba có thể chứa nhiều giao diện với nhiều trường hợp.
2
-
Tham chiếu đối tượng xác định một trường hợp cụ thế.
Tham chiếu đối tượng Corba có thể thực hiện liên tục:
-
Một số đối tượng Corba chỉ tồn tại nhất thời và chỉ được sử dụng bởi một
Client.
-
Một số đối tượng Corba có thể được chia sẻ và tồn tại lâu dài theo quy
trình nghiệp vụ và chính sách được quyết định khi đóng gói “destroy” đối
tượng.
Các đối tượng của Corba có thể định vị (cấp phát) lại:
-
Tham chiếu đối tượng không quan tâm đến vị trí của đối tượng.
-
Đối tượng Corba có thể được định vị lại bởi Amid hoặc chạy lại chương
trình.
-
Thực thi Corba có thể hỗ trợ giao dịch được định vị lại.
Corba hỗ trợ để các đối tượng phục hồi, sao chép lại khi cùng tham chiếu đối
tượng giống nhau trên các vùng nhớ khác nhau.
2.2.Đặc trưng thiết kế CORBA:
IDL-interface
Object
CORBA làm việc với giao diện:
-
Tất cả các đối tượng Client chỉ có thể truy cập đối tượng CORBA thông
qua giao diện.
-
Sự phân chia giữa các Interface và các implementation cho phép tạo ra đa
các thực thi –implementations cho một giao diện.
Đặc trưng Server CORBA:
-
Khi nói đến server ta phải rằng đang nói đến quy trình trên server chứ
không phải máy server.
-
Một hoặc nhiều quá trình server CORBA có thể chạy trên cùng một máy.
-
Mỗi quá trình server CORBA chứa một hoặc nhiều trường hợp về đối
tượng CORBA, một hoặc nhiều giao diện CORBA.
3
Process A
Process B
Process C
Machine X
Machine Y
Đối tượng Corba có thể định vị đến các quá trình, trong quá trình khác nhau
trên cùng một máy hoặc các quá trình khác nhau trên những máy khác nhau.
3.Kiến trúc CORBA
CORBA định nghĩa một kiến trúc cho các đối tượng phân tán. Mô hình
CORBA cơ bản đó là một yêu cầu dịch vụ của một đối tượng phân tán. Mọi thứ
khác được định nghĩa bởi OMG là dưới dạng mô hình cơ bản này.
Các dịch vụ mà một đối tượng cung cấp được định nghĩa bởi giao tiếp
(interface) của nó. Các giao tiếp được định nghĩa trong Interface Definition
Language (IDL) của OMG. Các đối tượng phân tán được xác định bởi các tham
chiếu đối tượng, được định kiểu bởi các giao tiếp IDL.
Trong kiến trúc chung Corba thì ORB (Object Request Broker) là thành phần
trọng tâm và hạt nhân. ORB được coi là highway ( xa lộ hay còn gọi là băng
thông) thực thi tất cả các vấn đề truyền thông của CORBA.
Khi một ứng dụng Client muốn sử dụng dịch vụ do Server cung cấp cần:
-
Thứ nhất: thực hiện được tham chiếu đến đối tượng trên Server cung cấp.
-
Thứ hai: xử lý các yêu cầu tham chiếu đối tượng, cho phép các thành phần
ứng dụng kết nối lẫn nhau.
Nói chung nhiệm vụ của ORB là:
-
Sắp xếp thứ tự dữ liệu.
-
Quản lý định vị đối tượng.
-
Truyền tải yêu cầu đến đối tượng trên Server.
-
Trả lại kết quả cho Client.
4
Naming
Service
IDL
compiler
Interface
Repository
Implementation
Repository
Client
Object
Implementation
IDL
skel
DLL
IDL
stubs
ORB
interface
DSI
Object
adapter
ORB Core
GIOP/IIOP
Kernel
Kernel
I/O subsystem
I/O subsystem
Network
Adapters
Network
Adapters
Network
Hình sau biểu diễn một yêu cầu. Một client giữ một tham chiếu đối tượng đến
một đối tượng phân tán. Tham chiếu đối tượng được định kiểu bởi một giao tiếp.
Trong hình dưới thì tham chiếu đối tượng được định kiểu bởi giao tiếp Rabbit.
Object Request Broker (ORB), đưa yêu cầu đến đối tượng và trả về một số kết
quả cho client. Trong hình yêu cầu jump trả về một tham chiếu đối tượng được
định kiểu bởi giao tiếp AnotherObject.
Hình 1: Kiến trúc một yêu cầu cơ bản của CORBA.
4. IDL(Interface definition language - Ngôn ngữ định nghĩa giao diện).
4.1. Sơ lược về IDL:
5
Interface: giao diện cho một đối tượng, được định nghĩa bằng ngôn ngữ IDL.
Các đối tượng của ngôn ngữ lập trình tuân theo đặc tả Idl thì được xem như là
các đối tượng Corba.
IDL được coi như là ngôn ngữ chương trình độc lập và chỉ chứa các mô tả dữ
liệu. Nó là ngôn ngữ chung của chương trình phần mềm.
Ví dụ ứng dụng IDL:
Struct resultStatus
int status; // trạng thái
string result; ; //kết quả
struct Content
string YourMission;//nội dung cần học
string IDUniver;//trường đã học
string Major;//chuyên ngành
string Certificate;//bằng cấp
string Gramark;//xếp loại bằng
int Grayear; // năm tốt nghiệp
interface ContentProvider
exception NoServer string message;;
::ResultStatusHandleTransaction
( inout::ContentTransaction);;
Server
Skeleton
Compile IDL
Client
Stub
IDL
description
translator
Call
procedure
translator
Client
Stub
Server
Stub
Result
Result
Reply
request
Transport
Layer
Hình 2:
Call
procedure
Reply
Transport
Layer
Ngôn ngữ đặc tả IDL dịch sang ngôn ngữ lập trình
6
Phía Client được che đi các chi tiết cài đặt của các đối tượng. Việc thay đổi cài
đặt object sẽ không làm thay đổi ở phía client.
Clinet và server độc lập với kiến trúc và bus Corba. Để có được sự độc lập đó,
các mô tả IDL sẽ được tham chiếu sang các môi trường lập trình (stub và
skeleton).
Client sử dụng các stub cục bộ để truy nhập đến các đối tượng.
Các stub cho phép xây dựng các lời gọi đến các skeleton thông qua môi trường
truyền dẫn là bus Corba.
Phía skeleton sẽ tiếp nhận các lời gọi này và gửi đến các object cục bộ.
4.2. Các khái niệm cơ bản:
-
Tên tệp: *.IDL
-
Dẫn hướng biên dịch giống như C++: #include, #define, #ifdef …#endif
-
Chú thích giống C++: /*…*/ và //…
Tên (identifier): tên bắt đầu bằng chữ thông thường, tuy nhiên khi đã được
định nghĩa thì phải dùng thống nhất.
-
Từ khóa là những chữ thường.
Modules
Module là một khối có tên cho phép nhóm các tên lại trong cùng một
không gian tên ( tương tự như namespace trong C++):
module Mymodule
{
// các định nghĩa IDL
// hoặc các module con
};
-
Các module có thể được mở lại (trong cùng một tệp hoặc trong tệp khác)
-
Phạm vi của các tên giống như trong cấp phân cấp các module.
-
Một tên có thể được định nghĩa lại trong các module con.
-
Tên có thể được truy nhập từ bên ngoài thông qua toán tử :: như trong C++
Ví dụ:
Module Module1
{ typedef long Longmod_1;
module Module_1
7
{ typedef short Intmod_1_1;
};
module Module1_2
{ typedef Module1_1::TypeInt_1_1 Intmod1_2;
};
module Module1_1
{ typedef Longmod_1 Longmod_1 _1;
};
};
….
module Module1
{mở lại Module1
…
}
Các kiểu dữ liệu cơ bản:
Bảng sau đây miêu tả chi tiết các đặc điểm của các kiểu dữ liệu cơ sở:
Type
values
Size (en bits)
Short
-3278…+3278
16 bits có dấu
Long
-211…+211-1
32 bít có dấu
Unsigned short
0…65535
16 bít không dấu
Unsigned long
0…212-1
32 bít không dấu
Float
IEEE single
32 bít
Double
IEEE double
64 bít
Octet
0…255
8 bít
Char
ISO-latinh
8 bít
8
Wchar
International format
String
ISO –latinh
Variable
Wstring
International format
Variable
Boolean
True or false
Không xác định
Khai báo const và typedef:
Sequence
Sequence định nghĩa một dãy các giá trị cùng kiểu, có thể bị chặn hoặc
không:
sequence
sequence
Ví dụ:
Typedef sequence dayso;
-
Có thể định nghĩa các sequence lồng nhau:
Typedef sequence>matran;
Kiểu mảng:
-
Kiểu mảng định nghĩa một dãy đúng N phần tử:
Type
identifiant[N];
Type
identifiant[N1] [N2]…[Nn]
Ví dụ:
Typedef float [100] [100] matrixA;
Trong thực tế ta nên hạn chế sử dụng kiểu mảng trong IDL do thiếu tính
linh động và gặp nhiều khó khăn khi ánh xạ snag một vài ngôn ngữ khác chẳng
hạn như C++
Unions (kết hợp)
Ví dụ:
union ParametreOptionnels switch(boolean)
9
{ case true: string value1;
case false: short value2;
};
Trong thực tế nên tránh sử dụng union do:
-
Khó khăn khi tham chiếu sang các ngôn ngữ khác.
-
Không theo quan điểm hướng đối tượng.
Interfaces:
Cách khai báo:
Interface NomInterface : Parent1, parent2 {…};
Interface NomInterface {
// định nghĩa các:
// - constants
//- types
//- exceptions
//- attributes
//- operations
};
Exceptions
Cách khai báo:
Exception nomexception
{
type1 member1;
type2 member2;
…..
typen membern;
};
Ví dụ:
Exeption divisionbyzero{};
10
Attributes
Cách khai báo:
attribut Type nomAttribut;
readonly attribute Type nomAttribut;
Trong thực tế ta nên tránh khai báo các thuộc tính vì :
Việc truy nhập đến một thuộc tính (sửa đổi) không thể tạo ra một
exception của người sử dụng.
Định nghĩa các thuộc tính trong interface không phải là cách tiếp cận
hướng đối tượng.
Inheritance:
Ví dụ:
Interface fichier
{
void lire (out octet octetLu) ;
void ecrire(in octet octetEcrit) ;
};
Interface fichier_executable : fichier
{
short executer (in string argsList) ;
};
5. Ánh xạ giữa ngôn ngữ IDL và Java (IDL mapping to Java)
Đồ án này chủ yếu giúp bạn tìm hiểu Java nên tốt nhất là chúng ta hãy tìm hiểu
việc ánh xạ từ ngôn ngữ đặc tả IDL sang ngôn ngữ lập trình Java. Dưới đây là tập
các ánh xạ của ngôn ngữ IDL trong CORBA tương đương với các kiểu dữ liệu và
từ khoá có trong Java.
IDL CORBA
JAVA
Module
Package
Interface
Interface, helper class, holder class
Constant
Public static final
11
Boolean
Boolean
Char, wchar
Char
Octet
Byte
String, wstring
Java.lang.string
Short, unsigned short
Short
Long, unsigned long
Int
Long long, unsigned long long
Long
Float
Float
Double
Double
Enum, struct, union
Class
Sequence, array
Array
Exception
Class
Operation
method
Như vậy, IDL không có các cấu trúc điều khiển như if, while, do, for…IDL
chỉ là ngôn ngữ đặc tả. Trong ngôn ngữ đặc tả mọi việc diễn ra tương tự như khi
bạn khai báo biến, mô tả đối tượng, kiểu record… không cần phải có các cấu trúc
lệnh điều khiển.
Java cung cấp cho bạn công cụ dùng để chuyển đổi qua lại giữa khai báo CORBA
sang khai báo Java và ngược lại như sau:
lệnh
o
Để chuyển một lớp interface nào đó của java sang đặc tả IDL bạn dùng
rmic –idl YourObject.class
Để chuyển một đặc tả IDL sang khai báo interface tương ứng trong Java
bạn dùng lệnh
o
idlj YourObject.idl
rmic và idlj là hai chương trình .exe nằm trong thư mục [JAVA_HOME]\bin.
Ví dụ ánh xạ giữa CORBA và Java:
12
CORBA IDL
JAVA
Module {
Package Math;
interface Mathlibrary {
Public interfaces
long add (
MathLibrary {
in long x,
Int add ( int x,
in long y );
long subtract (
Int y );
Int subtract ( int x,
in long x;
Int y );
in long y );
Int divide ( int x,
long divide (
in long x,
Int y );
Int multiple( int x,
in long y );
long multiple (
Int y );
string About (
in long x,
in long y );
string version );
}
string About (
in string version );
};
Như vậy khái niệm package trong Java tương đương với module trong
CORBA. CORBA đưa ra từ khoá in cho các biến truyền vào phương thức theo trị
(tương tự từ khoá out dùng để lấy trị trả về).
13
Chương 2. Corba và công nghệ lập trình phân tán
I.Tổng quan về hệ phân tán.
Hệ phân tán trong đó các chức năng và dữ liệu được phân tán trên nhiều trạm,
được kết nối với nhau thông qua một mạng máy tính.
Hoặc có thể nói:
Hệ phân tán bao gồm tập các máy tính tự trị được nối với nhau bởi mạng máy
tính và các thiết bị được cái đặt phần mềm được thiết kế để cung cấp một môi
trường tích hợp và nhất quán (phần mềm của hệ phân tán).
Hình 3: Kiến trúc cơ bản của hệ phân tán.
Hệ phân tán cho phép con người có thể hợp tác, phối hợp các hoạt động một cách
mềm dẻo và hiệu quả. Mục tiễu chính của hệ phân tán có thể được thể hiện thông
qua: chia sẻ tài nguyên( resource sharing), tính mở (openness), tính đồng
thời(concurency), khả năng mở rộng (scalability),tính chịu lỗi (faul-tolerance),
tính trong suốt (transparency)
Chia sẻ tài nguyên: trong hệ phân tán, phần cứng, phần mềm, dữ liệu có thể được
chia sẻ dễ dàng giữa nhiều người sử dụng. Tài nguyên được thiết kể tập trung
hoặc phân tán; tương tác theo kiến trúc client-server. Tài nguyên được tổ chức
thành các đối tượng và đựoc định danh duy nhất trong hệ thống.
Một số ưu điểm của hệ phân tán:
1.Tính mở.
Khả năng bổ sung, mở rộng phần cứng, các chức năng mới không ảnh hưởng tới
các phần khác trong hệ thống cũ.
14
2.Tính tương tranh.
Nhiều tính trình cùng tồn tại trên một máy tính đơn gọi là tính tương tranh. Ở một
hệ phân tán rất dễ xảy ra xử lý song song là do:
- Nhiều người sử dụng đồng thời gọi các lệnh, cùng tương tác với chương trình
ứng dụng.
- Nhiều tiến trình chạy trên server mỗi tiến trình xử lý một yêu cầu.
Các truy cập, cập nhật tương tranh phải được thống nhất.
3.Khả năng mở rộng.
Khả năng mở rộng quy mô hệ thống một cách dễ dàng mà phải thay đổi hệ thống
cũ một cách ít nhất. Đây là đặc tính quan trọng trong quá trình phát triển nhanh
của mạng interNetwork.
4.Tính chịu lỗi.
Các hệ thống đôi khi bị lỗi, lỗi xảy ra có thể do phần cứng hay phần mềm dẫn đến
chương trình có thể chạy sai hoặc dừng trước khi hoàn thành yêu cầu.
Tính chịu lỗi cho phép phần vẫn có thể hoạt động được khi xảy ra các lỗi nhỏ,
tính chịu lỗi luôn đi kèm với phục hồi dữ liệu đó là yêu cầu phục hồi dữ liệu trong
thời gian sơm nhất.
Thiết kế hệ thống mày tính có khả năng chịu lỗi có hai cách tiếp cận:
- Tăng độ dư thừa tại nguyên: Giải pháp này tăng độ đề phòng của hệ thống khi
xảy ra lỗi.
- Giải pháp phần mềm: Phầm mềm có khả năng sao lưu một cách thường xuyên,
có khả năng phát hiện lỗi và sửa lỗi sớm.
Hệ phân tán cung cấp mức độ cao của tính thường trực trong khả năng chịu lỗi
phần cứng. Khi một trạm bị hỏng người sử dụng có thể di chuyển tới trạm khác
để làm việc.
5.Tính trong suốt.
khả năng che dấu sự rời rạc của hệ thống. Hệ thống ISO chỉ ra có 8 loại trong
suốt:
- Trong suốt lỗi
- Trong suốt truy cập
- Trong suốt tương tranh
- Trong suốt định vị
- Trong suốt lặp.
- Trong suốt di trú.
15
- Trong suốt mở rộng.
Nhược điểm của hệ phân tán
Tính phức tạp: Hệ phân tán phức tạp hơn hệ tập trung
Tính bảo mật: Hệ phân tán dễ bị tấn công từ bên ngoài
Khả năng quản lý: Hệ phân tán đòi hỏi hệ quản lý hiệu quả
Không dự đoán trước: Không thể biết được những phản hồi do tổ chức hệ thống
và mạng trả về.
II. Corba và mô hình phân tán
1. Chương trình môi giới trung gian ORB( Object Request Broker)
Java dựa vào máy ảo để tạo nên tiếng nói chung giữa tất cả ứng dụng viết bằng
ngôn ngữ Java. Tương tự Corba cũng cần có một nền tảng để liên kết các đối
tượng. Các đối tượng sau khi được xây dựng bằng những ngôn ngữ lập trình khác
nhau muốn triệu gọi được nhau phải thông qua trình môi giới trung gian của
Corba gọi là ORB (Object request broker : Trình môi giới các yêu cầu của đối
tượng).
ORB là một dịch vụ phân tán thực thi yêu cầu đến các đối tượng ở xa. Nó định
vị đối tượng ở xa trên mạng, gửi yêu cầu đến đối tượng, chờ kết quả và khi sẵn
sằng thì gửi các kết quả này trở lại cho client.
ORB thực thi vị trí trong suốt. Chính xác là cơ chế yêu cầu giống nhau
được sử dụng bởi client và đối tượng CORBA mà không quan tâm đến vị trí của
đối tượng. Nó có thể nằm trong một bộ xử lí với client, hoặc ở bất kì nơi nào.
ORB thực thi các ngôn ngữ lập trình độc lập với các yêu cầu. Client đưa ra
một yêu cầu được viết bởi một ngôn ngữ lập trình có thể khác với ngôn ngữ lập
trình viết trong đối tượng CORBA. ORB thực hiện việc dịch cần thiết giữa các
ngôn ngữ lập trình. Các liên kết ngôn ngữ được định nghĩa cho tất cả các ngôn
ngữ lập trình thông dụng.
Hình 3 là cơ chế triệu gọi lẫn nhau của các đối tượng viết bằng C++, Delphi,
Java thông qua ORB.
Như vậy cụ thể thì ORB gọi được phương thức của các đối tượng cài đặt bằng
các ngôn ngữ khác nhau như thế nào? Đó là nhờ ngôn ngữ đặc tả IDL mà ta đã
tìm hiểu ở trên. Các đối tượng cho dù được cài đặt bằng bất kì ngôn ngữ nào nếu
như tuân thủ theo đặc tả IDL đều được xem là đối tượng CORBA. Tuy không cài
đặt bản thân đối tượng nhưng dựa vào đặc tả IDL ORB sẽ biết được tên phương
thức cần gọi, kiểu đối số truyền cho phương thức, trị trả về của phương thức gọi.
Với những thông tin này, ORB có thể triệu gọi phương thức mà đối tượng cài đặt
(Hình 4). ORB là hoàn toàn trong suốt (transparent) với lập trình viên (hay người
16
sử dụng đối tượng). Bạn gọi đối tượng của Java trong C++ hay Delphi hoàn toàn
theo cách tự nhiên như bạn gọi đối tượng được xây dựng từ chính ngôn ngữ gốc.
Mạng
Mạng
ORB
ORB
ORB
ORB
C++
C++
CORB
CORB
AA
Object
Object
Java
Java
CORB
CORB
AA
Object
Object
ORB
ORB
Delphi
Delphi
CORB
CORB
AA
Object
Object
Hình 4 : Triệu gọi đối tượng CORBA thông qua trình môi giới ORB.
Khả năng “trong suốt” không chỉ giới hạn giữa các đối tượng trên cùng một
máy mà còn được mở rộng giữa các đối tượng nằm ở bất kỳ đâu trên thế giới
thông qua kết nối mạng. Đối tượng của bạn viết bằng Java đặt trên một máy tại
Việt Nam có thể được gọi bởi một đối tượng ở Châu Mỹ (“bên kia đại dương”)
cài đặt bằng C++.
Với khả năng trên, CORBA quả là mang lại điều kỳ diệu cho thế giới lập
trình. CORBA mở cửa để các lập trình viên có thể xích lại gần nhau hơn, tạo nên
một thể thống nhất của mô hình lập trình hướng đối tượng.
Mạng
Mạng
Internet
Internet
IDL
IDL
ORB
ORB
ORB
ORB
IDL
IDL
C++
C++
CORB
CORB
AA
Object
Object
Java
Java
CORB
CORB
AA
Object
Object
Hình 5 : ORB giao tiếp với đối tượng thông qua các thông tin đặc tả IDL.
17
2. 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 RMI. Thật sự _Stub và _Skel là hai lớp trung gian
được sinh ra từ trình biên dịch dựa vào đặc tả IDL. Bạn không cần phải viết mã
lệnh cho lớp _Stub và _Skel. Đây là công việc của các nhà cung cấp và thiết kế
ORB. Hình 6 là cơ thế hoạt động của trình môi giới ORB liên lạc giữa trình khách
và đối tượng CORBA trên máy chủ. Thường thì việc cài đặt đối tượng CORBA
trên máy chủ và triệu gọi đối tượng từ trình khách được thực hiện như sau:
Phần cài đặt đối tượ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ể (chẳng hạn dùng trình
biên dịch idlj.exe để chuyển đặc tả của đối tượng 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 Java.
Phần kết nối với đối tượng từ 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. Tuỳ 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. Ví dụ nếu bạn muốn viết trình khách bằng ngôn ngữ C++ bạn
có thể dùng trình biên dịch idl2cpp.exe để tạo ra lớp _Stub dành cho chương trình
C++ triệu gọi đối tượng CORBA.
Khi trình khách triệu gọi đối tượng chủ, thực tế lời gọi sẽ được 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 thì đối
tượng thì đối tượng CORBA trên máy chủ sẽ thực thi phương thức của nó.
Java
Java
CORB
CORB
AA
Object
Object
C++
C++
Client
Client
Lớp trung gian
Lớp trung gian
Stub
Stub
Lớp trung gian
Lớp trung gian
Skel
Skel
IIOP
ORB
ORB
18
ORB
ORB
Hình 6 : Giao tiếp giữa trình khách và đối tượng CORBA trên máy chủ.
3.Giao thức IIOP
Giao tiếp giữa ORB trên máy khách và ORB trên máy chủ được xây dựng dựa
trên giao thức mang tên IIOP (Interoperate Internet Object Protocol). Giao thức
này do tổ chức Corba đề xướng. Nó làm nền cho tất cả các đối tượng có thể trò
chuyện được với nhau trên mạng Internet một cách dễ dàng. Hiện nay giao thức
IIOP được dùng khá phổ biến thậm chí còn vượt trội hơn cả giao thức triệu gọi từ
xa RMI của Java (Java gọi giao thức RMI mà các máy ảo có thể dùng trò chuyện
được với các đối tượng ở xa là JRMP- Java Remote Method Protocol).
Java Enabled
Web Browser
HTTP
HTML &
Java Applet
Web server
Proxy server
HTML Document
Java Applet
IIOP
Naming serice
Distributed
Objects
Relational
Database
JDBC
ODBC
DBMS_
specific
Hình 7 : Truy cập Internet CORBA thông qua IIOP
19
4. Quá trình phát triển ứng dụng cơ bản sử dụng Corba :
- Cài đặt các interface (các đối tượng trên server) dựa trên việc kế thừa bộ
khung (skeleton) sinh ra bởi bộ dịch IDL.
- Việc phát triển của phía client bắt đầu dựa trên một tham chiếu (reference) đến
đối tượng. Việc gọi các method của các đối tượng từ xa cũng giống như khi gọi
các phương thức cục bộ.
Tuy nhiên cũng cần chú ý một số điểm khi gọi phương thức từ xa :
-
Thời gian gọi ( tính theo ms, 1000 lần chậm hơn khi gọi cục bộ).
- Việc giao tiếp giữa client và server sẽ phải tính đến các exception ( Các
exception này phải được phía client chấp nhận và xử lý).
IDL
defs
IDL
compile
r
Stubs
Skeletons
Java
Client
prog
compile
r
Client
program
Object
impl
Server
program
Stub
Skeleton
ORB
Hình 8 : Quá trình phát triển ứng dụng Corba.
20
- Xem thêm -