JBoss AS & EAP en développement
Sommaire Introduction Les modules Les plugins Configuration serveur Ecosystème Infinispan Troubleshooting Tests Ressources
Introduction
JBoss AS / JBoss EAP JBoss AS Application Server Open source Subscription version JBoss AS Application Server JBoss EAP Enterprise Application Platform Strong security requirment Includes documentation, training, multi year maintenance policies, guaranteed patches, updates, hot fixes, legal assurance, and award-winning support. http://www.redhat.com/en/technologies/jboss-middleware/community-or-enterprise
JBoss AS / JBoss EAP
Architecture JBoss Standalone Domain 1 seule JVM Administré individuellement Domain Multi JVM, multi serveur Notion de « host controller » et « domain controller » Administration centralisée
Architecture JBoss : Le mode « domain » 3 types d'acteurs : Des serveurs JBoss sur lesquels sont déployées les applications Un « host controller » par serveur, chacun contrôlant les serveurs JBoss Un « domain controller » permettant de piloter l'ensemble de l'environnement (cycle de vie, configuration, …)
Installation Téléchargement de JBoss AS 7 Décompression de l’archive Déclaration de la variable d’environnement JBOSS_HOME (sera utilisé par Maven) Vérification de votre JAVA_HOME Lancement possible via le fichier « standalone.bat »
Installation : JBOSS_HOME, JBOSS_BASE Dossier d’installation de JBoss Ne doit « jamais » être modifié JBOSS_BASE Correspond au répertoire /jboss de votre projet Contient : La configuration JBoss (standalone.xml, …) Les modules personnalisés (BC, mysql, …) Les « logs » du serveur …
Structure d’un projet JBOSS_BASE correspond au répertoire « jboss » . └── project ├── jboss │ ├── modules │ └── standalone │ ├── configuration │ │ ├── logging.properties │ │ └── standalone.xml │ ├── data │ ├── deployments │ └── log ├── pom.xml └── src └── main ├── java └── resources JBOSS_BASE correspond au répertoire « jboss » Attention de ne « commiter » que les fichiers de configuration
Déploiement . └── project ├── jboss │ ├── modules │ └── standalone │ ├── configuration │ │ ├── logging.properties │ │ └── standalone.xml │ ├── data │ ├── deployments │ └── log ├── pom.xml └── src └── main ├── java └── resources cp demo.war $JBOSS_BASE/standalone/deployments 09:37:24, 923 INFO … Deployed « demo.war »
Déploiement : Les états Undeploy currently deployed content : rm $JBOSS_BASE/standalone/deployments/demo.war.deployed https://docs.jboss.org/author/display/AS7/Application+deployment
Archetype Maven Archetype = Template de projet Le plugin Maven « jboss-as-maven-plugin » pré-configuré La watchService Un logback pré-configuré La « Kanazination » Modules pré-configurés (configuration, MySQL, BC) Mise en place de la console de management de JBoss Mise en place de la console d’administration de la base de données H2 … mvn archetype:generate -DgroupId=votreGroupId -DartifactId=votreArtifactID -Dversion=1.0.0-SNAPSHOT -DarchetypeGroupId=com.worldline.bfi.ita -DarchetypeArtifactId=archetype-war-ita-jboss -DarchetypeVersion=1.0.1 -DinteractiveMode=false http://cookbook-ita.apps.zone52.org/jboss#Archetype_Maven
Les modules
Les modules : Le « classLoader » Basé sur « Jboss modules » your.app.war Mod-L Mod-A Mod-j Mod-K System CL Server CL Deployment CL Hierarchical CL Modular CL Alexis Hassler, Devoxx 2013 : Le classpath n'est pas mort, mais presque
Les modules JDBC (MySQL) Bouncy Castle Externalisation des fichiers de configuration Apache Lucene / Hibernate Search … http://cookbook-ita.apps.zone52.org/jboss#Modules
Les modules : Pourquoi ? Librairies utilisées au démarrage (Divers JDBC) Mutualisation entre plusieurs « webapp » Surcharge d’une implémentation géré par JBoss (non recommandé)
Les modules : Création Exemple : Création du module « com.mysql » : Création de l’arborescence JBOSS_BASE/modules/com/mysql/main Création du fichier module.xml Ajout du jar mysql └── jboss └── modules ├── com └── mysql └── main ├── module.xml └── mysql-connector-java-5.1.22.jar
Les modules : Création <?xml version="1.0" encoding="UTF-8"?> <module xmlns="urn:jboss:module:1.0" name="com.mysql"> <resources> <resource-root path="mysql-connector-java-5.1.22.jar"/> </resources> <dependencies> <module name="javax.api"/> <module name="javax.transaction.api"/> </dependencies> </module> http://www.mastertheboss.com/jboss-frameworks/maven-tutorials/jboss-maven/maven-jboss-as-7-plugin-tutorial?showall=&start=1
Les modules : Déclaration explicite Les dépendances explicites doivent être déclarées dans : jboss-deployment-structure.xml META-INF/MANIFEST.MF <?xml version="1.0" encoding="UTF-8"?> <jboss-deployment-structure> <deployment> <dependencies> <module name="net.atos.configuration"/> </dependencies> </deployment> </jboss-deployment-structure> Dependencies: net.atos.configuration
Les modules : Déclaration explicite <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <configuration> <archive> <manifestEntries> <Dependencies>net.atos.configuration</Dependencies> </manifestEntries> </archive> </configuration> </plugin>
Les modules : Déclaration implicite META/ejb-jar.xml, @Stateless, @Stateful, @MessageDriven, … →import javaee.api module @PersistenceUnit, @PersistenceContext, <persistence-unit-ref>, <persistence-context-res>, … → import javaee.api module → import org.jboss.as.jpa module → import org.hibernate module → import org.javaassit module https://docs.jboss.org/author/display/AS7/Implicit+module+dependencies+for+deployments
Les modules : Déclaration implicite
Les modules : Déclaration implicite <?xml version="1.0" encoding="UTF-8"?> <jboss-deployment-structure> <deployment> <exclude-subsystems> <subsystem name="jaxrs"/> </exclude-subsystems> </deployment> </jboss-deployment-structure> Permet de désactiver le module jaxrs (RESTEasy)
ClassLoader : Ordre de priorité System Dependencies : Les modules implicites User Dependencies : Les modules déclarés dans le fichier « jboss-deployment-structure.xml » et/ou dans le fichier « MANIFEST.MF » Local Resource : WEB-INF/classes et/ou WEB-INF/lib 1 2 3
Les plugins
Les plugins jboss-as-maven-plugin Maven Clean Plugin jboss-mods
Les plugins : jboss-as-maven-plugin Nombreux « goal » à disposition : run, shutdown, deploy, redeploy, undeploy, … Configuration simple mais extrêmement complète Permet de configurer : JBOSS_HOME (variable d’environnement) JBOSS_BASE Les options de la JVM Le répertoire des modules personnalisés … Pas de rechargement à chaud https://docs.jboss.org/jbossas/7/plugins/maven/latest/
Les plugins : jboss-as-maven-plugin <plugin> <groupId>org.jboss.as.plugins</groupId> <artifactId>jboss-as-maven-plugin</artifactId> <version>${version.jboss.maven.plugin}</version> <configuration> <jbossHome>${jboss.home.dir}</jbossHome> <jvmArgs>-Djboss.server.base.dir=${jboss.base.dir}/standalone</jvmArgs> <modules-path> <paths> <path>${jboss.base.dir}/modules</path> <path>${jboss.home.dir}/modules</path> </paths> </modules-path> </configuration> </plugin> <properties> <version.jboss.maven.plugin>7.6.Final</version.jboss.maven.plugin> <jboss.home.dir>${env.JBOSS_HOME}</jboss.home.dir> <jboss.base.dir>${project.basedir}/jboss</jboss.base.dir> </properties> https://docs.jboss.org/jbossas/7/plugins/maven/latest/
Les plugins : jboss-as-maven-plugin jboss-as:run -> jboss-as:undeploy -> jboss-as:shutdown jboss-as:run -> jboss-as:redeploy Dans le fichier « standalone.xml » : <deployments> <deployment name="demo.war" runtime-name= "demo.war"> <content sha1="c42ebac74d8a9a39c3fb804bd40f3b902b3340a8"/> </deployment> </deployments>
Les plugins : jboss-as-maven-plugin stopped started deployed shutdown deployed undeploy+shutdown undeploy deploy run(+deploy) undeployed undeployed shutdown
Les plugins : Maven Clean Plugin <plugin> <artifactId>maven-clean-plugin</artifactId> <version>2.5</version> <configuration> <filesets> <fileset> <directory>jboss/standalone/configuration/standalone_xml_history</directory> </fileset> <fileset> <directory>jboss/standalone/data</directory> </fileset> <fileset> <directory>jboss/standalone/tmp</directory> </fileset> <fileset> <directory>jboss/standalone/log</directory> </fileset> </filesets> </configuration> </plugin> http://maven.apache.org/plugins/maven-clean-plugin/
Les plugins : jboss-mods Problème : Il est déconseillé de « commiter/pusher » des « jar » sur un SCM Solutions : Configurer convenablement les fichiers .svnignore / .hgignore / .gitignore Utiliser le plugin « jboss-mods » https://kazan.priv.atos.fr/xwiki/wiki/jbossmodsxwiki1
Configuration serveur
Configuration Centralisée dans le fichier « standalone.xml » (ou « domain.xml ») : DataSource Port Propriétés systeme ...
Configuration : Définition d’une datasource Nom de la jta-data-source (persistence.xml) <subsystem xmlns="urn:jboss:domain:datasources:1.2"> <datasources> <datasource jndi-name="java:jboss/datasources/jbossDS" pool-name= " jbossDS" enabled="true" use-java-context="true"> <connection-url>jdbc:mysql://localhost:3306/jboss</connection-url> <driver>mysql</driver> <security> <user-name>root</user-name> <passwprd>root</password> </security> </datasource> <drivers> <driver name="mysql" module="com.mysql"/> </drivers> </datasources> </subsystem> Nom du module à utiliser Configuration via le plugin : https://docs.jboss.org/jbossas/7/plugins/maven/latest/examples/complex-example.html
Configuration : Configuration des ports <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}"> <socket-binding name="management-native" interface="management" port="${jboss.management.native.port:9999}"/> <socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/> <socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9443}"/> <socket-binding name="ajp" port="8009"/> <socket-binding name="http" port="8081"/> <socket-binding name="https" port="8443"/> … </socket-binding-group> ./standalone.sh -Djboss.socket.binding.port-offset=100
Configuration : Administration API Java (The native management API) CLI (Command Line Interface) Web-based console (http://<host>:9990/console) API HTTP/JSON
Ecosystème
JBOSS_HOME\modules\system\layers\base JBoss Enterprise Application Platform Component Details
http://www.jboss.org/projects/
Infinispan « key/value data store and data grid platform » JSR 107 (JCache) JSR 347 (Data Grids for the Java Platform) Cache local Cache distribué (réplication ou distribution)
Infinispan Utilisations : Features : Comme cache : Hibernate, Lucene, HTTP session, cache applicatif, … Comme data grid Features : Persistence (JDBC, JPA, MongoDB, …) Transaction Query Map/Reduce http://cookbook-ita.apps.zone52.org/using-infinispan-as-hibernate-second-level-cache-provider
Infinispan : Cache et CDI public class Config { @SampleCache @ConfigureCache("sample-cache") @Produces public Configuration greetingCache() { return new ConfigurationBuilder() .eviction() .strategy(EvictionStrategy.LRU) .maxEntries(1000) .build(); } } public class Service { @Inject @SampleCache private Cache<String, String> cache; … } http://infinispan.org/docs/5.3.x/user_guide/user_guide.html#_cdi_support
Infinispan : JCache JSR 107 : API Java permettant de gérer le cache de façon standard 4 Annotations à disposition : @CacheResult : Caches the result of a method call @CachePut : Caches a method parameter @CacheRemove : Removes an entry from a cache @CacheRemoveAll : Removes all entries from a cache http://infinispan.org/docs/5.3.x/user_guide/user_guide.html#_use_jcache_caching_annotations
Infinispan : JCache @CacheResult(cacheName = "sample-cache") public String result(String value) { return value; } @CachePut(cacheName = "sample-cache") public void put(@CacheKey long id, @CacheValue String value) { } @CacheRemove(cacheName = "sample-cache") public void remove(@CacheKey long id) { } @CacheRemoveAll(cacheName = "sample-cache") public void removeAll() { } https://kazan.priv.atos.fr/share/data/technical-user-paylib/cookbook-sample/jboss-cache/index.html
Infinispan : La suite…
Troubleshooting + beans.xml + apache-deltaspike.properties + beans.xml jar jar << Interface >> << Interface >> @Default @Alternative @Alternative @Alternative http://deltaspike.apache.org/documentation/spi.html#_global_alternative
Tests @RunWith(EJBContainerRunner.class) – openejb-junit Arquillian @RunWith(CdiTestRunner.class) – DeltaSpike Test-Control Module …
Ressources https://github.com/jboss-developer/jboss-eap-quickstarts https://wiki.priv.atos.fr/wiki/index.php/JBoss_Application_Server http://cookbook-ita.apps.zone52.org/?s=jboss https://docs.jboss.org/author/display/AS7/Documentation http://www.mastertheboss.com
Remarques/Questions