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

lap trinh phan tan voi java rmi 1

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

lap trinh phan tan voi java rmi 3

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

lap trinh phan tan voi java rmi 4

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

lap trinh phan tan voi java rmi 5

lap trinh phan tan voi java rmi 6

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.

lap trinh phan tan voi java rmi 7

lap trinh phan tan voi java rmi 8