Mục Lục
I. Giới thiệu về CORBA
CORBA, viết tắt của Common Object Request Broker Architecture (Kiến trúc Môi giới Yêu cầu Đối tượng Chung), là một tiêu chuẩn mở cho phép các ứng dụng phần mềm được xây dựng bằng các ngôn ngữ và nền tảng khác nhau giao tiếp với nhau. Nó hoạt động như một ngôn ngữ đặc tả, tập hợp các điểm chung của các ngôn ngữ lập trình để các đối tượng có thể triệu gọi và sử dụng lẫn nhau.
Ngôn ngữ Đặc tả Giao tiếp (IDL)
CORBA sử dụng Interface Description Language (IDL) để mô tả các giao diện giữa các đối tượng. IDL là ngôn ngữ trung lập, có nghĩa là các giao diện IDL có thể được thực hiện bằng bất kỳ ngôn ngữ nào như Java, C, C++, v.v.
Ví dụ, để đặc tả đối tượng Calculator, ta có thể sử dụng IDL như sau:
interface Calculator {
long addNumber (in long x, in long y);
};
Sau đó, có thể chuyển đổi file đặc tả này sang các ngôn ngữ lập trình khác bằng các công cụ như idl2cpp
(cho C++) hoặc idlj
(cho Java).
Kết quả của việc chuyển đổi sang Java sẽ là:
public interface CalculatorOperations{
int addNumber(int x, int y);
} //interface CalculatorOperations
Mô tả giao diện thành phần CORBA và các cổng
CORBA cung cấp các từ khóa như in
cho các biến truyền vào theo trị và out
để lấy trị trả về.
II. Mô Hình Thành Phần CORBA (CCM)
Mô hình thành phần CORBA (CCM) là một đặc tả thành phần gần đây nhất được phát triển và hoàn thiện bởi Object Management Group (OMG). Nó được thiết kế dựa trên kinh nghiệm sử dụng các dịch vụ CORBA, JavaBeans và EJB.
CCM tập trung vào việc giúp các nhà phát triển ứng dụng dễ dàng ghép nối các mô-đun có sẵn, đồng thời chú trọng đến thiết kế, lắp ráp và triển khai thành phần. Mục tiêu chính của CCM là cung cấp giải pháp cho sự phức tạp của CORBA và các dịch vụ của nó.
Thành phần trong CCM
Trong CCM, một thành phần là một đơn vị mã phần mềm độc lập, bao gồm dữ liệu và logic của nó, cùng với định nghĩa về các kết nối hoặc giao diện tiếp xúc rõ ràng để liên lạc. Nó được thiết kế để có thể sử dụng lặp lại trong phát triển ứng dụng, có hoặc không có các tùy biến.
III. Giao diện và Sự Nối Ghép
Giao diện của một thành phần trong CCM là một phần mở rộng của ngôn ngữ CORBA IDL truyền thống. Một giao diện thành phần được tạo thành từ các cổng. Thành phần được xem như một hộp đen, và giao diện chỉ là các điểm truy cập đến thành phần. Các cổng là các đặc tính bên ngoài mà khách hàng và các thành phần khác trong môi trường ứng dụng có thể tương tác với thành phần.
Các Loại Cổng Chính trong CCM
CCM hỗ trợ bốn loại cổng chính:
-
Facets: Giao diện được cung cấp bởi thành phần cho các tương tác của bên khách hàng.
-
Receptacles: Điểm kết nối mô tả khả năng của thành phần sử dụng sự tham khảo được hỗ trợ bởi một vài tác nhân bên ngoài.
-
Event sources: Điểm kết nối phát ra các sự kiện tới một hoặc nhiều sự kiện người dùng quan tâm hoặc tới một kênh sự kiện.
-
Event sinks: Điểm kết nối vào mà sự kiện có thể được đẩy vào.
CCM xem các cổng như các biến được đặt tên và đặt kiểu. Các thành phần được đặt kiểu và có thể kế thừa từ các thành phần khác.
Đặc tả CCM bằng ngôn ngữ IDL
Thành phần: Sử dụng từ khóa component
. Giao diện được hỗ trợ bởi các thành phần có thể kế thừa từ một số giao diện người dùng tự định nghĩa, sử dụng từ khóa supports
.
Ví dụ:
interface Clock {
Time getTime ();
void ResetTime (in Time t);
};
component Car supports Clock {};
Facets: Tương ứng với giao diện được cung cấp bởi một thành phần. Sử dụng từ khóa provides
.
Ví dụ:
module motors {
interface Engine{};
interface Panel {};
component Car supports Clock{
provides Engine _engine;
provides Panel _panel;
};
};
Receptacles: Tương ứng với giao diện được yêu cầu bởi thành phần trong một môi trường nhất định. Sử dụng từ khóa uses
.
- Receptacle đơn: Có thể kết nối đến một đối tượng.
Ví dụ:
interface Customer {};
component Account {
uses Customer owner;
};
- Nhiều receptacle: Có thể kết nối với nhiều đối tượng.
Ví dụ:
component Account {
usesmultiple Customer owner;
};
Event Sources: Sử dụng từ khóa publishes
(chấp nhận kết nối 1-n) hoặc emits
(chấp nhận kết nối 1-1).
Ví dụ:
module stockbroker {
eventtype AlertSignal{
public string reason;
};
component Broker {
publishes AlertSignal alert_source;
};
};
module stockbrocker {
eventtype StockLimit {
public long stock_value;
};
component Broker {
emits StockLimit limitAlert;
};
};
Event Sinks: Sử dụng từ khóa consumes
.
Ví dụ:
module stockbrocker {
eventtype AlertSignal {
public string reason;
};
component Trader {
consumes AlertSignal alert_sink;
};
};
Điều kiện kết nối
Để các thành phần trong CCM có thể kết nối được với nhau, các cổng của chúng phải thỏa mãn các điều kiện sau:
-
Facet chỉ có thể kết nối với receptacles (cổng
provides
chỉ kết nối với cổnguses
). -
Event source chỉ có thể kết nối với event sinks (cổng
publishes
vàemits
chỉ có thể kết nối với cổngconsumes
). -
Mỗi cổng
provides
(facet) có thể kết nối với nhiều cổnguses
(receptacles), mỗi cổngpublishes
có thể kết nối với nhiều cổngconsumes
nhưng không thể ngược lại. -
Mỗi cổng
emits
chỉ có thể kết nối với một cổngconsumes
. -
Với mỗi một cặp cổng đã được kết nối, kiểu của cổng cung cấp (facets, event sources) là kiểu con của một trong những cổng yêu cầu (receptacles, event sinks).
IV. Kết luận
CORBA và CCM cung cấp một nền tảng mạnh mẽ để xây dựng các ứng dụng phân tán có khả năng tương tác cao. Bằng cách sử dụng IDL để định nghĩa các giao diện và CCM để quản lý các thành phần, các nhà phát triển có thể tạo ra các ứng dụng linh hoạt, có khả năng tái sử dụng và dễ bảo trì. Tiêu chuẩn này cho phép các hệ thống phần mềm tận dụng các thành phần từ nhiều nguồn khác nhau, giảm chi phí phát triển và tăng tốc độ triển khai.