JavaEE - Test & Deploy

Preview:

DESCRIPTION

Formation INSA, le 17 janvier 2012

Citation preview

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

Cloubees

Gestion RUN@cloud

Interface Web

API RESTful (HTTP / XML)

API Java

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