Phát triển Hệ thống phân tán
Science and TechnologyTham chiếu ngược (Callback) của đối tượng Corba
RMI có khả năng tham chiếu ngược (callback), đó là lời triệu gọi của trình chủ ngược về các đối tượng cài đặt trên máy khách. Đối tượng Corba cũng cho phép bạn thực hiện điều này.
AtServer là đối tượng Corba cài đặt trên máy chủ. AtClient là đối tượng Corba chạy trên máy khách. Chương trình khách triệu gọi AtServer trên máy chủ và gọi tham chiếu của AtClient đến trình chủ. AtServer sử dụng tham chiếu của AtClient để gọi ngược từ máy khách.
Bước 1:
Đặc tả đối tượng AtClient và AtServer bằng ngôn ngữ IDL được khai báo như sau:
Ví dụ 7.1:ClientServer.idl
Interface AtClient{
void callClientMethod(in string message);
};
Interface AtServer{
void registerClient(in AtClient c)
void callServerMethod(in string message);
};
Tập tin Client Server.idl đặc tả cả hai interface cho AtClient và AtServer. Bạn dùng trình biên dich idlj để dịch ClientServer.idl thành các tập tin Java phục vụ cho cả hai phía khách, chủ như sau:
idlj - fserver - oldImplBase ClientServer.idl
idlj - fclient - oldImplBase ClientServer.idl
Bước 2:
Cài đặt AtClient và AtServer. Giao diện (interface) AtClient được cài đặt thành đối tượng Corba AtClientServant còn giao diện AtServer được cài đặt thành đối tượng Corba AtServant như sau:
Ví dụ 7.2: AtClientServant.java
public class AtClientServant extends _AtClientImplBase{
public void callClientMethod(String message){
System.out.println(message);
}
}
Ví dụ 7.3: AtServerServant.java
public class AtServerServant extends _AtServerImplBase
{
AtClient client;
public void registerClient(AtClient c){
client=c;
}
public void callServerMethod(String message){
System.out.println(message);
for ( int i=1;i<10;i++){
String msg="Server response "+ Math.random()*1000;
//Trieu goi phuong thuc cua doi tuong chay tren may khach
client.callClientMethod(msg);
}
}
}
Bước 3:
Xây dựng trình chủ dùng cài đặt và đăng ký đối tượng AtServer trên máy chủ
Ví dụ 7.4:Setup.Java
import org.omg.Corba.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
public class Setup{
public static void main(String [] args)throws Exception{
System.out.println("Corba Client");
//Tao doi tuong AtClient
ORB Orb=ORB.init(args,null);
AtServerServant servant= new AtServerServant();
//ket noi AtClient voi trình môi gioi
Orb.connect(servant);
org.omg.Corba.Object nameService=Orb.resolve_initial_references("NameService");
NamingContext nsContext=NamingContextHelper.narrow(nameService);
NameComponent nc= new NameComponent("AtServerObject","");
NameComponent path[]={nc};
nsContext.rebind(path,servant);
//Tao doi tuong Java
java.lang.Object obj=new java.lang.Object();
//VOng lap vo tận chờ nhân yêu cầu của máy khách
synchronized (obj){
obj.wait();
}
}
}
Bước 4:
Cài đặt trình khách,triệu gọi đối tượng AtServer trên máy chủ
import org.omg.Corba.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
public class Client{
public static void main(String [] args)throws Exception{
System.out.println("Corba Client");
//Tao doi tuong AtClient
ORB Orb=ORB.init(args,null);
AtClientServant clientservant= new AtClientServant();
//ket noi AtClient voi trình môi gioi
Orb.connect(clientservant);
/*Yêu cau dich vu COS Naming truy tìm tham chieu cua AtServer thông qua tên g\u1ECDi” AtServerObject”*/
org.omg.Corba.Object nameService=Orb.resolve_initial_references("NameService");
NamingContext nsContext=NamingContextHelper.narrow(nameService);
NameComponent nc=new NameComponent("AtServerObject","");
NameComponent path[]={nc};
AtServer Serverservant=AtServerHelper.narrow(nsContext.resolve(path));
Serverservant.registerClient(clientservant);
//Trieu goi doi tuong chu
Serverservant.callServerMethod("Client request");
}
}
Bước 5:
Biên dịch và chạy chương trình
Với chương trình bên server
javac *.java
start tnameserv
java Setup
Với chương trình bên Client
javac *.java
start tnameserv
java Client
- Phát triển Hệ thống phân tán
- Chương 1: Các mô hình ứng dụng
- Chương 2: Lập trình phân tán với COM+/MTS
- Chương 3: Lập trình phân tán đối tượng với RMI
- RMI và lập trình phân tán đối tượng
- Cài đặt đối tượng phân tán
- Chuyển tham số trong các lời gọi từ xa
- Tìm hiểu RMIREGISTRY và các cách đăng kí đối tượng
- Dùng một đối tượng sản sinh nhiều đối tượng (FACTORY OBJECT)
- Kỹ thuật gọi đối tượng ở xa bằng phương thức động(DYNAMIC METHOD INVOKE)
- Tự động kích hoạt các đối tượng từ xa (ACTIVATION)
- Trình mồi nạp ứng dụng từ xa
- Ứng dụng RMI
- Chương 4: Lập trình phân tán đối tượng với Corba
- Giới thiệu về Corba
- Ánh xạ giữa ngôn ngữ IDL và Java
- Corba và mô hình phân tán.
- Xây dựng Úng dụng Corba khách/chủ trong môi trường java
- Tìm hiểu JNDI và dịch vụ quản lí trên CosNaming của Corba
- Lưu địa chỉ tham chiếu của đối tượng Corba ở dạng chuỗi
- Tham chiếu ngược (Callback) của đối tượng Corba
- Gọi các phương thức động (Dynamic Method Call) của đối tượng Corba
- RMI trên IIOP (RMI-OVER-IIOP)
- Corba và trình môi giới VISIBROKER
- Chương 5: Lập trình phân tán REMOTING trong .NET
- Chương 6: Lập trình phân tán với WEB SERVICE