SlideShare una empresa de Scribd logo
1 de 33
Simplicité de développement avec Java EE 5 et simplification du lancement de clients lourds avec SmartClient JOnAS Day 5.1 [email_address]
Agenda ,[object Object]
Injection de dépendances
Persistance
Modèle EJB3 ,[object Object]
Cycle de vie
Cycle de vie : Introduction ,[object Object]
Avant sa destruction : @PreDestroy ,[object Object],[object Object]
Évite d'avoir des « méthodes vides » car requises par l'interface ,[object Object]
Cycle de vie : Fichier XML ,[object Object]
Ils peuvent également être spécifiés avec les fichiers XML <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> <ejb-jar xmlns=&quot; http://java.sun.com/xml/ns/javaee &quot; ... version=&quot;3.0&quot;> <enterprise-beans> <session> <ejb-name>MonBean</ejb-name> <ejb-class>monpackage.MonBean</ejb-class> <post-construct> <lifecycle-callback-class>monpackage.MonBean</lifecycle-callback-class> <lifecycle-callback-method> maMethodePostConstruct </lifecycle-callback-method> </post-construct> </session> ...
Injection de dépendances
Injection de dépendances : Principe ,[object Object]
Simplification du code : ,[object Object],@EJB private MonInterface ejb;
[object Object],Injection de dépendances : Accès Ressources Context ictx = new InitialContext(); DataSource myDS = null; try { myDS = (DataSource) ictx.lookup(“java:comp/env/jdbc/myDS”); } catch (NamingException e) {  ... } Connection connection = myDS.getConnection(); @Resource(name = &quot;jdbc/myDS&quot;,....) private DataSource myDS; private void method() { Connection connection = myDS.getConnection(); } ,[object Object],Demande d'injection
[object Object],[object Object],Context ictx = new InitialContext(); EJBHome ejbHome = null; try { Object o = ictx.lookup(“java:comp/env/ejb/myEJB”); ejbHome = (EJBHome) PortableRemoteObject.narrow(o, EJBHome.class); } catch (NamingException e) {  ... } InterfaceEJB ejb = ejbHome.create(); ejb.helloWorld(); @EJB private InterfaceEJB ejb; private void methode() { ejb.helloWorld(); } Injection de dépendances : Accès à un EJB Demande d'injection Plus d'interface Home, l'interface  métier est appellée directement
[object Object]
Exemple d'injection de « env-entry » Injection de dépendances : Sans annotations <env-entry> <env-entry-name>monEntree</env-entry-name> <env-entry-type>java.lang.Integer</env-entry-type> <env-entry-value>50</env-entry-value> <injection-target> <injection-target-class>mon.package.MonBean</injection-target-class> <injection-target-name>monEntier</injection-target-name> </injection-target> </env-entry> ... private Integer monEntier; ... Aucune annotation dans le code Valeur 50 injectée
Persistance
Persistance : JPA, un nouveau modèle ,[object Object]
Avec Java EE 5, il y a un nouveau modèle de persistance :  J ava  P ersistence   A pi
Succède aux beans EJB 2.1 CMP1 et CMP2 ,[object Object]
De concept proche de Hibernate/JDO ,[object Object]
Persistance : Gestion des objets ,[object Object]
Un EntityManager est injectable comme d'autres ressources Java EE @PersistenceContext private EntityManager entityManager Injection d'un gestionnaire de persistance
Persistance : Aperçu du modèle ,[object Object]
Les requêtes JPA-QL sont exécutées en utilisant l'objet EntityManager MonEntity entity = new MonEntity(); entityManager.persist(entity); Query query = entityManager.createNamedQuery(“select b FROM Book b); List<Book> books = query.getResultList();
Persistance : Métadonnées Entity @Entity @Table(name=”EMPLOYEES”) @Id public class Employee { private int id; private String name; public int getId() { return id; } public void setId(final int id) { this.id = id; } public void setName(final String name) { this.name = name; } public String getName() { return name; } } Clef primaire
Persistance : Les relations ,[object Object]
Prenons l'exemple de deux objets/classes : Livre et Auteur
Nous voyons qu'il peut y avoir une relation entre un livre et un auteur. ,[object Object],[object Object],[object Object]
@ManyToOne
@OneToMany

Más contenido relacionado

La actualidad más candente

Chapitre 2 classe et objet
Chapitre 2   classe et objetChapitre 2   classe et objet
Chapitre 2 classe et objetAmir Souissi
 
