7. 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
8. 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
9. 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
10. 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
BeanValidation1.1
Concurrency
utilities
Batch
applications
Java API
for JSON
Java API
for Websocket
11. 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
BeanValidation1.1
Concurrency
utilities
Batch
applications
Java API
for JSON
Java API
for Websocket
12. 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
BeanValidation1.1
Concurrency
utilities
Batch
applications
Java API
for JSON
Java API
for Websocket
13. 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
BeanValidation1.1
14. 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
16. 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
17. 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
18. 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
}
19. 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
}
20. 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
}
21. 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
}
22. 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
}
23. 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
}
24. 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
}
25. 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
}
26. 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
}
27. 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
}
28. 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
}
29. 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
}
30. 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
31. tech.days 2015#mstechdays #JEEAzureDéployer une application Java EE dans Azure
Injection / production
@Stateless
public class EntityManagerProvider {
@PersistenceContext(unitName="DataService")
private static EntityManager entityManager ;
}
32. tech.days 2015#mstechdays #JEEAzureDéployer une application Java EE dans Azure
Injection / production
@Stateless
public class EntityManagerProvider {
@Produces
@PersistenceContext(unitName="DataService")
private static EntityManager entityManager ;
}
33. tech.days 2015#mstechdays #JEEAzureDé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 ;
}
34. tech.days 2015#mstechdays #JEEAzureDé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 ;
}
35. 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() ;
}
}
36. 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() ;
}
}
37. 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() ;
}
}
38. 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() ;
}
}
}
39. 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() ;
}
}
}
40. 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() ;
}
}
}
41. 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() ;
}
}
}
42. 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() ;
}
}
}
43. 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
}
49. 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
50. tech.days 2015#mstechdays #JEEAzure
Questions ? Commentaires ? Interrogations ?
@JosePaumard
@SebastienPertus
Déployer une application Java EE dans Azure