CORBA và Mô Hình Thành Phần CORBA: Tổng Quan Chi Tiết

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ổngMô 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ổng uses).

  • Event source chỉ có thể kết nối với event sinks (cổng publishesemits chỉ có thể kết nối với cổng consumes).

  • Mỗi cổng provides (facet) có thể kết nối với nhiều cổng uses (receptacles), mỗi cổng publishes có thể kết nối với nhiều cổng consumes 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ổng consumes.

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