Tải bản đầy đủ (.doc) (30 trang)

xây dựng hệ thống kiểm tra kết quả xổ số bằng java corba middleware

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (865.14 KB, 30 trang )

Học Viện Công Nghệ Bưu Chính Viễn Thông
Cơ sở Thành phố Hồ Chí Minh
Xây dựng hệ thống kiểm tra kết
quả xổ số bằng Java Corba
Middleware
Giảng viên : TS. Tân Hạnh
Sinh viên : Trần Tuấn Vũ
Lớp : D07THM1
MSSV : 407170078
Báo cáo đề tài môn Hệ Thống Phân Tán – Java Corba Middleware
Chương I : TÓM TẮT VÀ GIỚI THIỆU
I. Tóm tắt:
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.
2
Báo cáo đề tài môn Hệ Thống Phân Tán – Java Corba Middleware
Corba đã được coi như là “quốc tế ngữ” trong giới ngôn ngữ lập trình.
II. Giới thiệu:
Chuẩn CORBA do tổ chức OMG (Object Management Group) quản lý và phát
triển. Đây là hiệp hội lớn nhất của các nhà phát triển, sản xuất và ứng dụng phần mềm
trên thế giới, hiện nay có gần 1.000 thành viên.
Chuẩn CORBA đưa ra một kiến trúc đối tượng phân tán cùng với các đặc tả ứng
dụng cho nhiều lĩnh vực khác nhau, nhiều nền khác nhau và nhiều ngôn ngữ lập trình
khác nhau. Vì tính trung lập của nó, CORBA được hỗ trợ rất rộng rãi, đặc biệt trong
các hệ thống thông tin thương mại, phần mềm giao dịch kinh doanh và dịch vụ viễn
thông. Tuy nhiên, cũng do tính độc lập của nó dẫn đến nhiều lý do mà CORBA không
thực sự mạnh ở các hệ thống ứng qui mô vừa và nhỏ.
CORBA (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.
là một chuẩn hết sức quan trọng ra nhằm cho phép thực hiện kiến trúc "client – sever"
theo phương pháp tiếp cận hướng sự vật, trên những hệ thống máy khác nhau và phân

tán, để cho phép nhiều nhóm sản xuất phần mềm khác nhau cùng cộng tác.
Chuẩn CORBA khi đầu chỉ được quan niệm với các phần mềm 'cố định' và
hoạt động phân tán trong một mạng cục bộ. Chuẩn này vừa ra đời thì cũng cùng lúc
đó xuất hiện ngôn ngữ Java và công nghệ tác tử, cho phép mỗi khi cần dùng thì bản
thân trạm phục vụ thông qua mạng nạp xuống vào máy khách những tác tử ‘Client’,
do đó việc chuẩn hoá giao diện "client-sever" ở mức độ ứng dụng trở nên đơn giản
hơn.
Thêm nữa, với sự bùng nổ Internet thì mở rộng CORBA để xử lý phân tán ở
mạng tầm rộng qua Internet trở thành quan trọng, và khi đó phải kết hợp CORBA với
ngôn ngữ giao diện XML của Internet, XML đang được triển khai để mở rộng HTML
mà chúng ta quen thuộc, vì cái áo HTML đã quá chật.
3
Báo cáo đề tài môn Hệ Thống Phân Tán – Java Corba Middleware
Hình 1: Cấu trúc mô hình Corba
Hình trên minh họa cấu trúc mô hình CORBA, trong đó bộ phận trừu tượng
trung gian mang tên Object Request Broker (ORB) giữ vai trò quan trọng nhất
(broker). ORB cho phép khách hàng (client) sử dụng dịch vụ của đối tượng phục vụ
(server) mà không cần biết cụ thể dạng thực hiện, nền triển khai và vị trí cài đặt của
đối tượng phục vụ. Kiến trúc ở đây được thực hiện theo các mẫu thiết kế đã trình bày
trong phần trước.
Ưu nhược điểm của CORBA là các lập trình viên có thể chọn bất kỳ ngôn ngữ,
nền tảng phần cứng, giao tiếp mạng và các công nghệ để phát triển mà vẫn thỏa mãn
các tính chất của CORBA. Tuy nhiên, CORBA có một số nhược điểm là: nó là ngôn
ngữ lập trình bậc thấp, rất phức tạp, khó học, và cần một đội ngũ phát triển có kinh
nghiệm. Ngoài ra các đối tượng CORBA cũng khó tái sử dụng.
4
Báo cáo đề tài môn Hệ Thống Phân Tán – Java Corba Middleware
Chương II : CORBA
I. Mục tiêu, đặc trưng thiết kế của CORBA
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.
- 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:
5
Báo cáo đề tài môn Hệ Thống Phân Tán – Java Corba Middleware
- 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. Đặc trưng thiết kế của CORBA:
♦ 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.

6
Object
IDL-interface
Báo cáo đề tài môn Hệ Thống Phân Tán – Java Corba Middleware
Đố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.
II. Kiến trúc CORBA:
Mô hình kiến trúc CORBA
CORBA còn được gọi là ngôn ngữ đặc tả giao tiếp (IDL – Interface Description
Language). Mô tả chức năng của đối tượng thông qua hàm, phương thức, thuộc tính…
Không chứa bất kỳ cài đặt mã lệnh nào. Đặc tả đối tượng dựa trên khái niệm interface
trong Java.
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:
7
Machine X Machine Y
Process A Process CProcess B
Báo cáo đề tài môn Hệ Thống Phân Tán – Java Corba Middleware
- 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.
8
Báo cáo đề tài môn Hệ Thống Phân Tán – Java Corba Middleware
Hình trên 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.
III. IDL (Interface definition language - Ngôn ngữ định nghĩa giao diện).
1. Sơ lược về IDL :
+ IDL(Interface Definition Language) là ngôn ngữ đặc tả interface. IDL không
có lệnh, chỉ có các mô tả hàm, kiểu dữ liệu, các khai báo để đặc tả đối tượng. CORBA
dùng IDL để có thể cài đặt client/server bằng các ngôn ngữ khác nhau có hỗ trợ
CORBA như là C, C++, COBOL, Ada, Java. Mỗi ngôn ngữ hỗ trợ CORBA đều có
trình chuyển đổi IDL sang ngôn ngữ đó.
+ CORBA dùng IDL để viết Interface, sau đó dùng các trình biên dịch để dịch
sang ngôn ngữ cụ thể, đồng thời tạo lớp stub, skel và một số lớp hỗ trợ CORBA.
Chúng ta sẽ xem xét một ví dụ sử dụng CORBA. Đầu tiên chúng ta định nghĩa
IDL cho đối tượng từ xa:
interface ExampleCORBA {
attribute string s;
};
Bây giờ chúng ta có thể biên dịch IDL dùng lệnh idlj. Tham số -fall phát sinh
mã cả 2 phía máy client và server
idlj -fall ExampleCORBA.idl
9
Báo cáo đề tài môn Hệ Thống Phân Tán – Java Corba Middleware
Sau khi biên dịch IDL, sẽ phát sinh một số tập tin sau:
- ExampleCORBAStub.java là mã stub.
- ExampleCORBA.java là giao diện từ xa
- ExampleCORBAHolder.java là mã hỗ trợ.
- ExampleCORBAHelper.java là mã hỗ trợ.
- ExampleCORBAOperations.java là mã hỗ trợ.
- ExampleCORBAPOA.java là mã skeleton và là lớp cha chúng ta thừa kế khi
cài đặt mã bến phía máy chủ.
Một ví dụ khác về IDL: Đặc tả đối tượng Calculator bằng ngôn ngữ IDL của
CORBA

Tạo file Calculator.idl
interface Calculator {
long addNumber ( in long x, in long y );
};
Để chuyển file đặc tả này sang các ngôn ngữ lập trình khác chúng ta có thể dùng
như sau:
idl2cpp Calculator.idl // chuyển sang C++
idlj Calculator.idl // chuyển sang java
Kết quả là chúng ta có được tập tin CalculatorOperations.java như sau:
public interface CalculatorOperations
{
int addNumber(int x, int y);
} // interface CalculatorOperations
Bước cài đặt hàm addNumber() là do lập trình viên thực hiện. CORBA chỉ giúp
triệu gọi hàm addNumber() từ đối tượng CalculatorOperations.
10
Báo cáo đề tài môn Hệ Thống Phân Tán – Java Corba Middleware
2. Ánh xạ giữa ngôn ngữ IDL và Java (IDL mapping to 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
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ận xét: Ngôn ngữ đặc tả trong mô hình CORBA gần giống với ngôn ngữ C.
CORBA đưa ra từ khóa in cho các biến truyền vào theo trị và từ khóa out để lấy trị
trả về.
Sau đây là một ví dụ ánh xạ giữa CORBA và Java:
11
Báo cáo đề tài môn Hệ Thống Phân Tán – Java Corba Middleware
CORBA IDL JAVA
Module {
interface Mathlibrary {
long add (
in long x,
in long y );
long subtract (
in long x;
in long y );
long divide (
in long x,
in long y );
long multiple (
in long x,
in long y );
string About (
in string version );

};
Package Math;
Public interfaces
MathLibrary {
Int add ( int x,
Int y );
Int subtract ( int x,
Int y );
Int divide ( int x,
Int y );
Int multiple( int x,
Int y );
string About (
string version );
}
3. 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
12
Báo cáo đề tài môn Hệ Thống Phân Tán – Java Corba Middleware
- 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++

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 -2
11
…+2
11
-1 32 bít có dấu
Unsigned short 0…65535 16 bít không dấu
Unsigned long 0…2
12
-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
Wchar International format
String ISO –latinh Variable
Wstring International format Variable
Boolean True or false Không xác định
IV. Các dịch vụ trong Corba:

+ 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 và được định nghĩa trong CosNaming.idl
13
Báo cáo đề tài môn Hệ Thống Phân Tán – Java Corba Middleware
Gồm có 2 interface chủ yếu là NamingComponent và NamingContext, được
lưu trữ 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) và 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, NamingContext đặt tên dựa vào NamingComponent.
Các hàm cơ bản trong để tạo NamingComponent và NamingContext:
 Hàm 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)
 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)

