You are on page 1of 46

KHOA CÔNG NGHỆ THÔNG TIN

BỘ MÔN CÔNG NGHỆ PHẦN MỀM

PHÁT TRIỂN PHẦN MỀM HƯỚNG CẤU PHẦN


(Component – Oriented Programming)
Chương 4: COP & Corba

 Giới thiệu CORBA


 Kiến trúc CORBA
 Các thành phần CORBA
 Bắt đầu COP với HelloCORBA
 Các dịch vụ CORBA
 Các công cụ hỗ trợ CORBA
Đặt vấn đề
 Mô hình web hiện nay cho thấy thế mạnh của mô
hình Client – Server
 Xu hướng tập trung giải quyết vấn đề mà nguồn lực
là Server
 Các phần mềm viết trên các ngôn ngữ khác nhau
 Có cách nào để có thể kết nối Client – Server trong
khi mỗi máy triển khai trên một nền tảng ngôn ngữ
khác nhau?
Đặt vấn đề

CORBA
?

C++ Bus Object Delphi Moto Object

CORBA
? ? CORBA

Java Passenger Object


Giới thiệu CORBA
 Common Object Request Broker Architecture
 Được tạo ra bởi công ty Object Management Group
(OMG), có liên quan tới khoảng trên 800 công ty
khác nhau.
 Corba trợ giúp quá trình đặc tả các thành phần.
 Corba hỗ trợ tốt cho các ứng dụng chạy trên mô
hình Client – Server.
 Với đặc tả Corba, các phần mềm chạy trên server
và Client có thể triển khai với nền tảng ngôn ngữ
lập trình khác nhau: Java, C++, Delphi…
CORBA 1.0
 Ra đời năm 1991. Đáp ứng nhu cầu xây dựng các
mô hình đối tượng phân tán.
 Bao gồm 2 thành phần cơ bản: IDL + API
 IDL = Interface Definition Language
 API trợ giúp việc gọi hàm từ xa trong mô hình phân
tán.
 Hỗ trợ BOA (Basic Object Adapter)
CORBA 2.0
 Ra đời năm 1996.
 Thay thế BOA bằng POA (Portable Object Adapter
– Bộ điều khiển đối tượng di động)
 Hỗ trợ giao thức Internet Inter-ORB Protocol (IIOP)
 Cho chép ánh xạ từ IDL sang C, Java, Delphi…
 Các công ty phần mềm lớn chú ý và hỗ trợ kĩ thuật:
+ SUN hỗ trợ công cụ: IDLJ – IDLtoJava
+ Microsoft hỗ trợ công cụ DCOM – Sau này được
thay thế bởi Dotnet Framework.
CORBA 3.0
 Là phiên bản cuối cùng của CORBA
 Chính thức hỗ trợ kiến trúc hướng thành phần
 Tích hợp CCM (CORBA Component Model)
 OpenCCM, MicoCCM, and EJB 3.0 là những công
cụ giúp triển khai các thành phần với CORBA.
 OpenCCM sẽ được giới thiệu trong phần sau.
Kiến trúc cơ bản CORBA
Kiến trúc cơ bản CORBA
 Object Request Braher (ORB)
 Object Adapter (OA)
 Stub and Skeleton
 Interface Repository (IR) and Implementation
Repository IR
 Object References (OR)
 Interface Definition Language (IDL) and Language
Mapping
Object Request Broker/Braher (ORB)
 Đối tượng trung gian xử lý yêu cầu.
 Chứa các thư viện và các xử lý định vị và kích hoạt
các đối tượng từ xa.
 Là tầng thấp nhất gắn kết máy chủ và máy trạm.
 Định vị đối tượng, gọi các phương thức được định
nghĩa thông qua giao diện.
 Nhận kết quả trả về từ máy chủ.
 ORB có cả trên máy chủ và máy trạm.
Mô hình ORB

C++
Corba Delphi
Object Corba
Object
ORB

ORB
Network

ORB

Java
Corba
Object
Kiến trúc kiểu ORB

Java
C++
Corba
Client
Object

Intermidiate class Intermidiate class


_Stub _Skel

IIOP
ORB ORB

Client Server
Object Adapter (OA)
 Bộ điều khiển các đối tượng.
 Chịu trách nhiệm nạp các thành phần cho máy chủ.
 OA gọi các hàm, tạo lập kích hoạt đối tượng thực
