Skip to main content

Introduction aux EJB

Les EJB pour Enterprise Java Beans sont un standard de la pateforme JavaEE pour créer des composants serveur.

Serveur d'application

Dans un premier temps, pour exécuter des EJBs il est nécessaire de disposer d'un serveur d'application JavaEE disposant d'un container EJB. Nous allons ici utiliser Wildfly (évolution de JBoss). Commencez donc par télécharger Wildfly 21 sur ce lien. Décompressez ensuite le ZIP téléchargé et placez le à l'emplacement où vous rangez vos outils.

Projet serveur

Création du projet

Pour créer le projet serveur, lancez IntelliJ IDEA et créer un nouveau projet en utilisant le template Java Entreprise.

Capture-d’écran-2020-10-31-125540.png

Dans le choix des dépendances, cochez ensuite Enterprise Java Beans (EJB) ainsi que Servlet :

Capture-d’écran-2020-10-31-125749.png

Terminez ensuite la création de votre projet en renseignant et un nom et un GroupId.

Création de la configuration de déploiement

Créez une nouvelle Run Config à partir du template JBoss Server > Local :

Capture-d’écran-2020-10-31-130424.png

Configurez votre serveur d'application Wildfly dans la rubrique Application Server de votre Run Config. Ensuite dans la rubrique Before Launch ajoutez une action Build Artifact et séléctionnez l'artéfact war exploded de votre projet.

Création des EJBs

Maintenant que le serveur est configuré nous pouvons créer notre premier EJB. Pour ce faire créez un package sessionBeans. Dans ce package créez une interface pour votre EJB :

@Remote
public interface GestionContactRemote {
    public String coucouContact(String nomContact);
}

Créez ensuite votre classe EJB qui implémente cette interface :

@Stateless(mappedName="ContactBean")
public class GestionContactBean implements GestionContactRemote {
    public String coucouContact(String nomContact) {
        return "Coucou, "+nomContact;
    }
}

Une fois ceci fait, lancez votre projet à l'aide de la Run Config créée plus tôt. Regardez ensuite les logs du serveur Wildfly dans l'interface d'IntelliJ IDEA, vous devriez y voir une ligne affirmant que votre EJB a bien été detecté et ajouté à l'annuaire JNDI. Copiez l'URL qui commence par EJB et gardez là dans un bloc note, elle sera utile plus tard.

Capture-d’écran-2020-10-31-135413.png

Projet Client EJB

Configuration du projet

Pour le client EJB, créez un nouveau projet IntelliJ, cette fois en utilisant le template Maven et en utilisant l'archétype Quickstart. Une fois votre projet généré, rajoutez la dépendance suivante dans votre fichier pom.xml :

<dependency>
  <groupId>org.wildfly</groupId>
  <artifactId>wildfly-ejb-client-bom</artifactId>
  <version>21.0.0.Final</version>
  <type>pom</type>
</dependency>

Mettez à jours vos dépendances Maven, puis ajoutez une Run Config d'application Java normale.

Récupérer les EJB

Dans un premier temps, il faut créer un package sessionBean directement dans le dossier de sources java. Dans ce package, copiez votre interface GestionContactRemote et retirez lui l'annotation @Remote.

Dans la méthode Main ajoutez d'abord le code suivant, afin de configurer la connexion EJB :

final Hashtable<String, String> jndiProperties = new Hashtable<>();
jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory");
if(Boolean.getBoolean("http")) {
  jndiProperties.put(Context.PROVIDER_URL,"http://localhost:8080/wildfly-services");
} else {
  jndiProperties.put(Context.PROVIDER_URL,"remote+http://localhost:8080");
}
final Context context = new InitialContext(jndiProperties);

Ensuite pour récupérer votre EJB, ajouter ce code, en modifiant la string passée à la méthode lookup() par l'URL ejb que nous avons noté tout à l'heure :

final GestionContactRemote ejb = (GestionContactRemote) context.lookup("ejb:/efrei-m1-jakartaee-tp4-ejb-1.0-SNAPSHOT/GestionContactBean!sessionBeans.GestionContactRemote");

Vous pouvez enfin tester votre EJB :

System.out.println(ejb.coucouContact("test"));

Si tout s'est bien passé, vous devriez observer les logs du client EJB dans votre console ainsi que votre afichage :

Capture-d’écran-2020-10-31-140516.png