14
Báo cáo đề tài môn Hệ Thống Phân Tán – Java Corba Middleware
Chương III: CORBA VÀ CÔNG
NGHỆ 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).
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:
15
Báo cáo đề tài môn Hệ Thống Phân Tán – Java Corba Middleware
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ũ.
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(Transparency)
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 (Failure Transparency)
- Trong suốt vị trí (Location transparency)
- Trong suốt truy cập (Access Transparency)
- Trong suốt sự chia sẻ tài nguyên (Concurency transparency)
- Trong suốt dịnh vị lại ( Relocation transparency)
16
Báo cáo đề tài môn Hệ Thống Phân Tán – Java Corba Middleware

- Trong suốt nhân bản. (Replication Transparency)
- Trong suốt di trú. (Migration Transparency)
- Trong suốt khả năng di chuyển tài nguyên (Persistence Transparency)
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.
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
17
Báo cáo đề tài môn Hệ Thống Phân Tán – Java Corba Middleware
toàn trong suốt (transparent) với lập trình viên (hay người 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.
Triệu gọi đối tượng CORBA thông qua trình trung gian 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.
ORB giao tiếp với đối tượng thông qua các thông tin đặc tả IDL.
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
18
Báo cáo đề tài môn Hệ Thống Phân Tán – Java Corba Middleware
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ó.
Giao tiếp giữa trình khách và đối tượng CORBA trên máy chủ.
3. Giao thức IIOP
19
Báo cáo đề tài môn Hệ Thống Phân Tán – Java Corba Middleware
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).
Truy cập Internet CORBA thông qua IIOP
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ý).
20
Báo cáo đề tài môn Hệ Thống Phân Tán – Java Corba Middleware
Quá trình phát triển ứng dụng Corba.
21
Báo cáo đề tài môn Hệ Thống Phân Tán – Java Corba Middleware
CHƯƠNG IV: CÀI ĐẶT CORBA VÀ
CHƯƠNG TRÌNH ỨNG DỤNG
LOTTERY
I. Cài đặt CORBA:
+ Định nghĩa giao diện remote: dùng ngôn ngữ IDL viết giao diện remote.
+ Biên dịch giao diện remote sang ngôn ngữ mong muốn: ví dụ dùng trình biên dịch
idlj.exe để biên dịch giao diện remote từ IDL sang Java và sinh ra stub, skel cùng với
mã dùng để kết nối với ORB
+ Cài đặt Server
+ Cài đặt Client
+ Thực thi ứng dụng
Ví dụ: Giả sử muốn cài đặt đối tượng ở client bằng Java, đối tượng ở server là Java
- Viết interface bằng ngôn ngữ IDL (Idl_Inter.idl)
- Ở máy client dùng idlj.exe dịch IDL Interface sang Java Interface, đồng thời tạo lớp
Java-Stub (stub viết bằng Java)
idljava –fclient Idl_Inter.idl (enter)
- Viết lớp client bằng Java.
- Ở máy server dùng idlj.exe dịch IDL Interface sang Java Interface, đồng thời tạo lớp

