You are on page 1of 36

THUYẾT TRÌNH MÔN HỌC LẬP TRÌNH MẠNG

CHUYÊN ĐỀ CORBA
GVHD: Phùng Hữu Phú
SVTH: Trương Nghĩa An – 50000017
Phạm Trần Ngọc Bảo – 50000123
Hồ Nguyên Đạt – 50000486
Đỗ Thanh Hải - 50000628
NỘI DUNG

 Giới thiệu CORBA


 CORBA và mô hình phân tán
 Phương thức động
 Trình môi giới VisiBroker
 CORBA services: Naming service
 Chương trình ứng dụng (demo)
GIỚI THIỆU VỀ CORBA

Vấn đề phát sinh :


 Các đối tượng trong ngôn ngữ lập trình
hướng đối tượng thiết kế bằng ngôn ngữ
nào thì chỉ có mã lệnh tương ứng của
ngôn ngữ đó mới truy xuất được chúng.
 Làm sao các đối tượng được thiết kế bằng
các ngôn ngữ lập trình khác nhau có thể
triệu gọi và sử dụng lẫn nhau ?
GIỚI THIỆU

CORBA
?

C++ Bus Object Delphi Moto Object

CORBA
? ? CORBA

Java Passenger Object


GIỚI THIỆU

 Các ngôn ngữ lập trình đều có các điểm


chung là các lời gọi hàm, thủ tục, tham số
truyền, trị trả về…
 Ngôn ngữ đặc tả ánh xạ các điểm chung
đó thành những ngôn ngữ lập trình khác
nhau.
 CORBA là ngôn ngữ đặc tả (description
language)
IDL

 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.
VÍ DỤ 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
VÍ DỤ VỀ IDL

 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.
ÁNH XẠ TỪ IDL SANG JAVA

IDL Java
module package
interface interface
string java.lang.String
long int
long long long
float float
double double
exception class
operation Method
VÍ DỤ

+ CORBA IDL:
module {
interface MathLibrary {
long add( in long x, in long y );
string About( in string version );
}
};
+ Java :
package Math;
public interface MathLibrary {
int add (int x, int y);
String About(String version);
}
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ề.
 Những thay đổi mới nhất về CORBA có
thể tìm thấy ở trang www.omg.org
CORBA – MÔ HÌNH PHÂN TÁN

 Trình môi giới trung gian ORB (Object


Request Broker)
 Cơ chế làm việc của ORB
 Giao thức IIOP (Interoperate Internet
Object Protocol)
ORB (Object Request Broker)
 Các đối tượng sau khi tạo ra bởi các ngôn ngữ
lập trình khác nhau phải được gọi thông qua một
chương trình môi giới trung gian của CORBA
gọi là ORB.
 ORB hoạt động nhờ ngôn ngữ đặc tả IDL.
 Dựa vào IDL, ORB sẽ biết được tên phương
thức cần gọi, đối số, trị trả về,…Từ đó ORB có
thể gọi phương thức của đối tuợng.
 ORB hoàn toàn trong suốt (transparent) đối với
lập trình viên và người sử dụng.
ORB (Object Request Broker)
C++
Corba Delphi
Object Corba
Object
ORB

ORB
Network

ORB

Java
Corba
Object
CƠ CHẾ HOẠT ĐỘNG

Java
C++
Corba
Client
Object

Intermidiate class Intermidiate class


_Stub _Skel

IIOP
ORB ORB

Client Server
GIAO THỨC IIOP

 Được định nghĩa dựa trên TCP/IP.


 Cho phép các ORB của các ngôn ngữ
khác nhau có thể giao tiếp với nhau.
 Nhờ đó các đối tượng CORBA hiện
thực bởi các ngôn ngữ khác nhau có
thể giao tiếp với nhau.
PHƯƠNG THỨC ĐỘNG

 Giới thiệu
 Mục đích
 Ưu – khuyết điểm
 Sử dụng
GIỚI THIỆU
MỤC ĐÍCH

 Client phát hiện các interface runtime


 Phục vụ các ứng dụng không thể
dùng cách gọi tĩnh
 Ví dụ: CORBA design tool
ƯU - KHUYẾT ĐIỂM

 Ưu điểm:
 Client không cần biết interface cho các server
object
 Cung cấp lựa chọn khi lấy kết quả trả về

 Khuyết điểm
 Chương trình phức tạp
 Chi phí cao
 Dễ gây ra lỗi
SỬ DỤNG
 Tạo đối tượng Request
 request()
 create_request()
 Đóng gói đối tượng request
 add_value()
 result()
 Gọi phương thức
 invoke()
 send_deferred()
GỌI PHƯƠNG THỨC ĐỘNG

IDL
Trình
Cài đặt Đăng ký khách gọi
Friend.idl
FriendServant.java Setup.java Client.java
greeting() đối đối đối
tượng tượng tượng
CORBA - ORB VisiBroker

 Giới thiệu
 Trình môi giới trung gian
 Giao tiếp giữa các đối tượng CORBA theo
giao thức IIOP
 Do hãng Borland cài đặt
 Download miễn phí tại:
http://www.borland.com/visibroker
CORBA - VISIBROKER

Server
POA
POA
ROOT POA

Servant Manager

Client Active Object Map

ObjectID1
ObjectID2 Servants
ObjectID3
VisiBroker SỬ
– các điểm căn bản
DỤNG
 Dịch file IDL
 Idl2java XXX.idl
 Biên dịch mã nguồn:
 vbjc *.java
 Khởi động trình ORB
 osagent.exe
 Chạy trình ứng dụng
 vbj Client
 vbj Server
CORBA SERVICE

 Tương tác giữa các đối


tượng phân bố
Query
Trader
CORBA SERVICES

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ưu trữ đố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

Panel Đối tượng


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)
TÀI LIỆU THAM KHẢO

 Fundamental of distributed object system


– the CORBA perspective
 Teach yourself CORBA in 14 days
 JAVA - Lập trình mạng.
 www.omg.org
 www.borland.com/visibroker
THE END

THE END

You might also like