Améliorations dans Java depuis la version 5
Améliorations dans Java depuis la version 5Améliorations dans Java depuis la version 5
Améliorations dans Java depuis la version 5Mamadou Oury Ba
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications JavaAntoine Rey
 
Workshop Spring - Session 4 - Spring Batch
Workshop Spring -  Session 4 - Spring BatchWorkshop Spring -  Session 4 - Spring Batch
Workshop Spring - Session 4 - Spring BatchAntoine Rey
 
Presentation hibernate nfe103
Presentation hibernate nfe103Presentation hibernate nfe103
Presentation hibernate nfe103MRamo2s
 
Chapitre 4 persistance des donnees
Chapitre 4  persistance des donneesChapitre 4  persistance des donnees
Chapitre 4 persistance des donneesAmir Souissi
 
Workshop Spring 3 - Tests et techniques avancées du conteneur Spring
Workshop Spring  3 - Tests et techniques avancées du conteneur SpringWorkshop Spring  3 - Tests et techniques avancées du conteneur Spring
Workshop Spring 3 - Tests et techniques avancées du conteneur SpringAntoine Rey
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring bootAntoine Rey
 
Ces outils qui vous font gagner du temps
Ces outils qui vous font gagner du tempsCes outils qui vous font gagner du temps
Ces outils qui vous font gagner du tempsAntoine Rey
 
Marzouk une introduction à jdbc
Marzouk une introduction à jdbcMarzouk une introduction à jdbc
Marzouk une introduction à jdbcabderrahim marzouk
 
Fmin103 0910 tpjdbc
Fmin103 0910 tpjdbcFmin103 0910 tpjdbc
Fmin103 0910 tpjdbcKarim Amane
 
JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien!
JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien!JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien!
JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien!bleporini
 
Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Antoine Rey
 
Accès aux bases de données via jdbc
Accès aux bases de données via jdbcAccès aux bases de données via jdbc
Accès aux bases de données via jdbcRachid Lajouad
 
"Input/Ouput, 16 ans après" à Devoxx France 2012
"Input/Ouput, 16 ans après" à Devoxx France 2012"Input/Ouput, 16 ans après" à Devoxx France 2012
"Input/Ouput, 16 ans après" à Devoxx France 2012Jean-Michel Doudoux
 
Workshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationWorkshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationAntoine Rey
 

La actualidad más candente (20)

Chapitre 2 classe et objet
Chapitre 2   classe et objetChapitre 2   classe et objet
Chapitre 2 classe et objet
 
Bbl sur les tests
Bbl sur les testsBbl sur les tests
Bbl sur les tests
 
Améliorations dans Java depuis la version 5
Améliorations dans Java depuis la version 5Améliorations dans Java depuis la version 5
Améliorations dans Java depuis la version 5
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications Java
 
Workshop Spring - Session 4 - Spring Batch
Workshop Spring -  Session 4 - Spring BatchWorkshop Spring -  Session 4 - Spring Batch
Workshop Spring - Session 4 - Spring Batch
 
Introduction a Java
Introduction a JavaIntroduction a Java
Introduction a Java
 
Presentation hibernate nfe103
Presentation hibernate nfe103Presentation hibernate nfe103
Presentation hibernate nfe103
 
Chapitre 4 persistance des donnees
Chapitre 4  persistance des donneesChapitre 4  persistance des donnees
Chapitre 4 persistance des donnees
 
Workshop Spring 3 - Tests et techniques avancées du conteneur Spring
Workshop Spring  3 - Tests et techniques avancées du conteneur SpringWorkshop Spring  3 - Tests et techniques avancées du conteneur Spring
Workshop Spring 3 - Tests et techniques avancées du conteneur Spring
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring boot
 
Hibernate
HibernateHibernate
Hibernate
 
Ces outils qui vous font gagner du temps
Ces outils qui vous font gagner du tempsCes outils qui vous font gagner du temps
Ces outils qui vous font gagner du temps
 
Marzouk une introduction à jdbc
Marzouk une introduction à jdbcMarzouk une introduction à jdbc
Marzouk une introduction à jdbc
 
Fmin103 0910 tpjdbc
Fmin103 0910 tpjdbcFmin103 0910 tpjdbc
Fmin103 0910 tpjdbc
 
JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien!
JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien!JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien!
JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien!
 
Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?Quoi de neuf à Devoxx France 2017 ?
Quoi de neuf à Devoxx France 2017 ?
 
Spring ioc
Spring iocSpring ioc
Spring ioc
 
