RMI et Base de données | Java

Dans ce tutoriel nous allons voir comment un programme client peut récupérer les enregistrements d’une table dans une base de données MySQL résidant sur le serveur.

Supposons que nous ayons une table nommée Persone dans une base de données, comme indiqué ci-dessous.

+----+--------+-----+----------+
| ID | NAME   | Age | Address  | 
+----+--------+-----+----------+
|  1 | Alex   | 18  | Paris    |
|  2 | Thomas | 25  | Lille    |
|  3 | Emily  | 30  | Nantes   |
|  4 | Bob    | 45  | Toulouse |
+----+--------+-----+----------+

 
 

Créer la classe Persone

Créez une classe Persone avec les méthodes setter et getter comme indiqué ci-dessous.

import java.io.Serializable;

public class Person implements Serializable {   
   private int id, age;   
   private String name, address;    
  
   public int getId() { 
      return id; 
   } 
   public String getName() { 
      return name; 
   } 
   public String getAddress() { 
      return address; 
   } 
   public int getAge() { 
      return age; 
   } 
   public void setID(int id) { 
      this.id = id; 
   } 
   public void setName(String name) { 
      this.name = name; 
   } 
   public void setAddress(String address) { 
      this.address = address; 
   } 
   public void setAge(int age) { 
      this.age = age; 
   } 
}

 

Définir l’interface de l’objet distante

Ici, nous définissons une interface de l’objet distante nommée « RemoteInter » avec une méthode nommée getPersones(). Cette méthode renvoie une liste qui contient l’objet de la classe Person.

import java.rmi.*; 
import java.util.*;

// Créer l'interface de l'objet distante
public interface RemoteInter extends Remote {  
   public List<Person> getPersones() throws Exception;  
}

 
 

Créer la classe implémentant l’interface de l’objet distante

Créez une classe et implémentez l’interface créée ci-dessus.

Ici, nous implémentons la méthode getPersones() de l’interface créée ci-dessus. Lorsque vous appelez cette méthode, elle récupère les enregistrements de la table nommée Persone. Définit ces valeurs pour la classe Persone à l’aide de ses méthodes de définition, l’ajoute à un objet List et renvoie cette liste.

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

// Implémenter l'interface de l'objet distante
public class ImplClasse implements RemoteInter {  
   
   // Implémenter la méthode de l'interface
   public List<Person> getPersones() throws Exception 
   {  
      List<Person> liste = new ArrayList<Person>();   
        
      Connection conn = null; 
      Statement stmt = null;  
      
      //Enregistrer le pilote JDBC
      Class.forName("com.mysql.jdbc.Driver");   
      
      //Ouvrez une connexion
      System.out.println("Connexion à la base de données sélectionnée..."); 
      conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/my_db", "root", ""); 
      System.out.println("Base de données connectée avec succès...");  
      
      //Exécuter la requête
      System.out.println("Créer l'objet Statement..."); 
      
      stmt = conn.createStatement();  
      String sql = "SELECT * FROM Person"; 
      ResultSet res = stmt.executeQuery(sql);  
      
      //Extraire des données de ResultSet
      while(res.next()) {
         // Récupérer par nom de colonne
         int id = res.getInt("id"); 
         int age = res.getInt("age");
         String name = res.getString("name"); 
         String address = res.getString("address"); 
         
         // Définir les valeurs
         Person p = new Person(); 
         p.setID(id); 
         p.setAge(age); 
         p.setName(name); 
         p.setAddress(address); 
         liste.add(p); 
      }
      res.close(); 
      return liste;     
   }  
}

 

Programme Serveur

Le programme serveur doit hériter la classe qui implémente l’interface de l’objet distante. Ici, nous devons créer un objet distant et le lier au registre RMI.

Voici le programme serveur de cette application. Ici, nous allons hériter la classe créée ci-dessus, créer un objet distant et l’enregistrer dans le registre RMI avec le nom associé à cet objet « RemoteInter ».

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

public class Server extends ImpClasse { 

   public Server() {} 
   
   public static void main(String args[]) { 
      try { 
         // crée l'objet distant
         ImpClasse obj = new ImpClasse(); 

         // ici, nous exportons l'objet distant vers le stub
         RemoteInter stub = (RemoteInter) UnicastRemoteObject.exportObject(obj, 0);  

         // Liaison de l'objet distant (stub) dans le Registre
         Registry reg = LocateRegistry.getRegistry(); 

         reg.bind("RemoteInter", stub);  
         System.out.println("Le Serveur est prêt..."); 
      } catch (Exception e) { 
         System.err.println(e.toString()); 
         e.printStackTrace(); 
      } 
   } 
}

 
 

Programme Client

Voici le programme client de cette application. Ici, nous récupérons l’objet distant et appelons la méthode nommée getPersones(). Il récupère les enregistrements de la table de l’objet List et les affiche.

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 { 
         // Récupérer le registre
         Registry reg = LocateRegistry.getRegistry(null); 
    
         // Recherche dans le registre de l'objet distant
         RemoteInter stub = (RemoteInter) reg.lookup("RemoteInter"); 
    
         // Appel de la méthode distante à l'aide de l'objet obtenu
         List<Person> liste = (List)stub.getPersones(); 
		 
         for (Person p : liste) {
            System.out.println("ID: " + p.getId());
            System.out.println("Name: " + p.getName()); 
            System.out.println("Age: " + p.getAge()); 
            System.out.println("Address: " + p.getAddress()); 
         }
      } catch (Exception e) {
         System.err.println(e.toString()); 
      } 
   } 
}

 

Compiler et exécutez l’application

Vous pouvez compilez tous les fichiers Java en une seule fois. comme indiqué ci-dessous.

> javac *.java


 
 
Démarrez le registre rmi à l’aide de la commande suivante:

> start rmiregistry


 
Exécutez le serveur comme indiqué ci-dessous.

> java Server


 
Exécutez le client comme indiqué ci-dessous.

> java Client


 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *