Vous êtes sur la page 1sur 52

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

Strong security requirment


JBoss AS JBoss EAP
Application Server Enterprise Application Platform

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 └── project
├── jboss
│ ├── modules
• JBOSS_BASE correspond au │ └── standalone
répertoire « jboss » │ ├── configuration
│ │ ├── logging.properties
│ │ └── standalone.xml
│ ├── data
• Attention de ne « commiter » que les │ ├── deployments
fichiers de configuration │ └── log
├── pom.xml
└── src
└── main
├── java
└── resources
.
Déploiement └── project
├── jboss
│ ├── modules
│ └── standalone
│ ├── configuration
cp demo.war $JBOSS_BASE/standalone/deployments │ │ ├── logging.properties
│ │ └── standalone.xml
│ ├── data
│ ├── deployments
│ └── log
09:37:24, 923 INFO … Deployed « demo.war » ├── 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

mvn archetype:
generate
-DgroupId=votr
• Le plugin Maven « jboss-as-maven-plugin » pré- -DartifactId=v
eGroupId
otreArtifactID
configuré -Dversion=1.0.
0-SNAPSHOT
-DarchetypeGro
• La watchService -DarchetypeArt
upId=com.world
ifactId=archet
line.bfi.ita
-DarchetypeVer yp e-war-ita-jbos
• Un logback pré-configuré -DinteractiveM
sion=1.0.1 s
ode=false
• La « Kanazination »
http://cookbook-ita.a
pps.zone52.org /jboss#
• Modules pré-configurés (configuration, MySQL, BC) Arch etype_Maven

• 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 Mod-K

Mod-L
Deployment 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
└── jboss
- Création du fichier module.xml └── modules
├── com
└── mysql
- Ajout du jar 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 :
<?xml version="1.0" encoding="UTF-8"?>
– jboss-deployment- <jboss-deployment-structure>
<deployment>
structure.xml <dependencies>
<module name="net.atos.configuration"/>
</dependencies>
</deployment>
</jboss-deployment-structure>

Dependencies: net.atos.configuration
– META-INF/MANIFEST.MF
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é

1 System Dependencies : Les modules implicites

User Dependencies : Les modules déclarés dans le fichier « jboss-


2
deployment-structure.xml » et/ou dans le fichier « MANIFEST.MF »

3 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>
</configuration> <properties>
</plugin> <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
shutdown
deployed deployed

undeploy+shutdown
undeploy

deploy
run(+deploy)

undeployed undeployed
shutdown

stopped 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 {

public class Service { @SampleCache


@ConfigureCache("sample-cache")
@Inject @Produces
@SampleCache public Configuration greetingCache() {
private Cache<String, String> cache; return new ConfigurationBuilder()
.eviction()
… .strategy(EvictionStrategy.LRU)
.maxEntries(1000)
} .build();
}
}

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
+ beans.xml p ach e -d e lta s p ike.properties
jar +a
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

Vous aimerez peut-être aussi