Accès aux bases de données via jdbc
Accès aux bases de données via jdbcAccès aux bases de données via jdbc
Accès aux bases de données via jdbc
 
"Input/Ouput, 16 ans après" à Devoxx France 2012
"Input/Ouput, 16 ans après" à Devoxx France 2012"Input/Ouput, 16 ans après" à Devoxx France 2012
"Input/Ouput, 16 ans après" à Devoxx France 2012
 
Workshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring IntegrationWorkshop Spring - Session 5 - Spring Integration
Workshop Spring - Session 5 - Spring Integration
 

Destacado

Destacado (8)

#11 Introduction JASMINe
#11 Introduction JASMINe#11 Introduction JASMINe
#11 Introduction JASMINe
 
#8 Tour des Consoles d'Administration
#8 Tour des Consoles d'Administration#8 Tour des Consoles d'Administration
#8 Tour des Consoles d'Administration
 
#12 et #13 Versioning et JaDOrT
#12 et #13 Versioning et JaDOrT#12 et #13 Versioning et JaDOrT
#12 et #13 Versioning et JaDOrT
 
#3 Nouveautes Deploiement Demarrage
#3 Nouveautes Deploiement Demarrage#3 Nouveautes Deploiement Demarrage
#3 Nouveautes Deploiement Demarrage
 
OW2 JASMINe
OW2 JASMINeOW2 JASMINe
OW2 JASMINe
 
#2 Architecture OSGi
#2 Architecture OSGi#2 Architecture OSGi
#2 Architecture OSGi
 
#6 Outils De Developpement
#6 Outils De Developpement#6 Outils De Developpement
#6 Outils De Developpement
 
#4 Applications Convergentes JavaEE/OSGi
#4 Applications Convergentes JavaEE/OSGi#4 Applications Convergentes JavaEE/OSGi
#4 Applications Convergentes JavaEE/OSGi
 

Similar a #5 Java EE5 Client Lourd et Smart Client

Similar a #5 Java EE5 Client Lourd et Smart Client (20)

2
22
2
 
Présentation de JavaServer Faces
Présentation de JavaServer FacesPrésentation de JavaServer Faces
Présentation de JavaServer Faces
 
Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124Prsentation de-javaserver-faces4124
Prsentation de-javaserver-faces4124
 
Formation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-dataFormation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-data
 
Springioc
SpringiocSpringioc
Springioc
 
Jdbc
JdbcJdbc
Jdbc
 
jpa.pdf
jpa.pdfjpa.pdf
jpa.pdf
 
Spring data
Spring dataSpring data
Spring data
 
Objet Direct Formation JPA Hibernate
Objet Direct Formation JPA HibernateObjet Direct Formation JPA Hibernate
Objet Direct Formation JPA Hibernate
 
Formation JPA Java persistence API
Formation JPA Java persistence APIFormation JPA Java persistence API
Formation JPA Java persistence API
 
Spring 3.0
Spring 3.0Spring 3.0
Spring 3.0
 
Les dessous du framework spring
Les dessous du framework springLes dessous du framework spring
Les dessous du framework spring
 
Présentation nouveauté java7
Présentation nouveauté java7Présentation nouveauté java7
Présentation nouveauté java7
 
Ado.net vs jpa
Ado.net vs jpaAdo.net vs jpa
Ado.net vs jpa
 
Les annotations
Les annotationsLes annotations
Les annotations
 
Qualité logicielle
Qualité logicielleQualité logicielle
Qualité logicielle
 
Programmation Java
Programmation JavaProgrammation Java
Programmation Java
 
Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017Java 9 modulo les modules devoxx fr 2017
Java 9 modulo les modules devoxx fr 2017
 
575
575575
575
 
Java 5, un blian
Java 5, un blianJava 5, un blian
Java 5, un blian
 

Más de Guillaume Sauthier

Data Privacy, reprenez le contrôle
Data Privacy, reprenez le contrôleData Privacy, reprenez le contrôle
Data Privacy, reprenez le contrôleGuillaume Sauthier
 
EclipseCon FR : Ignite talks, OSGi Resolver in action
EclipseCon FR : Ignite talks, OSGi Resolver in actionEclipseCon FR : Ignite talks, OSGi Resolver in action
EclipseCon FR : Ignite talks, OSGi Resolver in actionGuillaume Sauthier
 
