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