Java RMI - Aplikasi Database

Pada bab sebelumnya, kami membuat contoh aplikasi RMI di mana klien memanggil metode yang menampilkan jendela GUI (JavaFX).

Pada bab ini, kita akan mengambil contoh untuk melihat bagaimana program klien dapat mengambil record dari sebuah tabel di database MySQL yang berada di server.

Asumsikan kita memiliki tabel bernama student_data di database details seperti gambar dibawah.

+----+--------+--------+------------+---------------------+ 
| ID | NAME   | BRANCH | PERCENTAGE | EMAIL               | 
+----+--------+--------+------------+---------------------+ 
|  1 | Ram    | IT     |         85 | [email protected]    | 
|  2 | Rahim  | EEE    |         95 | [email protected]  | 
|  3 | Robert | ECE    |         90 | [email protected] | 
+----+--------+--------+------------+---------------------+

Asumsikan nama pengguna adalah myuser dan kata sandinya adalah password.

Membuat Kelas Siswa

Membuat Student kelas dengan setter dan getter metode seperti yang ditunjukkan di bawah ini.

public class Student implements java.io.Serializable {   
   private int id, percent;   
   private String name, branch, email;    
  
   public int getId() { 
      return id; 
   } 
   public String getName() { 
      return name; 
   } 
   public String getBranch() { 
      return branch; 
   } 
   public int getPercent() { 
      return percent; 
   } 
   public String getEmail() { 
      return email; 
   } 
   public void setID(int id) { 
      this.id = id; 
   } 
   public void setName(String name) { 
      this.name = name; 
   } 
   public void setBranch(String branch) { 
      this.branch = branch; 
   } 
   public void setPercent(int percent) { 
      this.percent = percent; 
   } 
   public void setEmail(String email) { 
      this.email = email; 
   } 
}

Mendefinisikan Antarmuka Jarak Jauh

Tentukan antarmuka jarak jauh. Di sini, kami mendefinisikan antarmuka jarak jauh bernamaHello dengan metode bernama getStudents ()di dalamnya. Metode ini mengembalikan daftar yang berisi objek kelasStudent.

import java.rmi.Remote; 
import java.rmi.RemoteException; 
import java.util.*;

// Creating Remote interface for our application 
public interface Hello extends Remote {  
   public List<Student> getStudents() throws Exception;  
}

Mengembangkan Kelas Implementasi

Buat kelas dan implementasikan yang dibuat di atas interface.

Di sini kami menerapkan getStudents() metode dari Remote interface. Ketika Anda memanggil metode ini, itu mengambil catatan dari tabel bernamastudent_data. Menyetel nilai-nilai ini ke kelas Student menggunakan metode penyetelnya, menambahkannya ke objek daftar dan mengembalikan daftar itu.

import java.sql.*; 
import java.util.*;  

// Implementing the remote interface 
public class ImplExample implements Hello {  
   
   // Implementing the interface method 
   public List<Student> getStudents() throws Exception {  
      List<Student> list = new ArrayList<Student>();   
    
      // JDBC driver name and database URL 
      String JDBC_DRIVER = "com.mysql.jdbc.Driver";   
      String DB_URL = "jdbc:mysql://localhost:3306/details";  
      
      // Database credentials 
      String USER = "myuser"; 
      String PASS = "password";  
      
      Connection conn = null; 
      Statement stmt = null;  
      
      //Register JDBC driver 
      Class.forName("com.mysql.jdbc.Driver");   
      
      //Open a connection
      System.out.println("Connecting to a selected database..."); 
      conn = DriverManager.getConnection(DB_URL, USER, PASS); 
      System.out.println("Connected database successfully...");  
      
      //Execute a query 
      System.out.println("Creating statement..."); 
      
      stmt = conn.createStatement();  
      String sql = "SELECT * FROM student_data"; 
      ResultSet rs = stmt.executeQuery(sql);  
      
      //Extract data from result set 
      while(rs.next()) { 
         // Retrieve by column name 
         int id  = rs.getInt("id"); 
         
         String name = rs.getString("name"); 
         String branch = rs.getString("branch"); 
         
         int percent = rs.getInt("percentage"); 
         String email = rs.getString("email");  
         
         // Setting the values 
         Student student = new Student(); 
         student.setID(id); 
         student.setName(name); 
         student.setBranch(branch); 
         student.setPercent(percent); 
         student.setEmail(email); 
         list.add(student); 
      } 
      rs.close(); 
      return list;     
   }  
}

