Professional Documents
Culture Documents
CORBA
?
CORBA
? ? CORBA
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
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
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
+ NamingComponent
+ NamingContext
Lưutrữ đối tượng theo kiến trúc cây
phân cấp.
NamingComponent
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