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 Open source Subscription version JBoss AS JBoss EAP Application Server 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 – 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 1. Téléchargement de JBoss AS 7 2. Décompression de l’archive 3. Déclaration de la variable d’environnement JBOSS_HOME (sera utilisé par Maven) 4. Vérification de votre JAVA_HOME 5. Lancement possible via le fichier « standalone.bat » Installation : JBOSS_HOME, JBOSS_BASE • JBOSS_HOME – 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 » • Attention de ne « commiter » que les fichiers de configuration . └── project ├── jboss │ ├── modules │ └── standalone │ ├── configuration │ │ ├── logging.properties │ │ └── standalone.xml │ ├── data │ ├── deployments │ └── log ├── pom.xml └── src └── main ├── java └── resources Déploiement cp demo.war $JBOSS_BASE/standalone/deployments 09:37:24, 923 INFO … Deployed « demo.war » . └── project ├── jboss │ ├── modules │ └── standalone │ ├── configuration │ │ ├── logging.properties │ │ └── standalone.xml │ ├── data │ ├── deployments │ └── log ├── pom.xml └── src └── main ├── java └── resources 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 … • • • • • • • Les modules Les modules : Le « classLoader » • Basé sur « Jboss modules » System CL Mod-L Mod-A Server CL Mod-j your.app.war Deployment CL Mod-K Mod-L 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-deploymentstructure.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 1 2 3 User Dependencies : Les modules déclarés dans le fichier « jbossdeployment-structure.xml » et/ou dans le fichier « MANIFEST.MF » Local Resource : WEB-INF/classes et/ou WEB-INF/lib 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> <properties> </configuration> <version.jboss.maven.plugin>7.6.Final</version.jboss.maven.plugin> </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 deployed shutdown deployed undeploy+shutdown undeploy run(+deploy) undeployed stopped shutdown deploy undeployed started 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 : – 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 jar << Interface >> @Default @Alternative jar << Interface >> @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