JavaEE - Test & Deploy
-
Upload
alexis-hassler -
Category
Technology
-
view
2.534 -
download
1
description
Transcript of JavaEE - Test & Deploy
JavaEETest & Deploy
Alexis Hassler17 janvier 2012
Tests d'intégration
Arquillian
Cloud Computing
@AlexisHassler
Arquillian
JavaEE
EJB
CDI
Servlet
JSP
JSFJMS
JAX-RSJAX-WS JPA
JNDI
Tests
Unitaire Intégration
Test unitaire
mock
new
✔ EJB
Test d'intégration
Composant déployé dans son
conteneur
– Mode embarqué
– Déploiement distant
EJB
Mode embarqué
EJBContainer.createEJBContainer()
Context.lookup(...)
Spring Framework
Runner
– Démarrer l'ApplicationContext
@RunWith
@Autowired
CDI
Weld SE
– Runner maison
cf. http://blog.alexis-hassler.com/2011/01/junit-runner-pour-cdi-weld.html
@RunWith
@Inject
JPA
Conteneur JPA
Persistence.createEntityManagerFactory(...) .createEntityManager()
JMS
Conteneur autonome
new ActiveMQConnectionFactory("vm://localhost?broker.persistent=false"
);...
HTTP / Servlet / JSP / ...
Conteneur autonome
new ServletTester()
new HttpTester()
✔ EJB / OpenEJB
Problèmes
1 conteneur par technologie
– Pas de mode embarqué universel
Mode remote + Maven
– pas dans le cycle de vie standard
Configurations spécifiques
EJB
CDI
Servlet
JSP
JSFJMS
JAX-RSJAX-WS JPA
JNDI
JavaEE
JavaEE
ServletServlet
JPA
CDI
JSF
JAX-RS
BeanValidation
Tran
sact
ion
JMS
EJB
Tester les composantspas les classes isolées
pas toute l'application
gérer le conteneur dans les tests
Mettre les
tests dans le conteneur
plutôt que
Structure d'un test
@RunWith(Arquillian.class)
@Deployment
@EJB, @Inject, @Resource
@Test
✔ EJB / OpenEJB
Conteneurs
JavaEE
– JBoss AS,
– GlassFish,
– Websphere AS
Web
– Jetty,
– Tomcat
CDI
– Weld SE,
– Weld EE,
– OpenWebBeans
EJB
– Apache OpenEJB
Conteneurs
ConteneurArquillian
JUnit
Test Case
ShrinkWrap
junit-container De
ploy
abl
eCon
tain
er
Conteneurs
Classpath
Profil maven
✔ EJB / Glassfish Embedded✔ CDI / Glassfish Embedded
✔ CDI / Weld SE
Conteneurs
Remote
Managed
Embedded
Conteneur embarqué
Démarrage du conteneur (in-process)
Déploiement de l'archive
Exécution locale du test
Retrait de l'archive
Arrêt du conteneur
Conteneur géré
Démarrage du conteneur (out-process)
Déploiement de l'archive
Déploiement du service Arquillian
Exécution du test dans le conteneur
Retrait de l'archive
Arrêt du conteneur
Conteneur distant
Conteneurpréalablement démarré
Déploiement de l'archive
Déploiement du service Arquillian
Exécution du test dans le conteneur
Retrait de l'archive
Conteneurs
Remote Managed Embedded
JBoss AS 4.2, 5.0, 5.1, 6.0, 7.0 4.2, 5.1, 6.0, 7.0 5.1, 6.0
Glassfish 3.1 3.1
Websphere AS 7.0 8.0
Jetty 6.1, 7.0
Tomcat 6.0 6.0
Weld SE 1.1, SE 1.0, EE 1.1
OpenWebBeans 1.0
OpenEJB 3.1
✔ EJB / JBoss AS 7 managed✔ EJB / JBoss AS 7 remote
Shrinkwrap
ConteneurArquillian
JUnit
Test Case
ShrinkWrap
junit-container De
ploy
abl
eCon
tain
er
Protocole Servlet
ShrinkWrap.create(WebArchive.class) .addClasses(...);
Web Archive
Arquillian Servlet
Test case
JUnit
Arquillian
Protocole Servlet 3.0
ShrinkWrap.create(JavaArchive.class) .addClasses(...);
Web Archive
Arquillian Servlet
Test case
JUnit
Arquillian
Arquillian ear
Protocole Servlet 2.5
ShrinkWrap.create(JavaArchive.class) .addClasses(...);
Java Archive
JUnit
Arquillian
Arquillian war
Arquillian Servlet
Test case
Protocole Servlet
Enterprise Archive
ShrinkWrap.create(JavaArchive.class) .addClasses(...);
Java Archive
JUnit
Arquillian
Arquillian war
Arquillian Servlet
Test case
ShrinkWrap.create(EnterpriseArchive.class) .addAsModule(jar);
Protocole JMX-AS7
JBoss AS 7
Arquillian Service
Arquillian MBean
Any Archive
Test case
JUnit
Arquillian
ShrinkWrap.create(XxxArchive.class) .addClasses(...);
✔ EJB / deploymentExportPath
as-client
Web, JAX-RS, JAX-WS,
RMI, EJB remote,...
Web Archive
Test case
JUnit
Arquillian
as-client
URL baseURL ;
@Deploymentpublic static Archive createDeployment() { ... }
@Testprivate void shouldDoX() { ... }
@ArquillianResource(MyServlet.class)
(testable=false)
@RunAsClient
✔ JAX-RS / JBoss AS 7 managed
Arquillian
Test d'intégration
In-container
As-client
Multi-conteneurs
Références
http://jboss.org/arquillian
http://github.com/arquillian
http://github.com/hasalex/arquillian-demo
http://www.slideshare.net/sewatech
Tests d'intégration
Arquillian
Cloud Computing
Cloud Computing
Définition
– En libre-service à la demande
– Accessible sur l'ensemble d'un réseau
– Mutualisation des ressources
– Rapidement élastique
– Mesurable
SaaS
Vision utilisateur
– Fonctionnalités d'un logiciel (Mail, CRM, ERP,...)
– Pas d'installation, pas d'investissement
– Montée en charge simple
– Software as a Service
SaaS
Réseau
StockageMatériel
Virtualisation
Système d'exploitation
Base de données
Runtime / middleware
Application
IaaS
Vision sysadmin
– Ressources système
(processeur, mémoire, bande passante)
– Pas d'achat de machine
– Montée en charge simple
– Infrastructure as a Service
IaaS
Réseau
StockageMatériel
Virtualisation
Système d'exploitation
Base de données
Runtime / middleware
Application
AmazonAWS
cf. http://media.amazonwebservices.com/AWS_Cloud_Best_Practices.pdf
AmazonAWS
Amazon EC2
– Elastic Compute Cloud
– Serveur virtuel
– Stockage sur Elastic Block Store (EBS)● disque dur
– Monitoring ● Amazon CloudWatch
=> Cœur d’AWS
AmazonAWS
Gestion
– Console Web
– SDK / ligne de commande
Amazon EC2✔ Web UI
✔ CLI
PaaS
Niveaux de service
IaaSInfrastructure as a Service
PaaSPlatform as a Service
SaaSSoftware as a Service
PaaS
Réseau
StockageMatériel
Virtualisation
Système d'exploitation
Base de données
Runtime / middleware
Application
PaaS
Cloubees
App Project
Deploy
DEV@cloud RUN@cloud
Elastic AppElastic App
Elastic AppSource Control
JenkinsBuild/Test
Push
Cloubees
Dev@Cloud
Build
Test
Deploy
1: push
2: build
3: checkout
Cloubees
Run@Cloud
JVM
Applications Server
PaaS tools
CloudBees✔ Web UI
✔ Java API
Cloud
PaaSPlatform as a Service
SaaSSoftware as a Service
User
IaaSInfrastructure as a Service
Operations
Developer Integration
Cloud
PaaS
SaaSSoftware as a Service
IaaS
Références
http://aws.amazon.com
http://www.cloudbees.com
https://github.com/hasalex/cloudbees-example
http://www.slideshare.net/sewatech
Tests d'intégration
Arquillian
Cloud Computing