1. Trang chủ
  2. » Luận Văn - Báo Cáo

Tổng quan về Corba

58 957 4

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 58
Dung lượng 863,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Tổng quan về Corba

Trang 1

Chương 1 Tổng quan về Corba

I Lịch sử ra đời của Corba

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ấmnhuầ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ạithuần đối tượng nhất Trong Java mọi thứ, mọi nơi, mọi khái niệm đều qui về đốitượ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ằngJava 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óiSun Microsystem hầu như đã thực hiện được mong ước của mình với sự nổi tiếngcủ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 đã đượcthiế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++ hayPascal) đ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

Corba đã được coi như là “quốc tế ngữ” trong giới ngôn ngữ lập trình.

II.Corba là gì?

CORBA, hoặc là 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êutương tác với nhau

Trang 2

1.OMG

OMG (Object Management Group) là một tổ chức quốc tế đượchình thành từ hơn 700 công ty và tổ chức khác nhau, bao gồm hầu hết các nhàphát triển, các đại lý chính của công nghệ đối tượng phân tán; bao gồm platform,

cơ sở dữ liệu, và các nhà cung cấp ứng dụng cũng như công cụ phần mềm và cácnhà phát triển hợp nhất

2 Các mục tiêu, đặc trưng thiết kế CORBA:

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

Trang 3

- 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:

- 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.2.Đặc trưng thiết kế 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

Object IDL-interface

Trang 4

Đố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.

3.Kiến trúc CORBA

CORBA định nghĩa một kiến trúc cho các đối tượng phân tán Mô hình

CORBA cơ bản đó là một yêu cầu dịch vụ của một đối tượng phân tán Mọi thứkhác được định nghĩa bởi OMG là dưới dạng mô hình cơ bản này

Các dịch vụ mà một đối tượng cung cấp được định nghĩa bởi giao tiếp

(interface) của nó Các giao tiếp được định nghĩa trong Interface DefinitionLanguage (IDL) của OMG Các đối tượng phân tán được xác định bởi các thamchiếu đối tượng, được định kiểu bởi các giao tiếp IDL

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:

- 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

Trang 5

Hình sau 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ếtquả 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

Hình 1: Kiến trúc một yêu cầu cơ bản của CORBA.

4 IDL(Interface definition language - Ngôn ngữ định nghĩa giao diện).

4.1 Sơ lược về IDL:

Naming Service

IDL compilerInterface

Repository

Implementation Repository

Object Implementation Client

IDLstubs

interface

Object adapter

IDLskel DSI

Network Adapters

ORB Core

GIOP/IIOP

Network

Trang 6

♦ Interface: giao diện cho một đối tượng, được định nghĩa bằng ngôn ngữ IDL.

♦ Các đối tượng của ngôn ngữ lập trình tuân theo đặc tả Idl thì được xem như là các đối tượng Corba

IDL được coi như là ngôn ngữ chương trình độc lập và chỉ chứa các mô tả dữ liệu Nó là ngôn ngữ chung của chương trình phần mềm

Ví dụ ứng dụng IDL:

Hình 2: Ngôn ngữ đặc tả IDL dịch sang ngôn ngữ lập trình

Struct resultStatus 

int status; // trạng thái

string result; ; //kết quả

string Gramark;//xếp loại bằng

int Grayear; // năm tốt nghiệp

Client Stub

translator

TransportLayer

ReplyResult

TransportLayer

ServerStub

Call procedure

Call

procedure

ClientStub

IDL description

translator

ReplyResult

request

Trang 7

♦ Phía Client được che đi các chi tiết cài đặt của các đối tượng Việc thay đổi cài đặt object sẽ không làm thay đổi ở phía client.

♦ Clinet và server độc lập với kiến trúc và bus Corba Để có được sự độc lập đó, các mô tả IDL sẽ được tham chiếu sang các môi trường lập trình (stub và

skeleton)

♦ Client sử dụng các stub cục bộ để truy nhập đến các đối tượng

Các stub cho phép xây dựng các lời gọi đến các skeleton thông qua môi trường truyền dẫn là bus Corba

♦Phía skeleton sẽ tiếp nhận các lời gọi này và gửi đến các object cục bộ

4.2 Các khái niệm cơ bản:

- 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++

Ví dụ:

Module Module1

