Skip to content
Alice doe edited this page Jul 5, 2018 · 12 revisions

Porjet WildFly - JavaEE - Jaxrs - Hibernate - Rest : Manuel d'exploitation

Petit wiki de référence pour ne rien oublier, le but de ce projet créer une application basé sur des containers dockers :

  • Container WildFly : backend API rest / Hibernate
  • Container MariaDB : la base de donnée
  • dans un futur proportionnel en temps aux misères que je rencontrerais un frontend en Angular 5 (si ça ce trouve d'ici là on en sera au 8 ...)
  1. Docker MariaDB
  2. Docker Wildfly
  3. Projet Eclipse
  4. Api REST

docker run --name mariadb-container -v /opt/mariadb:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=rootpassword -d mariadb-utf8:latest

Rien de sorcier ici on créé un container que l'on nommera mariadb-container on ajoute un volume afin de ne pas perdre le contenu de la base quand on éteins le container /opt/mariadb:/var/lib/mysql il faut paramétrer un mot de passe root MYSQL_ROOT_PASSWORD=rootpassword et ensuite indiquer le nom de l'image sur laquelle on se base mariadb-utf8:latest

Une fois le container en route il faut créer une base dbschema vu que le container wildfly tentera de s'y connecter par la suite.

Nous allons créer une image docker personnalisée qui correspondra à nos besoins afin de nous baser dessus pour faire notre container. Pour cela nous avons besoins :

  • un fichier Dockerfile : wildfly/
  • un fichier entrypoint afin de créer notre propre script d'entrypoint : wildfly/bin/ ce fichier sert à créer des variables qui récupère les informations de la base de donnée indiqué dans le Dockerfile cela évite de les répéter
  • un fichier script ainsi que le fichier cli de config pour paramétrer la connexion à la BDD dans wildfly
  • le jar driver pour la connexion à la base MariaDB ainsi que le fichier module.xml comprenant la déclaration des modules pour gérer le javax et le drivers mariaDB : modules/system/layers/base/org/mariadb/driver/main/ ainsi que des divers fichiers/scripts nécessaires à cette personnalisation, tout se trouve dans le répertoire wildfly.

Via la commande docker build --tag=wildfly-image . nous créons notre image puis nous créons le container via docker run --name wildfly-cont -it wildfly-image

Pour récupérer l'ip du container : docker inspect -f '{{ .NetworkSettings.IPAddress }}' nomducontainer

Notre application est basé sur un projet Maven, décomposons le fichier POM :

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.wildfly.bom</groupId>
            <artifactId>wildfly-javaee7-with-tools</artifactId>
            <version>${wildfly.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
  • Quand l'application est compilé elle sera déployé sur notre serveur wildfly directement grâce au wildfly-maven-plugin :
<plugin>
    <groupId>org.wildfly.plugins</groupId>
    <artifactId>wildfly-maven-plugin</artifactId>
    <version>${wildfly.plugins.version}</version>
    <executions>
        <execution>
            <id>deploy-webapp</id>
            <phase>install</phase>
            <goals>
                <goal>deploy</goal>
            </goals>
            <configuration>
                <hostname>172.17.0.3</hostname>
                <port>9990</port>   							
                <username>admin</username>
                <password>admin</password>
            </configuration>
        </execution>
    </executions>
</plugin>
   <dependency>		    
        <groupId>org.jboss.resteasy</groupId>
	<artifactId>resteasy-jaxrs</artifactId>
   </dependency>
   <dependency>
	<groupId>org.jboss.spec.javax.ejb</groupId>
	<artifactId>jboss-ejb-api_3.2_spec</artifactId>
	<scope>provided</scope>
   </dependency>

Chaque entité a son endpoint qui possède un @ejb authentification chargé de vérifier les droits de l'utilisateur vis à vis de chaque endpoint & un @ejb response pour l'entité charger d'utiliser le service adéquat et renvoyer la réponse