Ow2 Utilities - The Swiss Army Knife Of Ow2 Projects
Ow2 Utilities - The Swiss Army Knife Of Ow2 ProjectsOw2 Utilities - The Swiss Army Knife Of Ow2 Projects
Ow2 Utilities - The Swiss Army Knife Of Ow2 ProjectsGuillaume Sauthier
 
Java dans Windows Azure, l'exemple de JOnAS
Java dans Windows Azure, l'exemple de JOnASJava dans Windows Azure, l'exemple de JOnAS
Java dans Windows Azure, l'exemple de JOnASGuillaume Sauthier
 
Leverage OSGi in business application with JOnAS
Leverage OSGi in business application with JOnASLeverage OSGi in business application with JOnAS
Leverage OSGi in business application with JOnASGuillaume Sauthier
 
JOnAS 5.1 Application Server Profiles
JOnAS 5.1 Application Server ProfilesJOnAS 5.1 Application Server Profiles
JOnAS 5.1 Application Server ProfilesGuillaume Sauthier
 

Más de Guillaume Sauthier (15)

Data Privacy, reprenez le contrôle
Data Privacy, reprenez le contrôleData Privacy, reprenez le contrôle
Data Privacy, reprenez le contrôle
 
La Grande Famille OAuth 2.0
La Grande Famille OAuth 2.0La Grande Famille OAuth 2.0
La Grande Famille OAuth 2.0
 
EclipseCon FR : Ignite talks, OSGi Resolver in action
EclipseCon FR : Ignite talks, OSGi Resolver in actionEclipseCon FR : Ignite talks, OSGi Resolver in action
EclipseCon FR : Ignite talks, OSGi Resolver in action
 
Peergreen Platform Overview
Peergreen Platform OverviewPeergreen Platform Overview
Peergreen Platform Overview
 
Ow2 Utilities - The Swiss Army Knife Of Ow2 Projects
Ow2 Utilities - The Swiss Army Knife Of Ow2 ProjectsOw2 Utilities - The Swiss Army Knife Of Ow2 Projects
Ow2 Utilities - The Swiss Army Knife Of Ow2 Projects
 
Java dans Windows Azure, l'exemple de JOnAS
Java dans Windows Azure, l'exemple de JOnASJava dans Windows Azure, l'exemple de JOnAS
Java dans Windows Azure, l'exemple de JOnAS
 
Leverage OSGi in business application with JOnAS
Leverage OSGi in business application with JOnASLeverage OSGi in business application with JOnAS
Leverage OSGi in business application with JOnAS
 
JO2nAS Collaboration
JO2nAS CollaborationJO2nAS Collaboration
JO2nAS Collaboration
 
OUGF - OSAmI - OSGi Ubiquity
OUGF - OSAmI - OSGi UbiquityOUGF - OSAmI - OSGi Ubiquity
OUGF - OSAmI - OSGi Ubiquity
 
#7 Migration
#7 Migration#7 Migration
#7 Migration
 
#0 Accueil
#0 Accueil#0 Accueil
#0 Accueil
 
#9 Deploiement Complexe
#9 Deploiement Complexe#9 Deploiement Complexe
#9 Deploiement Complexe
 
#1 Introduction
#1 Introduction#1 Introduction
#1 Introduction
 
OW2 Shelbie TC Presentation
OW2 Shelbie TC PresentationOW2 Shelbie TC Presentation
OW2 Shelbie TC Presentation
 
JOnAS 5.1 Application Server Profiles
JOnAS 5.1 Application Server ProfilesJOnAS 5.1 Application Server Profiles
JOnAS 5.1 Application Server Profiles
 