{ typedef long Longmod_1;

module Module_1

Trang 8

{ typedef short Intmod_1_1;

• 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ở:

Trang 9

Wchar International format

• Khai báo const và typedef:

Typedef sequence<short> dayso;

- Có thể định nghĩa các sequence lồng nhau:

Typedef float [100] [100] matrixA;

- Trong thực tế ta nên hạn chế sử dụng kiểu mảng trong IDL do thiếu tính linh động và gặp nhiều khó khăn khi ánh xạ snag một vài ngôn ngữ khác chẳng hạn như C++

• Unions (kết hợp)

Ví dụ:

union ParametreOptionnels switch(boolean)

{ case true: string value1;

Trang 10

case false: short value2;

};

Trong thực tế nên tránh sử dụng union do:

- Khó khăn khi tham chiếu sang các ngôn ngữ khác

- Không theo quan điểm hướng đối tượng

Trang 11

Cách khai báo:

attribut Type nomAttribut;

readonly attribute Type nomAttribut;

Trong thực tế ta nên tránh khai báo các thuộc tính vì :

- Việc truy nhập đến một thuộc tính (sửa đổi) không thể tạo ra một

exception của người sử dụng

- Định nghĩa các thuộc tính trong interface không phải là cách tiếp cận hướng đối tượng

• Inheritance:

Ví dụ:

Interface fichier

{

void lire (out octet octetLu) ;

void ecrire(in octet octetEcrit) ;

5 Ánh xạ giữa ngôn ngữ IDL và Java (IDL mapping to Java)

Đồ án này chủ yếu giúp bạn tìm hiểu Java nên tốt nhất là chúng ta hãy tìm hiểu

việc ánh xạ từ ngôn ngữ đặc tả IDL sang ngôn ngữ lập trình Java Dưới đây là tậpcá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

Trang 12

Char, wchar Char

Long long, unsigned long long Long

Như vậy, IDL không có các cấu trúc điều khiển như if, while, do, for…IDLchỉ là ngôn ngữ đặc tả Trong ngôn ngữ đặc tả mọi việc diễn ra tương tự như khibạn khai báo biến, mô tả đối tượng, kiểu record… không cần phải có các cấu trúclệnh điều khiển

Java cung cấp cho bạn công cụ dùng để chuyển đổi qua lại giữa khai báo CORBAsang khai báo Java và ngược lại như sau:

 Để chuyển một lớp interface nào đó của java sang đặc tả IDL bạn dùnglệnh

o rmic –idl YourObject.class

 Để chuyển một đặc tả IDL sang khai báo interface tương ứng trong Javabạn dùng lệnh

o idlj YourObject.idl

rmic và idlj là hai chương trình exe nằm trong thư mục [JAVA_HOME]\bin

Ví dụ ánh xạ giữa CORBA và Java:

Trang 13

CORBA IDL JAVA

Int subtract ( int x, Int y );

Int divide ( int x, Int y );

Int multiple( int x, Int y );

string About ( string version );

}

Như vậy khái niệm package trong Java tương đương với module trong

CORBA CORBA đưa ra từ khoá in cho các biến truyền vào phương thức theo trị(tương tự từ khoá out dùng để lấy trị trả về)

Trang 14

Chương 2 Corba và công nghệ lập trình 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áytí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ôitrường tích hợp và nhất quán (phần mềm của hệ phân tán)

Hình 3: 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áchmề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ôngqua: chia sẻ tài nguyên( resource sharing), tính mở (openness), tính đồngthờ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ể đượcchia sẻ dễ dàng giữa nhiều người sử dụng Tài nguyên được thiết kể tập trunghoặc phân tán; tương tác theo kiến trúc client-server Tài nguyên được tổ chứcthà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:

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ớicác phần khác trong hệ thống cũ

Trang 15

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 nhanhcủa mạng interNetwork

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 khixả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ỗiphầ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.

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 trongsuốt:

- Trong suốt lỗi

- Trong suốt truy cập

- Trong suốt tương tranh

- Trong suốt định vị

- Trong suốt lặp

- Trong suốt di trú

Trang 16

- Trong suốt mở rộng.

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 đốitượ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ácnhau muốn triệu gọi được nhau phải thông qua trình môi giới trung gian củaCorba gọi là ORB (Object request broker : Trình môi giới các yêu cầu của đốitượ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ẵnsằ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ậptrình viết trong đối tượng CORBA ORB thực hiện việc dịch cần thiết giữa cácngô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ônngữ lập trình thông dụng

Hình 3 là cơ chế triệu gọi lẫn nhau của các đối tượng viết bằng C++, Delphi,

Java thông qua ORB

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ếunhư 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ươngthứ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 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àntheo 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

Trang 17

Hình 4 : Triệu gọi đối tượng CORBA thông qua trình môi giới 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ớithô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ạiViệ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ênmột thể thống nhất của mô hình lập trình hướng đối tượng

Hình 5 : ORB giao tiếp với đối tượng thông qua các thông tin đặc tả IDL.

C++

CORB A Object

C++

CORB A Object

Java CORB A Object

Delphi CORB A Object

Delphi CORB A Object

C++

CORB A Object

Java CORB A Object

Java CORB A Object

Internet

Trang 18

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áchlà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 máy chủ Thường thì việc cài đặt đối tượng CORBAtrê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ìnhbiên dịch idlj.exe để chuyển đặc tả của đối tượng X sang ngôn ngữ Java) Dựavà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ìnhC++ 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áychủ chuyển lời gọi cho lớp trung gian _Skel trên máy chủ Cuối cùng thì đốitượng thì đối tượng CORBA trên máy chủ sẽ thực thi phương thức của nó

Java CORB A Object

Lớp trung gian Skel

Lớp trung gian Skel

ORBIIOP

Trang 19

Hình 6 : Giao tiếp giữa trình khách và đối tượng CORBA trên máy chủ.

3.Giao thức IIOP

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ựatrên giao thức mang tên IIOP (Interoperate Internet Object Protocol) Giao thứcnà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ứcIIOP đượ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)

Hình 7 : Truy cập Internet CORBA thông qua IIOP

Web serverProxy server

Naming serice

Distributed Objects

HTML &Java Applet

RelationalDatabaseIIOP

HTTP Java Enabled

Web Browser

HTML Document

Java Applet

JDBCODBCDBMS_

specific

Trang 20

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ý)

