Lập trình phân tán với Java RMI (Bài 7)
Lập trình phân tán với java rmi (Remote Method Invocation) xoay quanh công nghệ client – server nơi môt số chương trình khách giao tiếp với một hoặc nhiều ứng dụng máy chủ. Và đây là công nghệ cho phép các ứng dụng Java hỗ trợ kiến trúc tính toán phân tán.
Lập trình phân tán với java rmi – Kiến trúc RMI
Lập trình phân tán với java rmi – Cài đặt RMI
Bước 1: Tạo giao diện (Remote interface)
public interface interface_name extends Remote { //Khai báo những phương thức được gọi từ xa public datatype|void method_name([parameter list]) throws RemoteException; //… }
Bước 2: Tạo lớp cài đặt giao diện (Remote interface)
public class class_name extends UnicastRemoteObject implements interface_name { //Phương thức khởi tạo public class_name() throws RemoteException { } //Cài đặt xử lý cho tất cả các phương thức có trong giao diện public datatype|void method_name([parameter list]) throws RemoteException { //Viết xử lý cho phương thức } //… }
Bước 3: Viết xử lý phía client
//Tạo đối tượng Registry Registry reg = LocateRegistry.getRegistry(servername, portnumber); //Truy xuất remoteObject interface_name remoteObject = (interface_name)reg.lookup(registername); //Gọi phương thức thông qua remoteObject remoteObject.method_name([parameter list]) //…
Bước 4: Viết xử lý phía server
//Tạo đối tượng Registry Registry reg = LocateRegistry.createRegistry(portnumber); //Đăng ký Remote Object class_name remoteObject = new class_name(); reg.bind(registername, remoteObject);
Lập trình phân tán với java rmi – Chương trình mẫu
Bước 1: Tạo interface
package swing_pkg.rmi; import java.rmi.Remote; import java.rmi.RemoteException; /** * * @author giasutinhoc.vn */ public interface ICalculator extends Remote { // Khai báo phương thức tính bình phương public double square(double a) throws RemoteException; }
Bước 2: Tạo lớp cài đặt interface
package swing_pkg.rmi; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; /** * * @author giasutinhoc.vn */ public class CalculatorImpl extends UnicastRemoteObject implements ICalculator{ // Khai báo phương thức khởi tạo public CalculatorImpl() throws RemoteException{ } // Viết xử lý cho phương thức tính bình phương public double square(double a) throws RemoteException { return a*a; } }
Bước 3: Viết xử lý phía client
Xử lý khi người dùng nhấp chuột vào nút Send
try { // Gọi server đang lắng nghe tại cổng 7777 Registry reg = LocateRegistry.getRegistry("localhost", 7777); // Lấy đối tượng từ xa ICalculator cal = (ICalculator) reg.lookup("RMICalSer"); // Gọi phương thức từ xa double result = cal.square(Double.parseDouble(txtNum.getText())); // Hiển thị kết quả lblResult.setText(String.valueOf(result)); } catch (Exception e) { e.printStackTrace(); }
Bước 4: Xử lý phía server
Xử lý khi người dùng nhấp chuột vào nút Start
try { //Tạo đối tượng Registry Registry reg = LocateRegistry.createRegistry(7777); //Đăng ký Remote Object CalculatorImpl ci = new CalculatorImpl(); reg.bind("RMICalSer", ci); } catch (Exception e) { e.printStackTrace(); }
Hình sau đây mô tả cách hoạt động của ứng dụng mẫu
Lập trình phân tán với java rmi – Bài tập thực hành
Ứng dụng tìm kiếm thông tin sách trong tập tin text
Câu 1: Thiết kế giao diện ứng dụng
Câu 2: Viết xử lý
- Phía server: tìm thông tin sách mà client gửi về. Thông tin sách sẽ được tìm trong tập tin text. Nếu tìm thấy trả về kết quả là true, ngược lại là false.
- Phía client: sau khi người dùng nhập thông tin cần tìm và nhấn nút lệnh “Search”, thực hiện gửi thông tin cần tìm cho server và hiển thị thông báo phù hợp dựa trên kết quả trả về từ server.