Giới thiệu về CORBA
Các nhà lập trình luôn mong muốn tìm được một tiếng nói chung cho
tất cả các ngôn ngữ lập trình hiện có.
CORBA (Common Object Request Broker Architecture – kiến trúc
môi giới các đối tượng chung) được hình thành từ một tổ chức nghiên
cứu quốc tế OMG (Object Management Group). Tham vọng của OMG
là đưa ra cách để các đối tượng viết bằng những ngôn ngữ khác nhau
có thể gọi lẫn nhau theo mô hình đốitượng phân tán.
CORBA không phải là một ngôn ngữ lập trình, CORBA là một ngôn
ngữ đặc tiếp (IDL-Interface Description Language)
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA
Phân Tán Đối Tượng Với CORBA
23Ngôn ngữ đặc tả
Các ngôn ngữ lập trình khác nhau thường có một điểm chung đó chính là lời
gọi thủ tục, hàm, kiểu dữ liệu, tham số truyền vào hàm, trị trả về của hàm.
Điều đầu tiên khi cài đặt hàm là phải khai báo hàm.
Ví dụ:
Trong C/C++: int get_price(char * product)
Trong Basic: function get_price(product as string) as integer
Trong Java: public static int get_price(String product)
Người ta có ý tưởng dùng một ngôn ngữ khái quát để đặc tả các hàm trên
rồi dùng một công cụ dịch hàm sang một ngôn ngữ cụ thể.
Phân Tán Đối Tượng Với CORBA
24Ngôn ngữ đặc tả (IDL) trong
CORBA
CORBA quy định một tập hợp các mô tả hàm, kiểu dữ liệu, cách khai báo để
đặc tả đối tượng. Đặc tả đối tượng cũng giống như khái niệm giao tiếp
interface trong Java. Nó chỉ mô tả chức năng của đối tượng thông qua hàm,
phương thức, thuộc tính, mà không có bất kỳ cài đặt mã lệnh nào trong
ngôn ngữ đặc tả. Chính vì vậy mà CORBA còn được gọi là ngôn ngữ đặc tả
giao tiếp IDL.
CORBA cung cấp một số tiện ích để dịch một đặc tả sang một ngôn ngữ lập
trình nào đó.
Vídụ:
idl2cpp để dịch sang ngôn ngữ C
idl2pas để dịch sang ngôn ngữ Pascal
idlj (idl2java) để dịch sang ngôn ngữ Java
43 trang |
Chia sẻ: trungkhoi17 | Lượt xem: 527 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Bài giảng Lập trình Java - Chương 5: Phân tán đối tượng trong Java - Nguyễn Minh Thành, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 5:
Phân Tán Đối Tượng
Trong Java
GIẢNG VIÊN : THS . NGUYỄN MINH THÀNH
EMAIL : THANHNM@ITC.EDU.VN
Nội Dung
1. Giới thiệu về hệ thống phân tán
2. Phân tán đối tượng với RMI
3. Phân tán đối tượng với CORBA
MÔ HÌNH CLIENT-SERVER & LẬP TRÌNH SOCKET 2
Giới thiệu về hệ thống phân tán
Phần mềm đang ngày càng trở nên phức tạp quá mức và
dường như đang vượt khỏi khả năng kiểm soát của các mô
hình phát triển hiện có.
Việc kinh doanh phần mềm không còn chỉ là bán nguyên
một ứng dụng, mà còn có thể chỉ bán một dịch vụ của hệ
thống.
Ví dụ : Google bán dịch vụ bản đồ, quảng cáo cho phép
nhúng vào các ứng dụng của các công ty khác
Mô hình phân tán đối tượng giúp cho việc truy xuất các
dịch vụ của các đối tượng từ xa trở nên phổ biến.
MÔ HÌNH CLIENT-SERVER & LẬP TRÌNH SOCKET 3
Phân Tán Đối
Tượng Với RMI
MÔ HÌNH CLIENT-SERVER & LẬP TRÌNH SOCKET 4
Giới Thiệu về RMI
RMI (Remote Method Invoke) là một cơ chế triệu gọi
phương thức từ xa đã được thực hiện và tích hợp trong ngôn
ngữ Java.
RMI còn cho phép một Client có thể gửi tới một đối tượng
đến cho Server xử lý, và đối tượng này cũng có thể được
xem là tham số cho lời gọi hàm từ xa, đối tượng này cũng có
những dữ liệu bên trong và các hành vi như một đối tượng
thực sự.
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA
Phân Tán Đối Tượng Với RMI
5
Mục đích của RMI
• Hỗ trợ gọi phương thức từ xa trên các đối tượng trong các máy ảo khác nhau
• Tích hợp mô hình đối tượng phân tán vào ngôn ngữ lập trình Java theo một cách
tự nhiên trong khi vẫn duy trì các ngữ cảnh đối tượng của ngôn ngữ lập trình Java
• Làm cho sự khác biệt giữa mô hình đối tượng phân tán và mô hình đối tượng cục
bộ không có sự khác biệt.
• Tạo ra các ứng dụng phân tán có độ tin cậy một cách dễ dàng
• Duy trì sự an toàn kiểu được cung cấp bởi môi trường thời gian chạy của nền
tảng Java
• Hỗ trợ các ngữ cảnh tham chiếu khác nhau cho các đối tượng từ xa
• Duy trì môi trường an toàn của Java bằng các trình bảo an và các trình nạp lớp.
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 6
Phân Tán Đối Tượng Với RMI
Lưu ý
Cũng như tất cả các chương trình khác trong Java, chương
trình RMI cũng được xây dựng bởi các giao tiếp và lớp.
Chỉ có những phương thức khai báo trong giao tiếp hoặc
lớp thừa kế từ giao tiếp Remote hoặc các lớp con của
Remote mới được Client gọi từ xa.
Giao tiếp Remote nằm trong packet java.rmi
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 7
Phân Tán Đối Tượng Với RMI
Các lớp trung gian Stub và
Skeleton
Trong kỹ thuật lập trình phân tán RMI, để các đối tượng trên
các máy Java ảo khác nhau có thể truyền tin với nhau thông
qua các lớp trung gian: Stub và Skeleton.
Vai trò của lớp trung gian: Lớp trung gian tồn tại cả ở hai
phía client và server
Phía client lớp trung gian này gọi là Stub (lớp móc)
Phía server lớp trung gian này gọi là Skeleton(lớp nối)
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 8
Phân Tán Đối Tượng Với RMI
Cơ chế hoạt động của RMI
Các hệ thống RMI phục vụ cho việc truyền tin thường được chia thành hai
loại: client và server.
Server RMI phải đăng ký với một dịch vụ tra tìm và đăng ký tên. Dịch vụ
này cho phép các client truy tìm chúng, hoặc chúng có thể tham chiếu tới
dịch vụ trong một mô hình khác. Mỗi khi server đựơc đăng ký, nó sẽ chờ các
yêu cầu RMI từ các client.
Các client RMI sẽ gửi các thông điệp RMI để gọi một phương thức trên một
đối tượng từ xa trên Server. Trước khi thực hiện gọi phương thức từ xa,
client phải nhận được một tham chiếu từ xa.
Ứng dụng client yêu cầu một tên dịch vụcụthể, và nhận một URL trỏtới tài
nguyên từ xa theo mẫu : rmi://hostname:port/servicename
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 9
Phân Tán Đối Tượng Với RMI
Cơ chế hoạt động của RMI (tt)
Mỗi khi có được một tham chiếu, client có thể tương tác với dịch vụ từ xa.
Các chi tiết liên quan đến mạng hoàn toàn được che dấu đối với những người
phát triển ứng dụng làm việc với các đối tượng từ xa đơn giản như làm việc
với các đối tượng cục bộ.
Điều này có thể có được thông qua sự phân chia hệ thống RMI thành hai
thành phần, stub và skeleton.
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 10
Phân Tán Đối Tượng Với RMI
Các lớp và giao tiếp trong gói
java.rmi
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 11
Giao tiếp Remote
Giao tiếp rỗng, các giao tiếp hoặc lớp muốn khai báo các phương thức gọi từ xa
phải kế thừa hoặc thực thi giao tiếp này.
Lớp Naming
Truyền tin trực tiếp với một trình đăng ký đang chạy trên server để ánh xạ các
URL rmi://hostname/myObject thành các đối tượng từ xa cụ thể trên host xác
định.
Public static Remote lookup(String url)throws RemotException,
NotBoundException, AccessException, MalformedURLException : Client sử
dụng phương thức này để tìm kiếm một đối tượng từ xa gắn liền với tên đối
tượng.
Public static void bind(String url, Remote object)throws RemotException,
AlreadyBoundException, MalformedURLException, AccessException :
Server sử dụng phương thức để liên kết một tên với một đối tượng ở server khác.
Phân Tán Đối Tượng Với RMI
Các lớp và giao tiếp trong gói
java.rmi
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 12
Lớp Naming
Public static void rebind(String url,Remote obj)throws
RemoteException, AccessException, MalformedURLException : Phương
thức này giống như phương thức bind() ngoại trừ việc là nó gán URL cho đối
tượng ngay cả khi URL đã được gán.
Public static String[] list(String url) throws RemotException : Phương
thức này trảvề một mảng chuỗi, mỗi chuỗi là một URL đã được gắn với một
tham chiếu.
Phân Tán Đối Tượng Với RMI
Các lớp và giao tiếp trong gói
java.rmi.registry
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 13
Giao tiếp Registry và lớp LocateRegistry cho phép các client tìm kiếm các
đối tượng ở xa trên một server theo tên.
Giao tiếp Registry
• bind() để gán một tên với một đối tượng từ xa cụthể
• list() liệt kê tất cảcác tên đã được đăng ký với trình đăng ký
• lookup() tìm một đối tượng từ xa cụthểvới một URL cho trước gắn với nó
• rebind() gán một tên với một đối tượng ởxa khác
• unbind() loại bỏmột tên đã được gán cho một đối tượng ởxa trong trình đăng ký
Registry.REGISTRY_PORT là cổng mặc định để lắng nghe các các yêu cầu. Giá
trị mặc định là 1099.
Phân Tán Đối Tượng Với RMI
Các lớp và giao tiếp trong gói
java.rmi.registry
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 14
Lớp LocateRegistry : Lớp java.rmi.registry.LocateRegistry cho phép
client tìm trong trình đăng ký .
• Public static Registry getRegistry() throws RemoteException
• Public static Registry getRegistry(int port) throws RemoteException
• Public static Registry getRegistry(String host) throws RemoteException
• Public static Registry getRegistry(String host, int port) throws RemoteException
• Public static Registry getRegistry(String host, int port, RMIClientSocketFactory
factory) throws RemoteException
Mỗi phương thức trên trả về một đối tượng Registry được sử dụng để nhận các đối
tượng từ xa thông qua tên.
• Public void LocateRegistry.createRegistry(port) : khởi tạo một trình đăng ký
trên Server
Phân Tán Đối Tượng Với RMI
Cài đặt chương trình
Ví dụ minh họa :
Xây dựng chương trình tính tổng 2 số. Trong đó :
Server đóng vai trò thực hiện tính tổng bằng cách cho phép client triệu gọi
hàm từ xa.
Client triệu gọi hàm tính tổng từ Server và nhận kết quả hiện ra màn hình
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 15
Phân Tán Đối Tượng Với RMI
Xây dựng các file Source
Bước 1: Xây dựng giao diện chứa các phương thức có thể triệu gọi từ xa
public interface Calculator extends Remote{
public int sum(int num1, int num2)throws
RemoteException;
}
Bước 2: Viết lớp thực thi giao tiếp
public class CalculatorImpl implements Calculator{
public CalculatorImpl()throws RemoteException{
super();
}
@Override
public int sum(int num1, int num2)throws
RemoteException{
return num1 + num2;
}
}
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 16
Phân Tán Đối Tượng Với RMI
Xây dựng các file Source (tt)
Bước 3: Viết chương trình cho Server
public class RMIServerDemo {
public static void main(String[] args) throws
RemoteException, UnknownHostException,
MalformedURLException
{
Calculator cal = new CalculatorImpl();
UnicastRemoteObject.exportObject(cal);
Naming.bind("rmi://169.254.80.80/Calculator",
cal);
System.out.println("Server ready for client
requests...");
}
}
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 17
Phân Tán Đối Tượng Với RMI
Xây dựng các file Source (tt)
Bước 4: Viết chương trình cho Client
public class RMIClientDemo {
public static void main(String[] args) throws
IOException, NotBoundException{
BufferedReader user =new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Nhap so 1:");
Integer num1= Integer.parseInt(user.readLine());
System.out.println("Nhap so 2:");
Integer num2= Integer.parseInt(user.readLine());
String name="rmi://169.254.80.80/Calculator";
Calculator cal = (Calculator) Naming.lookup(name);
Integer kq = cal.sum(num1, num2);
System.out.println("Tong =" + kq.toString());
}
}
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 18
Phân Tán Đối Tượng Với RMI
Triển khai ứng dụng
Bước 6: Thực hiện biên dịch các file java, tạo ra các file .class
C:\MyJava>javac Calculator.java
C:\MyJava>javac CalculatorImpl.java
C:\MyJava>javac RMIServerDemo.java
C:\MyJava>javac RMIClientDemo.java
Bước 7: Tạo các lớp trung gian Stub và Skeleton
C:\MyJava>rmic CalculatorImpl //file class
Bước 8: Tổ chức chương trình
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 19
Phía Server Phia Client
Calculator.class Calculator.class
CalculatorImpl.class CalculatorImpl_Stub.class
CalculatorImpl_Stub.class RMIClientDemo.class
RMIServerDemo.class
Phân Tán Đối Tượng Với RMI
Triển khai ứng dụng (tt)
Bước 6: Thực hiện biên dịch các file java, tạo ra các file .class
C:\MyJava>javac Calculator.java
C:\MyJava>javac CalculatorImpl.java
C:\MyJava>javac RMIServerDemo.java
C:\MyJava>javac RMIClientDemo.java
Bước 7: Tạo các lớp trung gian Stub và Skeleton
C:\MyJava>rmic CalculatorImpl //file class
Bước 8: Khởi động phía Server
◦ Khởi động đăng ký
C:\MyJava>start rmiregistry
◦ Khởi động Server
C:\MyJava>start java RMIServerDemo
Bước 9: Chạy chương trình phía Client
C:\MyJava>java RMIClientDemo
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 20
Phân Tán Đối Tượng Với RMI
Tạo ra một trình đăng ký ngay
trong server
public class RMIServerDemo {
public static void main(String[] args) throws
RemoteException, UnknownHostException,
MalformedURLException
{
Calculator cal = new CalculatorImpl();
UnicastRemoteObject.exportObject(cal);
LocateRegistry.createRegistry(1099);
Naming.bind("rmi://169.254.80.80/Calculator",
cal);
System.out.println("Server ready for client
requests...");
}
}
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 21
Phân Tán Đối Tượng Với RMI
Phân Tán Đối
Tượng Với CORBA
MÔ HÌNH CLIENT-SERVER & LẬP TRÌNH SOCKET 22
Giới thiệu về CORBA
Các nhà lập trình luôn mong muốn tìm được một tiếng nói chung cho
tất cả các ngôn ngữ lập trình hiện có.
CORBA (Common Object Request Broker Architecture – kiến trúc
môi giới các đối tượng chung) được hình thành từ một tổ chức nghiên
cứu quốc tế OMG (Object Management Group). Tham vọng của OMG
là đưa ra cách để các đối tượng viết bằng những ngôn ngữ khác nhau
có thể gọi lẫn nhau theo mô hình đốitượng phân tán.
CORBA không phải là một ngôn ngữ lập trình, CORBA là một ngôn
ngữ đặc tiếp (IDL-Interface Description Language)
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA
Phân Tán Đối Tượng Với CORBA
23
Ngôn ngữ đặc tả
Các ngôn ngữ lập trình khác nhau thường có một điểm chung đó chính là lời
gọi thủ tục, hàm, kiểu dữ liệu, tham số truyền vào hàm, trị trả về của hàm.
Điều đầu tiên khi cài đặt hàm là phải khai báo hàm.
Ví dụ:
Trong C/C++: int get_price(char * product)
Trong Basic: function get_price(product as string) as integer
Trong Java: public static int get_price(String product)
Người ta có ý tưởng dùng một ngôn ngữ khái quát để đặc tả các hàm trên
rồi dùng một công cụ dịch hàm sang một ngôn ngữ cụ thể.
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA
Phân Tán Đối Tượng Với CORBA
24
Ngôn ngữ đặc tả (IDL) trong
CORBA
CORBA quy định một tập hợp các mô tả hàm, kiểu dữ liệu, cách khai báo để
đặc tả đối tượng. Đặc tả đối tượng cũng giống như khái niệm giao tiếp
interface trong Java. Nó chỉ mô tả chức năng của đối tượng thông qua hàm,
phương thức, thuộc tính, mà không có bất kỳ cài đặt mã lệnh nào trong
ngôn ngữ đặc tả. Chính vì vậy mà CORBA còn được gọi là ngôn ngữ đặc tả
giao tiếp IDL.
CORBA cung cấp một số tiện ích để dịch một đặc tả sang một ngôn ngữ lập
trình nào đó.
Vídụ:
idl2cpp để dịch sang ngôn ngữ C
idl2pas để dịch sang ngôn ngữ Pascal
idlj (idl2java) để dịch sang ngôn ngữ Java
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA
Phân Tán Đối Tượng Với CORBA
25
Ngôn ngữ đặc tả (IDL) trong
CORBA
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA
Phân Tán Đối Tượng Với CORBA
26
Bảng ánh xạ giữa IDL và JavaIDL CORBA JAVA
module
interface
constant
boolean
char, wchar
octet
string, wstring
short, unsigned short
long, unsigned long
long long, unsigned long long
float
double
enum, struct, union
sequence, array
exception
operation
package
Interface
public static final
boolean
char
byte
String
short
int
long
float
double
class
array
class
method
-Để chuyển từ interface của
Java sang IDL ta dùng lệnh:
rmic –idl
YourObject.class
- Để chuyển từ một đặc tả IDL
sang một interface của Java ta
dùng lệnh:
idlj YourObject.idl
ORB(Object Request Broker)
(đối tượng môi giới trung gian)
ORB được xây dựng độc lập với máy ảo Java (JMV). Tuy nhiên từ Java
1.2 máy ảo Java đã nhúng luôn khả năng ORB và xem như nó là một
phần của Java chuẩn.
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 28
Phân Tán Đối Tượng Với CORBA
ORB(Object Request Broker)
(đối tượng môi giới trung gian)
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 trong RMI.
Stub và Skel được sinh ra từ trình biên dịch dựa vào đặc tả IDL. Ta không cần phải
viết mã lệnh cho lớp Stub và Skel.
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 29
Phân Tán Đối Tượng Với CORBA
QUY TRÌNH XÂY DỰNG ỨNG
DỤNG CORBA
Trên Server
• Đặ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ể (ví dụ dùng trình biên dịch
idlj.exe để chuyển đặc tả của 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 ngôn ngữ Java.
Trên Client
• 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. Tùy 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
• Khi trình khách gọi đối tượng chủ, thực tế lời gọi sẽ 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 đối tượng CORBA trên máy chủ
sẽ thực thi phương thức của nó.
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 30
Phân Tán Đối Tượng Với CORBA
Xây dựng ứng dụng CORBA
trong môi trường Java
Ta thực hiện viết một chương trình Hello World đơn giản. Chương trình
CORBA trên máy client sẽ gọi đối tượng trên máy server. Đối tượng trên
máy server sẽ trả về chuỗi mang lời chào “Hello CORBA”
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 31
Phân Tán Đối Tượng Với CORBA
Công việc phía Server Công việc phía Client
•Xây dựng đặc tả Hello.idl
•Xây dựng đối tượng Hello
bằng idlj và ngôn ngữ Java.
•Khởi động dịch vụ đăng ký
tnameserv.exe
•Viết chương trình cài đặt đối
tượng Hello lên máy chủ.
•Xây dựng chương trình gọi
đối tượng Hello của máychủ.
Công việc phía Server
Chúng ta sẽ xây dựng đối tượng Hello. Đối tượng này sẽ cung cấp phương thức
sayHello().
Bước 1 : đặc tả đối tượng này bằng ngôn ngữ CORBA IDL và lưu trong file
C:\MyCorba\Hello.idl như sau :
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 32
Phân Tán Đối Tượng Với CORBA
interface Hello {
string sayHello();
};
Công việc phía Server
Bước 2 :
Biên dịch file Hello.idl sang ngôn ngữ Java, dùng lệnh
Kết quả thu được các file sau :
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 33
Phân Tán Đối Tượng Với CORBA
idlj –fall Hello.idl
HelloOperations.java Tập tin chuyển đặc tả IDL thành đặc tả interface của Java
Hello.java
Tập tin chuyển lớp giao tiếp đối tượng kiểu Java thành lớp
giao tiếp đối tượng đặc thù trong CORBA
HelloPOA.java Tập tin chứa lớp cài đặt cho đối tượng CORBA
HelloHelper.java Tập tin chứa lớp hỗ trợ các thao tác trên các kiểu dữ liệu
HelloHolder.java
Tập tin chứa lớp hỗ trợ cho việc truyền các tham số out và
inout.
_HelloStub.java
Lớp trung gian giúp giao tiếp với các phương thức được
định nghĩa bằng IDL
Công việc phía Server
Bước 3 :
Muốn cài đặt đối tượng CORBA ta quan tâm đến lớp HelloPOA (lớp chứa cài đặt
cho đối tượng CORBA).
Tạo một lớp HelloImpl hiện thực các phương thức trong file IDL và kết thừa từ
lớp HelloPOA
Lớp HelloPOA nguyên thủy kế thừa từ lớp CORBA.Object, cho nên lớp HelloImpl
được kế thừa từ HelloPOA cũng là một đối tượng CORBA chính thống.
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 34
Phân Tán Đối Tượng Với CORBA
public class HelloImpl extends HelloPOA
{
public String sayHello(){
System.out.println("Client contact !");
return "Hello CORBA";
}
}
Công việc phía Server
Bước 4 :
Xây dựng lớp HelloServer để thực hiện việc khởi động trình môi giới, đăng ký đối
tượng CORBA
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 35
Phân Tán Đối Tượng Với CORBA
public class HelloServer {
public static void main(String args[]) {
try{
// khởi tạo trình môi giới ORB
ORB orb = ORB.init(args, null);
// lấy tham chiếu đến đối tượng RootPOA (bộ điều phối đối
tượng di động)
// và kích hoạt trình quản lý POA
POA rootpoa =
POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
rootpoa.the_POAManager().activate();
Công việc phía Server
Bước 4 :
Xây dựng lớp HelloServer để thực hiện việc khởi động trình môi giới, đăng ký đối
tượng CORBA
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 36
Phân Tán Đối Tượng Với CORBA
// tạo đối tượng CORBA và đăng ký với ORB
HelloImpl helloImpl = new HelloImpl();
helloImpl.setORB(orb);
// tạo đối tượng tham chiếu đến đối tượng CORBA
org.omg.CORBA.Object ref =
rootpoa.servant_to_reference(helloImpl);
Hello href = HelloHelper.narrow(ref);
// lấy tham chiếu đến dịch vụ đăng ký tnameserv
org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService");
Công việc phía Server
Bước 4 :
Xây dựng lớp HelloServer để thực hiện việc khởi động trình môi giới, đăng ký đối
tượng CORBA
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 37
Phân Tán Đối Tượng Với CORBA
//lấy về các thông tin ngữ môitrường
//mà dịch vụ tnameserv đang hoạt động
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
// ràng buộc đối tượng theo tên do dịch vụ tnameserv quảnlý
String name = "Hello";
NameComponent path[] = ncRef.to_name(name);
ncRef.rebind(path, href);
System.out.println("HelloServer ready and waiting...");
// chờ các cuộc triệu gọi từ client
orb.run();
}catch (Exception e) {
System.err.println("ERROR: " + e);
e.printStackTrace(System.out);
}
System.out.println("HelloServer Exiting ...");
}
}
Công việc phía Client
Bước 5 :
Xây dựng lớp HelloClient để thực hiện việc gọi hàm từ xa thông qua CORBA
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 38
Phân Tán Đối Tượng Với CORBA
public class HelloClient
{
static Hello helloImpl;
public static void main(String args[])
{
try{
//tạo đối tượng ORB
ORB orb = ORB.init(args, null);
// lấy đối tượng đăng ký dịch vụ của ORB
org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService");
Công việc phía Client
Bước 5 : (tt)
Xây dựng lớp HelloClient để thực hiện việc gọi hàm từ xa thông qua CORBA
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 39
Phân Tán Đối Tượng Với CORBA
// Lấy thông tin ngữ cảnh của đối tượng đăng ký dịch vụ
NamingContextExt ncRef =
NamingContextExtHelper.narrow(objRef);
// lấy đối tượng tham chiếu thông qua tên và thực thi
String name = "Hello";
helloImpl = HelloHelper.narrow(ncRef.resolve_str(name));
System.out.println("Đã kết nối đượng với :" + helloImpl);
System.out.println(helloImpl.sayHello());
} catch (Exception e) {
System.out.println("ERROR : " + e) ;
e.printStackTrace(System.out);
}
}
}
Biên dịch chương trình
Bước 6 : Để tất cả các file vào một thư mục và biên dịch chương trình
javac *.java
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 40
Phân Tán Đối Tượng Với CORBA
Các file phía Server Các file phía Client
_HelloStub.class _HelloStub.class
Hello.class Hello.class
HelloHelper.class HelloHelper.class
HelloHolder.class
HelloImpl.class
HelloOperations.class HelloOperations.class
HelloPOA.class
HelloServer.class HelloClient.class
Biên dịch chương trình
Bước 7 : Khởi động dịch vụ ORB (trình môi giới trung gian) trên máy Server với
port 1050
start orbd -ORBInitialPort 1050
Bước 8 : Khởi động HelloServer
start java HelloServer -ORBInitialPort 1050 -ORBInitialHost 169.254.80.80
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 41
Phân Tán Đối Tượng Với CORBA
Biên dịch chương trình
Bước 9 : Chạy client
java HelloClient -ORBInitialPort 1050 -ORBInitialHost 169.254.80.80
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 42
Phân Tán Đối Tượng Với CORBA
Biên dịch chương trình
Bước 9 : Chạy client
java HelloClient -ORBInitialPort 1050 -ORBInitialHost 169.254.80.80
QUẢN LÝ ĐỊA CHỈ KẾT NỐI MẠNG TRONG JAVA 43
Phân Tán Đối Tượng Với CORBA
Hết Chương 5
Các file đính kèm theo tài liệu này:
- bai_giang_lap_trinh_java_chuong_5_phan_tan_doi_tuong_trong_j.pdf