Hình 8 : Quá trình phát triển ứng dụng Corba.

Stub

IDL compile r

Java compile r

Client

program

Server programSkeleton

ORB

Trang 21

giữa một client CORBA và một server để thực hiện ứng dụng “Hello World » cổđiển.

Ta sẽ xây dựng chương trình Hello World cổ điển như là một ứng dụng phân tán,với cả applet và các client ứng dụng Gồm các bước sau :

4.1.Định nghĩa một giao tiếp từ xa.

Bạn định nghĩa một giao tiếp cho một đối tượng từ xa sử dụng IDL Sử dụng IDLthay vì sử dụng Java bởi vì bộ biên dịch idlj tự động ánh xạ từ IDL, sinh ra tất cảcác file nguồn skeleton và stub Java, cùng với mã cơ sở hạ tầng để kết nối đếnORB Hơn nữa, với việc sử dụng IDL, tạo cho người phát triển khả năng cài đặtcác client và server trong một số ngôn ngữ biên dịch CORBA khác

Để ý rằng nếu bạn đang cài đặt một client cho một dịch vụ CORBA đang tồn tại,hoặc một server cho một client đang tồn tại, bạn sẽ nhận được các giao tiếp IDL

từ người cài đặt – ví dụ nhà cung cấp hoặc đại lý dịch vụ Sau đó bạn sẽ chạy bộbiên dịch idlj trên toàn bộ giao tiếp đó và theo các bước này

• Tạo file Hello.idl

Để tạo file Hello.idl ta làm các bước sau :

 Tạo một thư mục mới, có tên là Hello, cho ứng dụng này

 Khởi động trình soạn thảo ưa thích của bạn và tạo ra file có tên Hello.idl trongthư mục trên

 Trong file, nhập vào các đoạn mã để định nghĩa giao tiếp sau :

 Ghi file lại

•Hiểu file idl

OMG IDL là một ngôn ngữ khai báo đúng nghĩa được thiết kế cho việc đặc tả cácgiao tiếp thao tác độc lập ngôn ngữ lập trình, bao gồm C, C++, Smalltalk,COBOL, Ada, và Java Khi được ánh xạ thì mỗi câu lệnh trong OMG IDL đượcbiên dịch đến một câu lệnh tương ứng theo ngôn ngữ lập trình đã lựa chọn Có thể

