Développez et déployez votre application Java dans Azure

51
Déployer une application Java EE dans Azure José Paumard @JosePaumard Sébastien Pertus @SebastienPertus

Transcript of Développez et déployez votre application Java dans Azure

Déployer une application Java EE dans Azure José Paumard @JosePaumard Sébastien Pertus @SebastienPertus

tech.days 2015 #mstechdays #JEEAzure

#JEEAzure

Déployer une application Java EE dans Azure

tech.days 2015 #mstechdays #JEEAzure

Podcast « les casts codeurs » http://lescastcodeurs.com/2014/10/26/lcc-111-interview-sur-microsoft-azure-avec-patrick-chanezon-et-benjamin-guinebertiere/

MOOC sur MVA http://www.microsoftvirtualacademy.com/training-courses/deploiement-application-java-dans-microsoft-azure

Patterns ! https://github.com/Azure/azure-sdk-for-java

Déployer une application Java EE dans Azure

tech.days 2015 #mstechdays #JEEAzure

Pourquoi vouloir déployer une application Java EE dans Azure ?

Déployer une application Java EE dans Azure

tech.days 2015 #mstechdays #JEEAzure

Pourquoi vouloir déployer une application Java EE dans Azure ?

Déployer une application Java EE dans Azure

tech.days 2015 #mstechdays #JEEAzure

Pour une application Java EE :

Déployer une application Java EE dans Azure

tech.days 2015 #mstechdays #JEEAzure

Outils de développement pour le « Javaiste » IHM de gestion d’Azure, configuration, monitoring Gestion de données structurées / non structurées Application jouet Modes de déploiement de l’application Démo de l’application Q / R

Déployer une application Java EE dans Azure

tech.days 2015 #mstechdays #JEEAzure

Eclipse Java EE « classique »

+ plugin spécifique Azure

Ressource Github https://github.com/azure

Déployer une application Java EE dans Azure

tech.days 2015 #mstechdays #JEEAzure

Java EE = jeu de spécifications Java EE = du papier ! Du papier + une implémentation de référence JPA → EclipseLink JAX-RS → Jersey JSF → Mojara

Déployer une application Java EE dans Azure

tech.days 2015 #mstechdays #JEEAzure

Organisation

Déployer une application Java EE dans Azure

Portable extensions

JSP 2.3 JSF 2.2 JAX RS 2 EL 3

Servlet 3.1

Managed Beans 1.0 EJB 3.2

JCA 1.7 JPA 2.1 JTA 2.1 JMS 2.0

Interceptors 1.1 CDI 1.1 Common annotations 1.1

Bean

Val

idat

ion

1.1

Concurrency utilities

Batch applications

Java API for JSON

Java API for Websocket

tech.days 2015 #mstechdays #JEEAzure

Organisation

Déployer une application Java EE dans Azure

Portable extensions

JSP 2.3 JSF 2.2 JAX RS 2 EL 3

Servlet 3.1

Managed Beans 1.0 EJB 3.2

JCA 1.7 JPA 2.1 JTA 2.1 JMS 2.0

Interceptors 1.1 CDI 1.1 Common annotations 1.1

Bean

Val

idat

ion

1.1

Concurrency utilities

Batch applications

Java API for JSON

Java API for Websocket

tech.days 2015 #mstechdays #JEEAzure

Organisation

Déployer une application Java EE dans Azure

Portable extensions

JSP 2.3 JSF 2.2 JAX RS 2 EL 3

Servlet 3.1

Managed Beans 1.0 EJB 3.2

JCA 1.7 JPA 2.1 JTA 2.1 JMS 2.0

Interceptors 1.1 CDI 1.1 Common annotations 1.1

Bean

Val

idat

ion

1.1

Concurrency utilities

Batch applications

Java API for JSON

Java API for Websocket

tech.days 2015 #mstechdays #JEEAzure

Organisation

Déployer une application Java EE dans Azure

Portable extensions

JSP 2.3 JSF 2.2 JAX RS 2 EL 3

Servlet 3.1

Managed Beans 1.0 EJB 3.2

JCA 1.7 JPA 2.1 JTA 2.1 JMS 2.0

Interceptors 1.1 CDI 1.1 Common annotations 1.1

Concurrency utilities

Batch applications

Java API for JSON

Java API for Websocket

Bean

Val

idat

ion

1.1

tech.days 2015 #mstechdays #JEEAzure

JPA, EJB, JAX-RS, JAX-WS JSF (si on l’utilise) JMS ? Java Mail ? Journalisation ? → On peut utiliser directement des services cloud

Déployer une application Java EE dans Azure

tech.days 2015 #mstechdays #JEEAzure

SQL Database

Déployer une application Java EE dans Azure

tech.days 2015 #mstechdays #JEEAzure

Deux versions de Java EE Tomcat implémente le « web profile »

Wildfly (JBoss), Glassfish, Weblogic, Websphere, implémentent le « full profile »

Déployer une application Java EE dans Azure

tech.days 2015 #mstechdays #JEEAzure

