Les modules

publicité
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
Téléchargement