sử dụng lệnh idlj để ánh xạ một giao tiếp IDL sang Java và cài đặt lớp client Khibạn ánh xạ cùng file IDL đó sang C++ và cài đặt server cùng ngôn ngữ này, thì

Trang 22

client Java và server C++ tương tác qua ORB như là chúng được viết trong cùngmột ngôn ngữ.

IDL cho Hello World thực sự là rất đơn giản; giao tiếp đơn của nó chỉ có mộtthao tác đơn Bạn chỉ cần thực hiện ba bước sau :

♦Khai báo module IDL CORBA

Một module CORBA là một namespace hoạt động như là một containercho các giao tiếp và khai báo liên quan Nó gần tương tự như gói trong Java Mỗicâu lệnh trong module IDL được ánh xạ sang một câu lệnh trong gói Java

Câu lệnh module có dạng như sau:

♦Khai báo giao tiếp

Giống như các giao tiếp Java, các giao tiếp CORBA khai báo API kết giao một đối tượng với các đối tượng khác Mỗi câu lệnh interface trong IDL được ánh xạ đến một câu lệnh interface Java

Trong file Hello.idl, interface có dạng sau:

Trang 23

Các thao tác CORBA là các hành vi mà các server hứa thực hiện vì lợi ích củaclient gọi nó Mỗi một lệnh thao tác trong IDL sinh ra một lệnh phương pháptương ứng trong giao tiếp Java đã sinh ra.

Trong file Hello.idl lệnh thao tác có dạng:

Ứng dụng nhỏ của chúng ta chỉ có một thao tác, vì thế Hello.idl đã hoàn thành

4.2.Biên dịch giao tiếp từ xa.

Khi bạn chạy bộ biên dịch idlj trên file định nghĩa giao tiếp của bạn, nó sinh raphiên bản Java của giao tiếp, cũng là các mã lớp cho stubs và sketetons tạo khảnăng cho ứng dụng của bạn kết nối được ORB

Lệnh idlj đọc file OMG IDL và tạo ra các file Java theo yêu cầu Bộ biên dịch idljngầm định tạo ra chỉ các ràng buộc về phía client Nếu bạn muốn có cả bên phíaclient và skeletons server (như chương trình Hello World này), thì bạn phải sửdụng tuỳ chọn –fall khi chay bộ biên dịch idlj

a Di chuyển đến dấu nhắc prompt

b Chuyển đến thư mục chứa file Hello.idl

c Nhập vào lệnh biên dịch:

idlj -fall Hello.idl

Nếu bạn liệt kê nội dung của thư mục, bạn sẽ thấy một thư mục gọi là HelloAppđược tạo ra và chứa sáu file Mở Hello.java trong trình soạn thảo văn bản của bạn.Hello.java được xem như là một giao tiếp chữ kí và được sử dụng như là một kiểuchữ kí trong các khai báo phương pháp khi các giao tiếp của các dạng đặc tả được

sử dụng trong các giao tiếp khác Nó có dạng như sau:

package HelloApp;

