Java RMI - Veritabanı Uygulaması

Önceki bölümde, bir istemcinin bir GUI penceresi (JavaFX) görüntüleyen bir yöntemi çağırdığı örnek bir RMI uygulaması oluşturduk.

Bu bölümde, bir istemci programının sunucuda bulunan MySQL veritabanındaki bir tablonun kayıtlarını nasıl alabileceğini görmek için bir örnek alacağız.

Adında bir tablomuz olduğunu varsayalım student_data veritabanında details Aşağıda gösterildiği gibi.

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

Kullanıcının adını varsayalım myuser ve şifresi password.

Öğrenci Sınıfı Oluşturmak

Oluşturmak Student ile sınıf setter ve getter aşağıda gösterildiği gibi yöntemler.

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; 
   } 
}

Uzak Arayüzü Tanımlama

Uzak arabirimi tanımlayın. Burada, adında bir uzak arabirim tanımlıyoruzHello adlı bir yöntemle getStudents ()içinde. Bu yöntem, sınıfın nesnesini içeren bir liste döndürürStudent.

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;  
}

Uygulama Sınıfının Geliştirilmesi

Bir sınıf oluşturun ve yukarıda oluşturulanları uygulayın interface.

İşte biz uyguluyoruz getStudents() yöntemi Remote interface. Bu yöntemi çağırdığınızda, adlı bir tablonun kayıtlarını alır.student_data. Ayarlayıcı yöntemlerini kullanarak bu değerleri Öğrenci sınıfına ayarlar, bir liste nesnesine ekler ve bu listeyi döndürür.

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;     
   }  
}

Sunucu Programı

Bir RMI sunucu programı uzak arabirimi uygulamalı veya uygulama sınıfını genişletmelidir. Burada, uzak bir nesne oluşturmalı ve onuRMI registry.

Bu uygulamanın sunucu programı aşağıdadır. Burada, yukarıda oluşturulan sınıfı genişleteceğiz, uzak bir nesne oluşturacağız ve onu bağlama adıyla RMI kayıt defterine kaydedeceğiz.hello.

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(); 
      } 
   } 
}

Müşteri Programı

Bu uygulamanın istemci programı aşağıdadır. Burada, uzak nesneyi getiriyoruz ve adlı yöntemi çağırıyoruz.getStudents(). Liste nesnesinden tablonun kayıtlarını alır ve görüntüler.

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(); 
      } 
   } 
}

Örneği Çalıştırmak için Adımlar

RMI Örneğimizi çalıştırmak için gereken adımlar aşağıdadır.

Step 1 - Tüm programları kaydettiğiniz klasörü açın ve tüm Java dosyalarını aşağıda gösterildiği gibi derleyin.

Javac *.java

Step 2 - Başlat rmi aşağıdaki komutu kullanarak kayıt defteri.

start rmiregistry

Bu bir başlayacak rmi aşağıda gösterildiği gibi ayrı bir pencerede kayıt.

Step 3 - Sunucu sınıfı dosyasını aşağıda gösterildiği gibi çalıştırın.

Java Server

Step 4 - İstemci sınıfı dosyasını aşağıda gösterildiği gibi çalıştırın.

java Client