Déployer sur terre et dans les nuages Alexis Hassler novembre 2012
Nov 02, 2014
Déployersur terre et dans les nuages
Alexis Hasslernovembre 2012
@AlexisHassler
Développeur, formateur Java
Indépendant
Co-leader du
AlexisHassler
léger
pratique
cool
2000
JBoss AS 2.0
lourd
compliqué
pas cool
2010
5.x / 6.x
Startup
0 s
5 s
10 s
15 s
20 s
25 s
30 s
35 s
40 s
45 s
50 s
AS 4.0
AS 4.2
AS 5.1
AS 6.0
Startup
0 s
10 s
20 s
30 s
40 s
50 s
60 s
70 s
80 s
90 s
Geronimo 2
GlassFish 2
GlassFish 3
JBoss 5
JBoss 6
Weblogic 10
Websphere 7
http://tiny.cc/agoncal-as-startup (12/2009)
léger
pratique
über-cool
2012
Startup
0 s
5 s
10 s
15 s
20 s
25 s
30 s
35 s
40 s
45 s
50 s
AS 4.0 AS 4.2
AS 5.1
AS 6.0
AS 7.1(full)
Lightweight
0 Mo
20 Mo
40 Mo
60 Mo
80 Mo
100 Mo
120 Mo
140 Mo
160 Mo
180 Mo
AS 4.0 AS 4.2
AS 5.1
AS 6.0
AS 7.1(full)
Heap used
Composants
Core Infrastructure
SubsystemsD
atas
ourc
e
Java
EE
EJB
CDI -
Wel
d
JPA
- H
iber
nate
Nam
ing
Cach
e -
Infi
nisp
an
JMS
- H
orne
tQ
JGro
ups
JAX
-RS
- RE
STea
sy
JCA
- Ir
onJa
cam
ar
JBos
s Tr
ansa
ctio
n
JBos
s Lo
ggin
g
JSF
- M
ojar
ra
JAX
-WS
- CX
F
...
Architecture
Core Infrastructure
Subsystems
Deployers VFS Jandex Reflect Cache Repository
Server Controller Service
MSCJBoss
ModulesDMR Controller Threads
Configuration simplif iée
find <profile_dir> -name *.xml | wc -l
0
20
40
60
80
100
120
140
160
AS 4.0 AS 4.2
AS 5.1
AS 6.0
AS 7.1
Configuration expressive
standalone/configuration/standalone.xml
Configuration expressive
server/default/deploy/hdscanner-jboss-beans.xml
server/default/conf/bootstrap/profile.xml
Déploiement
bin
bundles
modules
standalone
configuration
data
deployments
lib/ext
Automatique
– idem AS <7 pour les archives
– désactivé en mode explosé
cp demo.war $JBOSS_HOME/standalone/deployments/
17:12:24,923 INFO ... Deployed "demo.war"
Déploiement
Manuel
– auto-deploy-zipped="false"
cp demo.war $JBOSS_HOME/standalone/deployments/
17:12:24,923 INFO ... Found demo.war ...
touch $JBOSS_HOME/standalone/deployments/demo.war.dodeploy
17:12:24,923 INFO ... Deployed demo.war ...
Administration
Console CLI
HTTP / JSON Java API
jboss-cl i .sh
HTTP / JSON
http://localhost:9990/management/
curl http://localhost:9990/management --user alexis:hassler -–digest --header "Content-Type: application/json" -d '{ "operation":"change-root-log-level", "json.pretty":1, "address":["subsystem","logging","root-logger","ROOT"], "level":"ERROR" }'
Java API
ModelControllerClient client=create(SERVER,NATIVE_ADMIN_PORT);
ModelNode operation = new ModelNode();operation.get("operation").set("change-root-log-level");operation.get("level").set("ERROR");
ModelNode rootLogger = operation.get("address");rootLogger.add("subsystem");rootLogger.add("logging");rootLogger.add("root-logger");rootLogger.add("ROOT");
client.execute(operation).get("result");
JMX
Domaine jboss.as
Console CLI
HTTP / JSON Java API
JMX
XML
Administration
Domain
Host 1
HostController
Server
Server
Host 2
HostController
Server
Host 3
HostController
Server
Host 0
DomainController
Server Group 1
Server Group 2
IDE
Eclipse 3.7+ avec JBoss Tools
IntelliJ IDEA 11+
Netbeans 7.2
Killerfeature
http://www.ironmaidenwallpaper.com/
JBossModules
CLASSPATH
HELL
http://www.ironmaidenwallpaper.com/
Flat Classloader
JVM Classloader(s)
System Classloader
CLASSPATH
UCR
Hierarchical Classloaders
System Classloader
JBossClassloaders
DeploymentClassloader
DeploymentClassloader
Sub-deploymentClassloader
war /WEB-INF/lib /WEB-INF/classes
ear /lib
<conf>/lib
"Classpath is dead!"
Mark Reinhold,
JavaOne 2009
http://java.sun.com/javaone/2009/general_sessions.jsp
Modules
org.slf4j:1.5.10
org.hibernate.core:3.6.6
deployment.my.war
org.slf4j:1.6.1
org.springframework:3.1.2
Modules
SLF4J
org.slf4j:1.5.10
deployment.swmsg-web.war
org.slf4j:1.6.1
fr.sewatech.swmsg-lib:1.0
Modules
Datasource
first-ds second-ds
some.driver:1.0 some.driver:2.0DB v1 DB v2
Cloud
IaaSInfrastructure as a Service
Hardware+
OS
SaaSSoftware as a Service
Software
PaaSPlatform as a Service
Runtime/
Middleware
PaaS by
Java, Perl, PHP, Python, Ruby
Java EE 6 - Full profile
Git
AS 7 ou EAP 6
Java EE 6 – Web Profile
Déploiement par le JDK ou l'API Cloudbees
DD spécifiques Cloudbees
?
Versions intermédiaires
JBoss AS 7.0 CR1
JBoss AS 7.0.0.Final
…
JBoss AS 7.1.1.Final
Migration
JBoss AS 6- => JBoss AS 7+
Modules
Datasources, destinations JMS
Noms JNDI
Clients EJB (remote)
...
Modules
Logging
Log4J / SLF4J
Corrigé en 7.1.2
(pour Log4J)
deployment.my.war
org.slf4j
war
modules
org.slf4j:main
AS / EAP
JBoss AS 7.1.2 / 7.1.3
Base pour JBoss EAP 6.0.x
Pas de release binaire !
Build it yourself
git clone git://github.com/jbossas/jboss-as.gitcd jboss-asgit checkout 7.1.2.Final./build.sh -DskipTests
cp -R build/target/jboss-as-7.1.2.Final /opt/java/
Messages d'erreur
{"JBAS014653: Opération composite échouée et annulée. Étapes déficientes :" => {"Opération step-2" => {"JBAS014771: Services avec des dépendances manquantes/non disponibles" => ["jboss.deployment.unit.\"swmsg-web.war\".jboss.security.jacc Missing[JBAS014861: <one or more transitive dependencies>]","jboss.deployment.unit.\"swmsg-web.war\".component.\"org.apache.catalina.servlets.DefaultServlet\".START Missing[JBAS014861: <one or more transitive dependencies>]","jboss.naming.context.java.module.swmsg-web.swmsg-web.env.ejb.MessageSecured Missing[jboss.naming.context.java.app.swmsg-web.swmsg-ejb3.\"MessageSecuredBean!fr.sewatech.formation.appserv.ejb3.MessageServiceLocal\"]","jboss.deployment.unit.\"swmsg-web.war\".component.\"javax.servlet.jsp.jstl.tlv.PermittedTaglibsTLV\".START Missing[JBAS014861: <one or more transitive dependencies>]","jboss.naming.context.java.module.swmsg-web.swmsg-web.env.ejb.MessageService Missing[jboss.naming.context.java.app.swmsg-web.swmsg-ejb3.\"MessageServiceBean!fr.sewatech.formation.appserv.ejb3.MessageServiceLocal\"]","jboss.naming.context.java.module.swmsg-web.swmsg-web.env.jdbc.sewa-ds Missing[jboss.naming.context.java.SewaDS]","jboss.deployment.unit.\"swmsg-web.war\".jndiDependencyService Missing[JBAS014861: <one or more transitive dependencies>]","jboss.naming.context.java.module.swmsg-web.swmsg-web.env.jms.SWq Missing[jboss.naming.context.java.queue.SWq]","jboss.deployment.unit.\"swmsg-web.war\".component.\"com.sun.faces.config.ConfigureListener\".START Missing[JBAS014861: <one or more transitive dependencies>]","jboss.deployment.unit.\"swmsg-web.war\".component.\"javax.faces.webapp.FacetTag\".START Missing[JBAS014861: <one or more transitive dependencies>]","jboss.deployment.unit.\"swmsg-web.war\".component.\"javax.servlet.jsp.jstl.tlv.ScriptFreeTLV\".START Missing[JBAS014861: <one or more transitive dependencies>]","jboss.deployment.unit.\"swmsg-web.war\".component.\"org.apache.jasper.servlet.JspServlet\".START Missing[JBAS014861: <one or more transitive dependencies>]","jboss.deployment.unit.\"swmsg-web.war\".component.\"fr.sewatech.formation.appserv.web.PageFilter\".START Missing[JBAS014861: <one or more transitive dependencies>]","jboss.deployment.unit.\"swmsg-web.war\".component.\"fr.sewatech.formation.appserv.web.MessageServlet\".START Missing[JBAS014861: <one or more transitive dependencies>]","jboss.web.deployment.default-host./swmsg-web Missing[JBAS014861: <one or more transitive dependencies>]"]}}}
{"JBAS014653: Opération composite échouée et annulée. Étapes déficientes :" => {"Opération step-2" => {"JBAS014771: Services avec des dépendances manquantes/non disponibles" => ["jboss.deployment.unit.\"swmsg-web.war\".jboss.security.jacc Missing[JBAS014861: <one or more transitive dependencies>]","jboss.deployment.unit.\"swmsg-web.war\".component.\"org.apache.catalina.servlets.DefaultServlet\".START Missing[JBAS014861: <one or more transitive dependencies>]","jboss.naming.context.java.module.swmsg-web.swmsg-web.env.ejb.MessageSecured Missing[jboss.naming.context.java.app.swmsg-web.swmsg-ejb3.\"MessageSecuredBean!fr.sewatech.formation.appserv.ejb3.MessageServiceLocal\"]","jboss.deployment.unit.\"swmsg-web.war\".component.\"javax.servlet.jsp.jstl.tlv.PermittedTaglibsTLV\".START Missing[JBAS014861: <one or more transitive dependencies>]","jboss.naming.context.java.module.swmsg-web.swmsg-web.env.ejb.MessageService Missing[jboss.naming.context.java.app.swmsg-web.swmsg-ejb3.\"MessageServiceBean!fr.sewatech.formation.appserv.ejb3.MessageServiceLocal\"]","jboss.naming.context.java.module.swmsg-web.swmsg-web.env.jdbc.sewa-ds Missing[jboss.naming.context.java.SewaDS]","jboss.deployment.unit.\"swmsg-web.war\".jndiDependencyService Missing[JBAS014861: <one or more transitive dependencies>]","jboss.naming.context.java.module.swmsg-web.swmsg-web.env.jms.SWq Missing[jboss.naming.context.java.queue.SWq]","jboss.deployment.unit.\"swmsg-web.war\".component.\"com.sun.faces.config.ConfigureListener\".START Missing[JBAS014861: <one or more transitive dependencies>]","jboss.deployment.unit.\"swmsg-web.war\".component.\"javax.faces.webapp.FacetTag\".START Missing[JBAS014861: <one or more transitive dependencies>]","jboss.deployment.unit.\"swmsg-web.war\".component.\"javax.servlet.jsp.jstl.tlv.ScriptFreeTLV\".START Missing[JBAS014861: <one or more transitive dependencies>]","jboss.deployment.unit.\"swmsg-web.war\".component.\"org.apache.jasper.servlet.JspServlet\".START Missing[JBAS014861: <one or more transitive dependencies>]","jboss.deployment.unit.\"swmsg-web.war\".component.\"fr.sewatech.formation.appserv.web.PageFilter\".START Missing[JBAS014861: <one or more transitive dependencies>]","jboss.deployment.unit.\"swmsg-web.war\".component.\"fr.sewatech.formation.appserv.web.MessageServlet\".START Missing[JBAS014861: <one or more transitive dependencies>]","jboss.web.deployment.default-host./swmsg-web Missing[JBAS014861: <one or more transitive dependencies>]"]}}}
Roadmap
JBoss AS 9
JBoss AS 7.1
http://www.jboss.org/vote
JBoss AS 7.2JBoss AS 8
➢ BaseJump➢ WildFly➢ Petasos➢ Jberet➢ Jocon➢ jFireAnt
Roadmap
JavaEE 7
Patch à chaud
Accès au management, par rôles
Multiplexage
Amélioration du MSC
Développement d'extensions
...
Conclusion
Serveurs d'applications modernes
http://www.jboss.org/as7.html
http://www.jboss.org/openshift/
Auto-promotion
http://www.sewatech.fr/formation-jboss-7.html
19 au 22 mars 2013 à Lyon
?