/**

* HelloApp/Hello.java

Trang 24

* Generated by the IDL-to-Java compiler (portable), version "3.0"

interface Hello public interface Hello

Một việc gây ngạc nhiên đó là lệnh extends Tất cả các đối tượng CORBA đượclấy từ org.omg.CORBA.Object để đảm bảo tồn tại các hàm CORBA yêu cầu Các

mã yêu cầu được sinh ra bởi idlj; bạn không cần phải làm bất cứ một ánh xạ nàokhác

Trong các phiên bản trước của idlj (được biết như là idltojava), các giao tác đượcđịnh nghĩa trong giao tiếp IDL cũng sẽ tồn tại trong file này Bắt đầu với J2SDK,ánh xạ IDL-to-Java đặt tất cả các thao tác định nghĩa trong giao tiếp IDL trongoperations interface (giao tiếp thao tác), HelloOperations.java Giao tiếp các thaotác này được sử dụng trong ánh xạ phía server và như là một cơ chế để cung cấpcác cuộc gọi tối ưu cho các client và server tập hợp cùng nhau Đối với Hello.idl,file này có dạng sau:

Trang 25

IDL Statement Java Statement

string sayHello(); String sayHello();

d Tìm hiểu đầu ra của lệnh idlj

Biên dịch idlj tạo ra một số các file Số các file thực sự tạo ra tuỳ thuộc vào cáclựa chọn được chọn khi file IDL được biên dịch Các file được sinh ra cung cấpcác hàm chuẩn, vì thế bạn có thể bỏ qua nó cho đến khi bạn triển khai và chạychương trình của mình.Các file được sinh ra bởi biên dịch idlj với tuỳ chọn –falllà:

_HelloImpBase.java

Lớp trừu tượng này là server skeleton, chứa các hàm CORBA cơ bản cho server

Nó cài đặt giao tiếp Hello.java Lớp server HelloServant extends _HelloImpBase._HelloStub.java

Lớp này là client stub, cung cấp các hàm CORBA cho client Nó cài đặt giao tiếpHello.java

HelloHelper.java

Lớp final này cung cấp hàm hỗ trợ, đặc biệt là phương pháp narrow()được yêucầu để ép kiểu các đối tượng tham chiếu CORBA đến các kiểu thích hợp

Trang 26

Khi bạn viết giao tiếp IDL, bạn đã làm tất cả các lập trình yêu cầu để tạo ra cácfile này cho ứng dụng phân tán của bạn Các bước tiếp theo là cài đặt các lớpclient và server.

Lớp server có phương pháp main() :

Tạo ra một mẫu ORB

Tạo ra một mẫu servant (cài đặt đối tượng Hello CORBA) và nói với ORB về nó.Nhận một tham chiếu đối tượng cho một naming context để đăng kí đối tượngCORBA mới

Đăng kí đối tượng CORBA mới trong naming context với tên “Hello”

Chờ đợi phản hồi của đối tượng mới

a Tạo ra HelloServer.java

Khởi động trình soạn thảo văn bản của bạn và tạo ra file tên là HelloServer.javatrong thư mục chính, Hello

Nhập các dòng mã sau cho HelloServer.java trong file text:

// The package containing our stubs

import HelloApp.*;

// HelloServer will use the naming service

import org.omg.CosNaming.*;

Trang 27

// The package containing special exceptions thrown by the name service.import org.omg.CosNaming.NamingContextPackage.*;

// All CORBA applications need these classes

// Create and initialize the ORB

ORB orb = ORB.init(args, null);

// Create the servant and register it with the ORB

HelloServant helloRef = new HelloServant();

// Bind the object reference in naming

// Make sure there are no spaces between ""

NameComponent nc = new NameComponent("Hello", "");

NameComponent path[] = {nc};

Trang 28

ncRef.rebind(path, helloRef);

// Wait for invocations from clients

java.lang.Object sync = new java.lang.Object();

Trang 29

Cấu trúc của một chương trình server CORBA giống như hầu hết các ứng dụngkhác: bạn nhập các gói thư viện cần thiết, khai báo lớp server, định nghĩa mộtphương pháp main(), và điều khiển ngoại lệ

Đầu tiên là nhập các gói cần thiết cho lớp server:

// The package containing our stubs

Bước tiếp theo là khai báo lớp server:

public class HelloServer

{

// The main() method goes here

}

Mọi ứng dụng Java đều cần một phương thức main() Nó được khai báo trongphạm vi của lớp HelloServer:

public static void main(String args[])

{

// The try-catch block goes here

}

Ngày đăng: 15/07/2015, 15:14

HÌNH ẢNH LIÊN QUAN

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ở: - Tổng quan về Corba
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ở: (Trang 8)
Hình 3: Kiến trúc cơ bản của hệ phân tán. - Tổng quan về Corba
Hình 3 Kiến trúc cơ bản của hệ phân tán (Trang 14)
Hình 4 : Triệu gọi đối tượng CORBA thông qua trình môi giới ORB. - Tổng quan về Corba
Hình 4 Triệu gọi đối tượng CORBA thông qua trình môi giới ORB (Trang 17)
Hình 5 : ORB giao tiếp với đối tượng thông qua các thông tin đặc tả IDL. - Tổng quan về Corba
Hình 5 ORB giao tiếp với đối tượng thông qua các thông tin đặc tả IDL (Trang 17)
Hình 6 : Giao tiếp giữa trình khách và đối tượng CORBA trên máy chủ. - Tổng quan về Corba
Hình 6 Giao tiếp giữa trình khách và đối tượng CORBA trên máy chủ (Trang 19)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w