Skip to main content

Persistance avec JPA

Base de donnée embarquée H2

Dans votre projet serveur, ajoutez les dépendances Maven suivantes :

<dependency>
  <groupId>jakarta.persistence</groupId>
  <artifactId>jakarta.persistence-api</artifactId>
  <version>2.2.3</version>
</dependency>

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-core</artifactId>
  <version>5.4.22.Final</version>
</dependency>

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-entitymanager</artifactId>
  <version>5.4.22.Final</version>
</dependency>

Créez ensuite un nouveau package entityBeans et dedans la classe contact :

@Entity
public class Contact {
  @Id
  @GeneratedValue(strategy= GenerationType.AUTO)
  private long id;
  private String firstName;
  private String lastName;
  private String email;
  public long getId() {return id;}
  public void setId(long l) {id = l;}
  public String getEmail() {return email;}
  public String getFirstName() {return firstName; }
  public String getLastName() {return lastName; }
  public void setEmail(String string) {email = string; }
  public void setFirstName(String string) {firstName = string; }
  public void setLastName(String string) {lastName = string; }
}

Il faut maintenant modifier nos EJB session pour interagir avec la source de données. Modifier votre interface GestionContactRemote (dans le serveur et le client) tel que :

@Remote
public interface GestionContactRemote {
    public String coucouContact(String nomContact);
    public void addContact(String fname, String lname, String email);
    public String findContactNameById(long id);
}

Et dans le serveur modifiez la classe GestionContactBean ainsi :


@Stateless(mappedName="ContactBean")
public class GestionContactBean implements GestionContactRemote {
    @PersistenceContext
    EntityManager em;

    public void addContact(String fname, String lname, String email) {
        Contact contact = new Contact();
        contact.setFirstName(fname);
        contact.setLastName(lname);
        contact.setEmail(email);
        em.persist(contact);
    }

    public String findContactNameById(long id) {
        Contact contact=em.find(Contact.class, id);
        return contact.getLastName() +", "+contact.getFirstName();
    }

    public String coucouContact(String nomContact) {
        return "Coucou, "+nomContact;
    }
}

Ensuite, il faut configurer la source de donnée sur la base embarquée de Wildfly. Pour ce faire, créez un dossier classes dans le dossier WEB-INF et dans ce dossier classes, un dossier META-INF. Enfin dans le dossier META-INF, créer le fichier persistence.xml avec le contenu suivant :

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
             version="1.0">
    <persistence-unit name="EJB3_Entity">
        <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
        <properties>
            <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
        </properties>
    </persistence-unit>
</persistence>

Vous pouvez maintenant déployer votre projet serveur sur votre serveur d'application Wildfly.

Enfin, modifiez le code de votre client pour interagir avec les nouvelles méthodes de l'EJB :

ejb.addContact("John","Shepard","john.shepard@n7.citadel" );
System.out.println(ejb.findContactNameById(1));

Source de données externe : MySQL

Afin d'accèder à une vrai base de données (ici nous allons utiliser MySQL), nous devons configurer un Driver JDBC ainsi qu'une source de donnée JPA. Pour ce faire nous allons avoir besoin d'accèder à la console d'administration de Wildfly.

Dans ce partie on devra accèder au fichier de Wildfly. Par soucis de concision, on désignera sous le nom WILDFLY_HOME le répertoire d'installation de Wildfly.

Créer un utilisateur d'Administration sur Wildfly

Rendez vous dans WILDFLY_HOME/bin et exécutez :

./add-user.bat

Suivez ensuite les instruction pour créér un utilisateur. Lorsqu'on l'on vous demande le type d'utilisateur choisissez Utilisateur d'administration.

Vous pouvez ensuite accèder au panneau d'administration Wildfly via ce lien (Le serveur Wildfly doit être démarré). Les identifiants pour se connecter sont ceux donnés à la création de l'utilisateur.

Configurer le Driver

Commencez par télécharger le Driver JDBC MySQL sur ce lien, décompressez le et récupérez le fichier JAR. Créez ensuite l'arboresence de fichiers suivante dans Wildfly : WILDFLY_HOME/modules/system/layers/base/com/mysql/main. Déposez ensuite à cette endroit le fichier JAR du Driver Mysql JDBC. Créez ensuite au même endroit un fichier module.xml avec le contenu suivant :

<module xmlns="urn:jboss:module:1.5" name="com.mysql">
    <resources>
        <resource-root path="mysql-connector-java-8.0.22.jar" />
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>
</module>

Ensuite démarrez ou redémarrer le serveru Wildfly pour qu'il puisse détecter les changements. Rendez vous ensuite sur l'interface d'administration de Wildfly. Allez à Configuration -> Subsystems -> Datasources & Drivers -> JDBC Drivers et utilisez le boutons +. Dans le formulaire affiché, renseignez les informations suivantes :

  • Driver Name :mysql
  • Drive Module Name : com.mysql
  • Driver Class Name : com.mysql.cj.jdbc.Driver
  • Driver Class Name : com.mysql.cj.jdbc.MysqlXADataSource

Cliquez ensuite sur ajouter.

Configurez la source de donnée

Rendez vous ensuite sur l'interface d'administration de Wildfly. Allez à Configuration -> Subsystems -> Datasources & Drivers -> Datasources et utilisez le boutons + et New Datasource. Suivez ensuite les instructions du wizard en renseignant les informations, notamment les identifiant et l'URL de votre base de donnée. Vous pouvez utiliser le bouton Test Connection pour vérifier que les information son correctes.

Utiliser le nouvelle source de donnée

Dans votre fichier persistence.xml, changer la value de la balise jta-data-source à java:/MySqlDS (ou l'URL que vous avez renseignée à la création de la datasource si vous n'avez pas pris la valeur par défaut). Dans la balise <property name="hibernate.hbm2ddl.auto" value="create-drop"/>, changez l'attribut value à update pour éviter la suppression des données à l'arrêt du serveur.

Voilà c'est terminé, vous pouvez maintenant démarrer votre serveur et votre client afin de tester tout ça.