Program Server

Program server RMI harus mengimplementasikan antarmuka jarak jauh atau memperluas kelas implementasi. Di sini, kita harus membuat objek jarak jauh dan mengikatnya keRMI registry.

Berikut adalah program server dari aplikasi ini. Di sini, kami akan memperluas kelas yang dibuat di atas, membuat objek jarak jauh dan mendaftarkannya ke registri RMI dengan nama bindhello.

import java.rmi.registry.Registry; 
import java.rmi.registry.LocateRegistry; 
import java.rmi.RemoteException; 
import java.rmi.server.UnicastRemoteObject; 

public class Server extends ImplExample { 
   public Server() {} 
   public static void main(String args[]) { 
      try { 
         // Instantiating the implementation class 
         ImplExample obj = new ImplExample(); 
    
         // Exporting the object of implementation class (
            here we are exporting the remote object to the stub) 
         Hello stub = (Hello) UnicastRemoteObject.exportObject(obj, 0);  
         
         // Binding the remote object (stub) in the registry 
         Registry registry = LocateRegistry.getRegistry(); 
         
         registry.bind("Hello", stub);  
         System.err.println("Server ready"); 
      } catch (Exception e) { 
         System.err.println("Server exception: " + e.toString()); 
         e.printStackTrace(); 
      } 
   } 
}

Program Klien

Berikut adalah program klien dari aplikasi ini. Di sini, kami mengambil objek jarak jauh dan menjalankan metode bernamagetStudents(). Ini mengambil catatan tabel dari objek daftar dan menampilkannya.

import java.rmi.registry.LocateRegistry; 
import java.rmi.registry.Registry; 
import java.util.*;  

public class Client {  
   private Client() {}  
   public static void main(String[] args)throws Exception {  
      try { 
         // Getting the registry 
         Registry registry = LocateRegistry.getRegistry(null); 
    
         // Looking up the registry for the remote object 
         Hello stub = (Hello) registry.lookup("Hello"); 
    
         // Calling the remote method using the obtained object 
         List<Student> list = (List)stub.getStudents(); 
         for (Student s:list)v { 
            
            // System.out.println("bc "+s.getBranch()); 
            System.out.println("ID: " + s.getId()); 
            System.out.println("name: " + s.getName()); 
            System.out.println("branch: " + s.getBranch()); 
            System.out.println("percent: " + s.getPercent()); 
            System.out.println("email: " + s.getEmail()); 
         }  
      // System.out.println(list); 
      } catch (Exception e) { 
         System.err.println("Client exception: " + e.toString()); 
         e.printStackTrace(); 
      } 
   } 
}

Langkah-langkah untuk Menjalankan Contoh

Berikut adalah langkah-langkah menjalankan Contoh RMI kami.

Step 1 - Buka folder tempat Anda menyimpan semua program dan kompilasi semua file Java seperti yang ditunjukkan di bawah ini.

Javac *.java

Step 2 - Mulai rmi registri menggunakan perintah berikut.

start rmiregistry

Ini akan memulai rmi registri pada jendela terpisah seperti yang ditunjukkan di bawah ini.

Step 3 - Jalankan file kelas server seperti yang ditunjukkan di bawah ini.

Java Server

Step 4 - Jalankan file kelas klien seperti yang ditunjukkan di bawah ini.

java Client