Tìm hiểu RMIREGISTRY và các cách đăng kí đối tượng
Trước giờ chúng ta vãn sử dụng bộ đăng ký rmiregistry như một dịch vụ tìm kiếm. Các đối tượng chủ muốn trình khách truy tìm được từ xa thì trước hết phải đăng ký với rmiregistry. Bộ đăng ký này là chương trình dịch vụ chạy ở hậu trường ,mở ổ cắm Socket và ...
Trước giờ chúng ta vãn sử dụng bộ đăng ký rmiregistry như một dịch vụ tìm kiếm. Các đối tượng chủ muốn trình khách truy tìm được từ xa thì trước hết phải đăng ký với rmiregistry. Bộ đăng ký này là chương trình dịch vụ chạy ở hậu trường ,mở ổ cắm Socket và lắng nghe các yêu cầu gửi đến cổng mặc định 1099.bạn có thể chỉ định một số cổng khác cổng mặc định
Ví dụ c:j2sdk1.4in>Rmiregistry.exe2003
sẽ chạy dịch vụ đăng ký rmiregistry trên cổng 2003.Đối tượng trên máy chủ có thể đăng ký đến dịch vụ này bằng cách gọi Naming.bind() theo cách :
MmyObject o=new MyObjectImpl();
Naming.bind(“rmi://localhost:2003/myobjectname”,o);
Tiếp đến chương trình trên máy khách sẽ yêu cầu dịch vụ đăng ký trả về tham chiếu đến đối tượng trên máy chủ :
MyObject o=(M yObject) Naming.lookup(“rmi://localhost:2003/myobjectname”);
Cơ chế đăng ký nhiều đối tượng với rmiregistryJava cho phép cơ chế liên lạc với bộ đăng ký rmiregistry để lấy về danh sách các đối tượng hiện rmiregistry đang nắm giữ để bạn tùy nghi sử dụng. Điều này tương tự một cửa hàng có khả năng cung cấp cho bạn nhiều dịch vụ. Muốn biết mình cần thứ gi bạn chỉ ciệc yêu cầu cửa hàng cung cấp danh sách dịch vụ hiện có. Chọn ra một dịch vụ sau đó yêu cầu dịch vụ đó thực hiện chức năng của mình.
Dưới đây là chương trình tìm hiểu danh sách các đối tượng do rmiregistry nắm giữ .Bạn xây dựng chương trình qua các bước sau:
Bước 1:Xây dựng chương trình duyệt rmiregistry.
ví dụ: Traverse.java
import java.rmi.registry.*;
Pubic calss Traverse{
Public static void main (String[] args) throws Exception{
String hostAddr=”127.0.0.1”;
System.out.println(“connecting registry…”);
Registry registruy=LocateRegistry.getregistry(hostAddr);
String objectAvailable[]=registry.list();
System.out.println(“Registry object:”);
For(int i=0;i<objectAvailable.lengh;i++){
System.out.println(“objectAvailable[i]”);
}
}
}
Biên dịch chương trình :
Javac Traverse.java
Bước 2:khởi đọng và đăng ký một số đối tượng rmiregistry.
Khởi động bộ đăng ký :
Start rmiregistry
Đăng ký đối tượng Calculator với bọ đăng ký:
C: miCalculator>java Setup
Đăng ký đối tượng Hello với bộ đăng ký :
C: miByValue>java Setup
Bước 3:Chạy chương trình Traverse:
c: miTraverse>java Traverse
myCalculator
myhello
pingobject
Bạn sẽ liệt kê được tổng cộng 3 đối tượng đã đăng ký với rmiregistry.Chương trình của táử dụng lớp LocateRegistry. Chứa trong gói java.rmi.registry. Bạn cung cấp địa chỉ Ipcủa máy ảo nơi rmiregistry đang chạy, phương thức tĩnh GetRegistry() cua rlớp này sẽ trả về đối tượng registry.
Registry registry=LocateRegistry.getRegistry(hostAddr);
Java cho phép bạn tự tạo bộ đăng cho riêng mình mà không cần dùng đến chương trình rmiregistry.exe. Để tạo bộ đăng ký và tự đăng ký đối tượng bạn gọi phương thức tĩnh createRegistry() của lớp LocateRegistry. Chẳng hạn chương trình setup.java ở ví dụ trên có thể tự đăng ký đố tượng hello theo cách sau:
Ví dụ: Setup.java
Import java.rmi.*;
Import java.rmi.server.*;
Import java.rmi.registry.*;
Public class setup{
Public static void main(String[]args) throws Exception{
LocateRegistry.createRegistry(1099);
helloImpl hello=new HelloImpl();
UnicastRemoteObject.exportObject(hello);
System.out.println(“Registering object…”);
Naming.bind(“rmi:/localhost/myhello”,hello);
System.out.println(“Waiting for client request…”);
}
}
Bạn chỉ cần biên dịch và gọi chương trình java setup của ví dụn trên từ máy chủ. Setup sẽ tự động tạo bộ đăng ký rmiregistry ở cổng mặc định 1099 sau đó tự đăng ký đối tượng với rmiregistry do mình tạo ra. Tuy nhiên cách này chỉ có thể áp dụng một đối tượng. Nếu một đối tượng nào đó đã tạo ra bộ đăng ký rồi thì bạn không được goi LocateRegistry.createRegistry() lần thứ hai trên cùng một cổng của máy chủ. Bạn phảI tạo một cổng khác cho bộ đăng ký