Accès aux données (JPA) Couche de service (EJB) Services REST (JAX-RS) IHM (JSF) Stockage d’images en BLOB

Déployer une application Java EE dans Azure

tech.days 2015 #mstechdays #JEEAzure

« Entité » JPA

Déployer une application Java EE dans Azure

public class Musician { private String name ; private Date dateOfBirth ; private MusicType musicType ; // getters / setters }

tech.days 2015 #mstechdays #JEEAzure

« Entité » JPA

Déployer une application Java EE dans Azure

public class Musician { private Long id ; private String name ; private Date dateOfBirth ; private MusicType musicType ; // getters / setters }

tech.days 2015 #mstechdays #JEEAzure

« Entité » JPA

Déployer une application Java EE dans Azure

@Entity public class Musician { @Id private Long id ; private String name ; private Date dateOfBirth ; private MusicType musicType ; // getters / setters }

tech.days 2015 #mstechdays #JEEAzure

« Entité » JPA

Déployer une application Java EE dans Azure

@Entity public class Musician { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id ; private String name ; private Date dateOfBirth ; private MusicType musicType ; // getters / setters }

tech.days 2015 #mstechdays #JEEAzure

« Entité » JPA

Déployer une application Java EE dans Azure

@Entity public class Musician { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id ; private String name ; @Temporal(TemporalType.DATE) private Date dateOfBirth ; private MusicType musicType ; // getters / setters }

tech.days 2015 #mstechdays #JEEAzure

« Entité » JPA

Déployer une application Java EE dans Azure

@Entity public class Musician { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id ; @Column(name="name") private String name ; @Temporal(TemporalType.DATE) private Date dateOfBirth ; private MusicType musicType ; // getters / setters }

tech.days 2015 #mstechdays #JEEAzure

« Entité » JPA

Déployer une application Java EE dans Azure

@Entity public class Musician { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Long id ; @Column(name="name") private String name ; @Temporal(TemporalType.DATE) private Date dateOfBirth ; @Enumerated(EnumType.STRING) private MusicType musicType ; // getters / setters }

public enum MusicType { JAZZ, CLASSICAL, ROCK, FOLK }

tech.days 2015 #mstechdays #JEEAzure

« Entité » JPA

Déployer une application Java EE dans Azure

@Entity public class Musician { @OneToMany private List<Instrument> instruments ; // getters / setters }

tech.days 2015 #mstechdays #JEEAzure

« Entité » JPA

Déployer une application Java EE dans Azure

@Entity public class Musician { @OneToMany private List<Instrument> instruments ; @ManyToMany private List<Orchestra> orchestras ; // getters / setters }

tech.days 2015 #mstechdays #JEEAzure

« Entité » JPA

Déployer une application Java EE dans Azure

@Entity public class Musician { @OneToMany private List<Instrument> instruments ; @ManyToMany private List<Orchestra> orchestras ; @Embedded private Address address ; // getters / setters }

tech.days 2015 #mstechdays #JEEAzure

« Entité » JPA

Déployer une application Java EE dans Azure

@Entity public class Musician { @OneToMany private List<Instrument> instruments ; @ManyToMany private List<Orchestra> orchestras ; @Embedded private Address address ; @Column(name="email", length=80) private String email ; // getters / setters }

tech.days 2015 #mstechdays #JEEAzure

« Entité » JPA

Déployer une application Java EE dans Azure

@Entity public class Musician { @OneToMany private List<Instrument> instruments ; @ManyToMany private List<Orchestra> orchestras ; @Embedded private Address address ; @Column(name="email", length=80) @Email private String email ; // getters / setters }

tech.days 2015 #mstechdays #JEEAzure

Gestion des relations *:* Gestion de l’héritage Génération du schéma Adaptation à un schéma existant Gestion des requêtes SQL / JPQL Configuration par annotations ou XML

Déployer une application Java EE dans Azure

tech.days 2015 #mstechdays #JEEAzure Déployer une application Java EE dans Azure

Injection / production @Stateless public class EntityManagerProvider { @PersistenceContext(unitName="DataService") private static EntityManager entityManager ; }

tech.days 2015 #mstechdays #JEEAzure Déployer une application Java EE dans Azure

Injection / production @Stateless public class EntityManagerProvider { @Produces @PersistenceContext(unitName="DataService") private static EntityManager entityManager ; }

tech.days 2015 #mstechdays #JEEAzure Déployer une application Java EE dans Azure

Injection / production @Stateless public class EntityManagerProvider { @Produces @PersistenceContext(unitName="DataService") private static EntityManager entityManager ; }

@Stateless public class MusicianService { @Inject private EntityManager em ; }

tech.days 2015 #mstechdays #JEEAzure Déployer une application Java EE dans Azure

Injection / production @Stateless public class EntityManagerProvider { @Produces @DBProd @PersistenceContext(unitName="DataService") private static EntityManager entityManager ; }

@Stateless public class MusicianService { @Inject @DBProd private EntityManager em ; }

tech.days 2015 #mstechdays #JEEAzure

Implémentées par des EJB

Déployer une application Java EE dans Azure

public class MusicianService { private EntityManager em ; public Musician findById(long id) { return em.find(Musician.class, id) ; } public List<Musician> findByName(String name) { Query q = em.createNamedQuery("Musician.byName") ; q.setParam("name", name) ; return q.getResultList() ; } }

tech.days 2015 #mstechdays #JEEAzure

Implémentées par des EJB

Déployer une application Java EE dans Azure

@Stateless public class MusicianService { @Inject private EntityManager em ; public Musician findById(long id) { return em.find(Musician.class, id) ; } public List<Musician> findByName(String name) { Query q = em.createNamedQuery("Musician.byName") ; q.setParam("name", name) ; return q.getResultList() ; } }

tech.days 2015 #mstechdays #JEEAzure

Implémentées par des EJB

Déployer une application Java EE dans Azure

@Stateless public class MusicianService { @Inject private EntityManager em ; @Transactionnal(TxType.SUPPORTS) public Musician findById(long id) { return em.find(Musician.class, id) ; } @Transactionnal(TxType.SUPPORTS) public List<Musician> findByName(String name) { Query q = em.createNamedQuery("Musician.byName") ; q.setParam("name", name) ; return q.getResultList() ; } }

tech.days 2015 #mstechdays #JEEAzure

JAX-RS

Déployer une application Java EE dans Azure

public class MusicianRestService { private MusicianService musicianService ; public Response getById( long id) { Musician musician = musicianService.findById(id) ; if (musician == null) { return Response.status(Status.NOT_FOUND).build() ; } else { return Response.ok(musician).build() ; } } }

tech.days 2015 #mstechdays #JEEAzure

JAX-RS

Déployer une application Java EE dans Azure

@Path("musician") public class MusicianRestService { @Inject private MusicianService musicianService ; @Path("{id}") // /musician/23 public Response getById( long id) { Musician musician = musicianService.findById(id) ; if (musician == null) { return Response.status(Status.NOT_FOUND).build() ; } else { return Response.ok(musician).build() ; } } }

tech.days 2015 #mstechdays #JEEAzure

JAX-RS

Déployer une application Java EE dans Azure

@Path("musician") public class MusicianRestService { @Inject private MusicianService musicianService ; @Path("{id}") // /musician/23 public Response getById(@PathParam("id") long id) { Musician musician = musicianService.findById(id) ; if (musician == null) { return Response.status(Status.NOT_FOUND).build() ; } else { return Response.ok(musician).build() ; } } }

tech.days 2015 #mstechdays #JEEAzure

JAX-RS

Déployer une application Java EE dans Azure

@Path("musician") public class MusicianRestService { @Inject private MusicianService musicianService ; @Path("{id}") // /musician/23 @GET public Response getById(@PathParam("id") long id) { Musician musician = musicianService.findById(id) ; if (musician == null) { return Response.status(Status.NOT_FOUND).build() ; } else { return Response.ok(musician).build() ; } } }

tech.days 2015 #mstechdays #JEEAzure

JAX-RS

Déployer une application Java EE dans Azure

@Path("musician") public class MusicianRestService { @Inject private MusicianService musicianService ; @Path("{id}") // /musician/23 @GET @Produces({MediaType.TEXT_XML, MediaType.APPLICATION_JSON}) public Response getById(@PathParam("id") long id) { Musician musician = musicianService.findById(id) ; if (musician == null) { return Response.status(Status.NOT_FOUND).build() ; } else { return Response.ok(musician).build() ; } } }

tech.days 2015 #mstechdays #JEEAzure

JAX-RS / JAXB

Déployer une application Java EE dans Azure

@XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) public class Musician { @XmlAttribute private Long id ; @XmlElement private String name ; @XmlElement(name="date-of-birth") private Date dateOfBirth ; private MusicType musicType ; // getters / setters }

tech.days 2015 #mstechdays #JEEAzure

Présentation de l’IHM (MVC)

Déployer une application Java EE dans Azure

tech.days 2015 #mstechdays #JEEAzure

IaaS / PaaS

Déployer une application Java EE dans Azure

tech.days 2015 #mstechdays #JEEAzure Déployer une application Java EE dans Azure

tech.days 2015 #mstechdays #JEEAzure Déployer une application Java EE dans Azure

tech.days 2015 #mstechdays #JEEAzure

Application CRUD Service REST

Déployer une application Java EE dans Azure

tech.days 2015 #mstechdays #JEEAzure

Azure offre une solution de déploiement d’application Java

Techniquement très complète et « à jour » Commercialement supportée

Donc oui, évaluer Azure lorsque l’on veut déployer

du Java dans le cloud, c’est intéressant !

Déployer une application Java EE dans Azure

tech.days 2015 #mstechdays #JEEAzure

Questions ? Commentaires ? Interrogations ?

@JosePaumard @SebastienPertus

Déployer une application Java EE dans Azure

© 2015 Microsoft Corporation. All rights reserved.

tech days•2015

#mstechdays techdays.microsoft.fr