#5 Java EE5 Client Lourd et Smart Client

  • 1. Simplicité de développement avec Java EE 5 et simplification du lancement de clients lourds avec SmartClient JOnAS Day 5.1 [email_address]
  • 2.
  • 5.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11. Ils peuvent également être spécifiés avec les fichiers XML <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> <ejb-jar xmlns=&quot; http://java.sun.com/xml/ns/javaee &quot; ... version=&quot;3.0&quot;> <enterprise-beans> <session> <ejb-name>MonBean</ejb-name> <ejb-class>monpackage.MonBean</ejb-class> <post-construct> <lifecycle-callback-class>monpackage.MonBean</lifecycle-callback-class> <lifecycle-callback-method> maMethodePostConstruct </lifecycle-callback-method> </post-construct> </session> ...
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18. Exemple d'injection de « env-entry » Injection de dépendances : Sans annotations <env-entry> <env-entry-name>monEntree</env-entry-name> <env-entry-type>java.lang.Integer</env-entry-type> <env-entry-value>50</env-entry-value> <injection-target> <injection-target-class>mon.package.MonBean</injection-target-class> <injection-target-name>monEntier</injection-target-name> </injection-target> </env-entry> ... private Integer monEntier; ... Aucune annotation dans le code Valeur 50 injectée
  • 20.
  • 21. Avec Java EE 5, il y a un nouveau modèle de persistance : J ava P ersistence A pi
  • 22.
  • 23.
  • 24.
  • 25. Un EntityManager est injectable comme d'autres ressources Java EE @PersistenceContext private EntityManager entityManager Injection d'un gestionnaire de persistance
  • 26.
  • 27. Les requêtes JPA-QL sont exécutées en utilisant l'objet EntityManager MonEntity entity = new MonEntity(); entityManager.persist(entity); Query query = entityManager.createNamedQuery(“select b FROM Book b); List<Book> books = query.getResultList();
  • 28. Persistance : Métadonnées Entity @Entity @Table(name=”EMPLOYEES”) @Id public class Employee { private int id; private String name; public int getId() { return id; } public void setId(final int id) { this.id = id; } public void setName(final String name) { this.name = name; } public String getName() { return name; } } Clef primaire
  • 29.
  • 30. Prenons l'exemple de deux objets/classes : Livre et Auteur
  • 31.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39. EclipseLink Choix dans le fichier JONAS_BASE/conf/jonas.properties
  • 40. EJB3
  • 41.
  • 42.
  • 43. Les interfaces « callback » ne sont plus obligatoires. Plus besoin d'implémenter javax.ejb.SessionBean
  • 45. Amélioration du langage EJB-QL : requêtes SQL natives
  • 46. Définition de Beans EJB 3.0 [1/2] Interface Implémentation @Stateless throws RemoteException { @Remote public interface HelloWorld { String hello() ; } public class HelloWorldBean implements HelloWorld { public String hello() { return “Hello World !”; } } @Stateful extends Remote { throws RemoteException;
  • 47. @MessageDriven Message Driven Bean Définition de Beans EJB 3.0 [2/2] public class MyMDB implements MessageListener { public void onMessage(Message message) { ... } } @MessageDriven(activateConfig={ @ActivationConfigProperty(propertyName=&quot;destinationType&quot;, propertyValue=&quot;javax.jms.Queue&quot;), @ActivationConfigProperty(propertyName=&quot;destination&quot;, propertyValue=&quot;jms/StockQueue&quot;) } )
  • 48. Transaction Securité @RolesAllowed(“EasyBeans”) @TransactionAttribute(REQUIRES_NEW) Default = REQUIRED Métadonnées EJB 3.0 @Stateless public class MyBean implements MyItf { public void someMethod') { ... } } @Stateless public class MyBean implements MyItf { public void someMethod () {...} }
  • 49.
  • 50. Peut traiter les exceptions remontées par les méthodes
  • 51.
  • 52.
  • 53.
  • 54. Intercepteurs définis au niveau de la classe Interceptors Client InvocationContext Interceptors Client InvocationContext
  • 55. InvocationContext Interface InvocationContext @AroundInvoke Intercepteur de traces public interface InvocationContext { Object getTarget(); Method getMethod(); Object[] getParameters(); setParameters(Object[]); Map getContextData(); // partagé par tous les intercepteurs Object proceed() throws Exception; // appel du prochain intercepteur } public Object trace(InvocationContext invocationContext) throws Exception { long tStart = System.currentTimeMillis(); try { return invocationContext.proceed(); } finally { long elapsed = System.currentTimeMillis() - tStart; System.out.println(inv.getMethod() + &quot; took &quot; + elapsed + &quot; ms.&quot;); } 0
  • 56.
  • 57. Définition dans la classe du bean :
  • 58. Ou dans une classe séparée :
  • 59. Même conception que les intercepteurs de méthodes métiers public void myPostConstruct(InvocationContext ctx) { ...} @PostConstruct @PreDestroy public void myPreDestroy() { ...}
  • 60. EJB / JPA : Annotations de cycle de vie Annotation SLSB SFSB MDB X X X X X X X X Session & Message Driven Beans Entities @PostPersist @PreRemove @PostRemove @PreUpdate @PostUpdate @PostLoad @PrePassivate (ejbPassivate) @PostActivate (ejbActivate) @PostConstruct (ejbCreate) @PreDestroy (ejbRemove)
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 70.
  • 73.
  • 74.
  • 75.
  • 76.