thi và hủy bỏ chúng.
 OA có 2 dạng là BOA và POA
 BOA có ở phiên bản 1, được thay thế POA ở phiên
bản 2.
Stub and Skeleton
 Được hiểu như là phụ tá của máy chủ và máy trạm.
 Stub và Skeleton sẽ có nhiệm vụ trao đổi dữ liệu
cho nhau.
 Khi máy trạm có yêu cầu, Stub có nhiệm vụ sắp đặt
mọi tham số (là object) và truyền lên máy chủ.
 Skeleton trên máy chủ sẽ giải mã đối tượng này và
xử lý.
 Một quá trình ngược lại với quá trình trên, dữ liệu
được trả về cho máy trạm.
 Kiên trúc hiện nay chỉ còn lại Stub
Interface Repository (IR) &
Implementation Repository IR
 Được hiểu là kho dữ liệu giao diện và kho triển khai
 IR bao gồm: Thông tin kiểu dữ liệu, phương thức và
các tham số được định nghĩa thông qua ngôn ngữ
IDL.
 Implementation Repository chỉ ra cách thức để kích
hoạt các thành phần máy chủ.
 Implementation Repository chứ đầy đủ các thông tin
về các thành phần, các lớp có trong các thành
phần và các đối tượng.
Object References (OR)
 Đối tượng tham chiếu.
 Là một đối tượng thành phần của CORBA
 OR chứa vị trí, chỉ số (id) của những đối tượng yêu
cầu.
 Máy trạm cần phải lấy được danh sách các OR.
 Khi cần thực hiện lời gọi hàm, máy trạm sẽ tìm tới
OR của phương thức tương ứng.
Interface Definition Language (IDL)
 Ngôn ngữ định nghĩa giao diện
 Cho phép định nghĩa giao diện thông qua các từ
khóa.
 Giao diện được ghi dưới dạng file .idl
 Các file idl sẽ được dịch (mapping) sang các ngôn
ngữ tương ứng như: C++, Java, Delphi
 Java sử dụng IDLJ để thực thi biên dịch IDL sang
mã Java.
 IDL sẽ được giới thiệu ở phần sau.
Bắt đầu CORBA với HelloCORBA
 Các bước tiến hành:
1. Tạo file hello.idl, định nghĩa giao diện chung.
2. Biên dịch IDL thành file Java, C++
3. Viết lại các thành phần Server và Client kế
thừa các Interface
4. Biên dịch file Java, C++ thành các chương
trình chạy trên Server và Client
5. Chạy dịch vụ trên Server
6. Chạy ứng dụng trên Client
Mục tiêu cần đạt được
 Tạo ra một ứng dụng Client – Server
 Các phương thức xây dựng trên Server
+ sayHello: In ra 1 dòng Hello
+ shutdown: hủy bỏ đối tượng remote
 Client gửi một yêu cầu gọi một hàm trên Server
 Kết quả lời gọi hàm hiển thị trên Client
1. Tạo file hello.idl
 Có thể soạn thảo file IDL bằng công cụ soạn thảo
bất kì: notepad, wordpad..
 Với NetBean:
+ Download: jbi4corba-0.7.1-netbeans-plugin
+ Menu – Tools – Plugin – Addnew
+ Chọn các file được giải nén từ file download
+ Từ cửa sổ Project, chọn một project bấm chuột phải
và chọn new IDL File.
1. Tạo file hello.idl
 Code: hello.idl
module HelloApp
{
interface Hello
{
string sayHello();
oneway void shutdown();
};
};
2. Biên dịch IDL sang Java
 Sử dụng công cụ IDLJ có trong thư mục BIN của
Java
 Lệnh:
Idlj [option] hello.idl
 Option:
-fall: Biên dịch cho cả Client và Server
-fclient: Biên dịch cho phần Client
-fserver: Biên dịch cho phần Server
2. Biên dịch IDL sang Java
 Sau khi biên dịch, ta được mã java:
package HelloApp;
public interface Hello
{
String sayHello ();
void shutdown ();
}
 Tuy nhiên đây chỉ là kết quả ta mong đợi
2. Biên dịch IDL sang Java
 Thực tế khi biên dịch, trình biên dịch IDLC không
chỉ tạo ra một file .java.
 Kết quả tạo ra khác nhau khi ta đưa các Option
khác nhau.
-fall: _HelloStub, Hello, HelloHelper, HelloHolder,
HelloOperations, HelloPOA
-fserver: Hello, HelloOperations, HelloPOA
-fclient: _HelloStub, Hello, HelloHelper, HelloHolder,
HelloOperations
2. Biên dịch IDL sang Java