Java-Skel
idlj –fserver Idl_Inter.idl (enter)
- Viết lớp tạo đối tượng remote và lớp server bằng Java.
II. Viết chương trình dò kết quả xổ số dựa trên công nghệ CORBA:
Trong bài báo cáo sử dụng Microsoft SQL Server 2008 R2 và thông qua ODBC
có tên là Lottery
22
Báo cáo đề tài môn Hệ Thống Phân Tán – Java Corba Middleware
Tạo ODBC cho SQL Server
Cơ sở dữ liệu được lưu vào bảng như sau:

Bảng CSDL
Đầu tiên muốn chạy chương trình cần khởi tạo trình quản lý môi giới đối tượng ORB:
23
Báo cáo đề tài môn Hệ Thống Phân Tán – Java Corba Middleware
Khởi tạo trình trung gian ORB
Chạy chương trình server:
Giao diện chương trình Server
Chạy chương trình Client:
24
Báo cáo đề tài môn Hệ Thống Phân Tán – Java Corba Middleware
Giao diện chương trình
Button Check: Kiểm tra kết quả xem số có trúng thưởng hay không
Button exit: thoát khỏi chương trình.
1. Định nghĩa IDL cho đối tượng từ xa:
module Lottery{
interface Lottery{
string Check (String number, long time);
};
};

Bây giờ chúng ta có thể biên dịch IDL dùng lệnh idlj. Tham số -fall phát sinh
mã cả 2 phía máy khách và máy chủ
idlj -fall CurrencyConverter.idl
Sau khi biên dịch IDL, sẽ phát sinh một số tập tin sau:
• _LotteryStub.java là mã stub.
• Lottery.java là giao diện từ xa
25

×