Idlj –fclient hello.idl

Idlj –fall hello.idl

Idlj –fserver hello.idl


3. Component Client & Server
 Server:
1. Xây dựng lớp HelloServant – Skeleton
2. Xây dựng lớp HelloServer

 Client:
1. Xây dựng lớp HelloClient
3. Component Client & Server
 HelloServant.java
3. Component Client & Server
HelloServer.java
3. Component Client & Server
 HelloClient.java
4. Biên dịch các file Java
 Thư mục HelloApp được sinh ra thực thi IDLJ
 Với Option –fall, HelloApp chứa 6 file .java
 Copy thư mục HelloApp sang ổ D:
 Copy 3 file: HelloServer.java, HelloClient.java,
HelloServant.java sang ổ D:
 Start – Run: gõ “cmd” để vào Command
 Đặt đường dẫn tới thư mục BIN của Java
path C:\ProgramFiles\Java\jdk1.6.0_17\bin
 Thực hiện lệnh biên dịch:
javac d:\HelloApp\*.java d:\*.java
5. Chạy dịch vụ trên Server
 Khởi động Server ORB:
start orbd -ORBInitialPort 1050
 Thực thi HelloServer với các tham số:
+ Port: 1050
+ Server IP: Localhost
 Lệnh trong Command”
java HelloServer -ORBInitialPort 1050 -ORBInitialHost
localhost
5. Chạy dịch vụ trên Server
5. Chạy ứng dụng trên Client
 Thực hiện lệnh trong Command:
java HelloClient -ORBInitialPort 1050 -ORBInitialHost
localhost

IDL Expamle
Query
Các dịch vụ của CORBA

Trader
Object Request Broker
Transaction
CORBA SERVICES

Naming
Naming
Concurency
Control
Event
Object life
cycle
NAMING SERVICE

 Là dịch vụ cho phép truy xuất đến các


đối tượng phân bố thông qua tên.

 Được định nghĩa trong CosNaming.idl


COSNAMING

 Gồm có 2 interface chủ yếu

+ NamingComponent
+ NamingContext
 Lưutrữ đối tượng theo kiến trúc cây
phân cấp.
NamingComponent

 Làthành phần chứa tên (tên nhãn hoặc


tên tập tin)

 Cóthể ràng buộc tên với một đối tượng


corba bất kỳ.
NamingContext

 Là đối tượng dùng để tham chiếu đến


một NamingComponent hay một
NamingContext khác.
 Giống như thư mục trong hệ thống file.
 Đặt tên dựa vào NamingComponent.
MÔ HÌNH LƯU TRỮ ĐỐI TƯỢNG
Market
Tên ràng buộc của đối tượng

Đối tượng được ràng buộc


Object
A
Stock

Toys
Object
Đối tượng B
NameContext
Fruit
Shelf

Object
Book C
Đối tượng
Panel
NameComponent
CÁC HÀM CƠ BẢN
 Tạo NamingContext:
new_context()
new_bind_context(NameComponent[] path)
 Hủy NamingContext:
destroy()
 Lấy về đối tượng NamingContext:
resolve_initial_references(ObjectId id)
resolve(NameComponent[] path)
CÁC HÀM CƠ BẢN
 Tạo một bind
Bind(NameComponent[] path, Object obj)
Bind_context(NameComponent[] path,
NameContext nc)
Rebind(NameComponent[] path, Object obj)
 Hủy một bind
Unbind(NameComponent[] path)
 Liệt kê các binding trong một context
List(NameContext nc, BindingList bl,
BindingIterator bt)
Các công cụ hỗ trợ CORBA

 CCM
 OmniORB
 VisiBroker
Tóm tắt kiến thức
 CORBA là một công nghệ - không đơn
thuần là một ngôn ngữ
 CORBA = IDL + API + Tool

+ IDL là một ngôn ngữ trung gian đinh nghĩa


interface
+ API cũng cấp giao diện hỗ trợ kiến trúc
Client – Server
+ Tool: CCM, OmniIDL, Visibroker
 Mô hình kiến trúc của CORBA
Vấn đề đặt ra
 Ngôn ngữ đặc tả giao diện IDL
 IDL To C++, C#, Delphi
 Triển khai CORBA với các Tool
HẾT CHƯƠNG 4

You might also like