Découvrez le framework web Spring Boot qui a la cote !
Apprenez comment son système d'auto-configuration fonctionne.
Live coding et exemple de migration vers Spring Boot sont de la partie.
Se support présente l'outil d'intégration Maven dans le processus d'industrialisation du génie logiciel. Tout ce qu'il faut savoir sur maven.
La deuxième partie de ce cours traite la mise en oeuvre de maven dans des projets basés sur JPA, Hibernate, Spring et Struts.
Bon apprentissage à tous
Formation JPA Avancé / Hibernate gratuite par Ippon 2014Ippon
Les ORM, c’est pratique. Mais cela peut rapidement devenir complexe ou subtile. JPA permet de rapidement modéliser la couche d’accès aux données avec une facilité indiscutable. Cependant, il est préférable de bien en comprendre le fonctionnement pour éviter quelques anti patterns fâcheux.
La formation JPA Avancé proposée par Ippon détaille les aspects techniques et permet d’aller plus loin dans la compréhension et la maîtrise. Enrichie par des TP très fournis lorsqu’elle est dispensée par les formateurs Ippon, elle permet d’assimiler en 3 jours les subtilités et offre les outils pour réaliser une couche d’accès aux données de qualité, performante et maintenable.
Techniques de modélisation, gestion et subtilités du cache (L1, L2), mécanismes transactionnels, langage de requêtage… Tous ces aspects et bien d’autres sont détaillés et illustrés afin de vous apporter les clefs pour vos prochains projets.
Découvrez dès aujourd’hui les slides de cette formation, mis à disposition dans le cadre de l’OpenFormation.
Ce Support de cours Spring contient :
- Architecture JEE (Over view)
- Spring Overview
- Spring IOC
- Spring MVC
- Spring Integration (RMI, JaxWS, JaxRS, JMS, JMX,...)
- Spring Security
Bon apprentissage à tous
Workshop Spring - Session 1 - L'offre Spring et les basesAntoine Rey
Rejoignez les millions de développeurs Spring
De par sa forte pénétration dans les entreprises, tout développeur Java /JEE a ou aura à travailler sur une application s’appuyant sur Spring. Or Spring dépasse le cadre du simple framework open source.
Cette série de 5 workshops a pour objectif de faire un tour d’horizon de l’écosystème des technologies supportées par Spring avant de se focaliser plus spécifiquement sur certaines d’entre elles.
Retours d’expérience, bonnes pratiques, techniques avancées seront de partie.
Propulsée dans Java EE 6 avec CDI et plus récemment au sein de JavaScript avec Google Gin, l’injection de dépendance sera au cœur du premier workshop.
Voici le support de présentation du workshop sur Spring que j'ai animé en novembre 2011 au sein de ma SSII et que j'ai réactualisé avant sa diffusion sur Slideshare.
Au sommaire du workshop :
1. Zoom sur le portfolio Spring Source
1. Le cœur du framework Spring : IoC, AOP et support
2. Le support proposé par Spring : persistance, présentation, communication, test, outils …
2. Les fondamentaux
1. Fonctionnement du conteneur léger
2. Les beans Spring
3. Les design patterns rencontrés dans Spring
Support de cours EJB :
- Architecture JEE
- Séparer le code métier et le code technique
- Inversion de contrôle
- EJB session
- EJB Entity
- Mise en oeuvre des projets EJB
- EJB et Web services
- JMS
- MDB
- Gestion de transactions avec EJB
- Application
Une riche présentation de Mapping Objet Relationnel qui traite le standard JPA et l’implémentation Hibernate en les intégrant avec le frammework IOC spring.
Découvrez le framework web Spring Boot qui a la cote !
Apprenez comment son système d'auto-configuration fonctionne.
Live coding et exemple de migration vers Spring Boot sont de la partie.
Se support présente l'outil d'intégration Maven dans le processus d'industrialisation du génie logiciel. Tout ce qu'il faut savoir sur maven.
La deuxième partie de ce cours traite la mise en oeuvre de maven dans des projets basés sur JPA, Hibernate, Spring et Struts.
Bon apprentissage à tous
Formation JPA Avancé / Hibernate gratuite par Ippon 2014Ippon
Les ORM, c’est pratique. Mais cela peut rapidement devenir complexe ou subtile. JPA permet de rapidement modéliser la couche d’accès aux données avec une facilité indiscutable. Cependant, il est préférable de bien en comprendre le fonctionnement pour éviter quelques anti patterns fâcheux.
La formation JPA Avancé proposée par Ippon détaille les aspects techniques et permet d’aller plus loin dans la compréhension et la maîtrise. Enrichie par des TP très fournis lorsqu’elle est dispensée par les formateurs Ippon, elle permet d’assimiler en 3 jours les subtilités et offre les outils pour réaliser une couche d’accès aux données de qualité, performante et maintenable.
Techniques de modélisation, gestion et subtilités du cache (L1, L2), mécanismes transactionnels, langage de requêtage… Tous ces aspects et bien d’autres sont détaillés et illustrés afin de vous apporter les clefs pour vos prochains projets.
Découvrez dès aujourd’hui les slides de cette formation, mis à disposition dans le cadre de l’OpenFormation.
Ce Support de cours Spring contient :
- Architecture JEE (Over view)
- Spring Overview
- Spring IOC
- Spring MVC
- Spring Integration (RMI, JaxWS, JaxRS, JMS, JMX,...)
- Spring Security
Bon apprentissage à tous
Workshop Spring - Session 1 - L'offre Spring et les basesAntoine Rey
Rejoignez les millions de développeurs Spring
De par sa forte pénétration dans les entreprises, tout développeur Java /JEE a ou aura à travailler sur une application s’appuyant sur Spring. Or Spring dépasse le cadre du simple framework open source.
Cette série de 5 workshops a pour objectif de faire un tour d’horizon de l’écosystème des technologies supportées par Spring avant de se focaliser plus spécifiquement sur certaines d’entre elles.
Retours d’expérience, bonnes pratiques, techniques avancées seront de partie.
Propulsée dans Java EE 6 avec CDI et plus récemment au sein de JavaScript avec Google Gin, l’injection de dépendance sera au cœur du premier workshop.
Voici le support de présentation du workshop sur Spring que j'ai animé en novembre 2011 au sein de ma SSII et que j'ai réactualisé avant sa diffusion sur Slideshare.
Au sommaire du workshop :
1. Zoom sur le portfolio Spring Source
1. Le cœur du framework Spring : IoC, AOP et support
2. Le support proposé par Spring : persistance, présentation, communication, test, outils …
2. Les fondamentaux
1. Fonctionnement du conteneur léger
2. Les beans Spring
3. Les design patterns rencontrés dans Spring
Support de cours EJB :
- Architecture JEE
- Séparer le code métier et le code technique
- Inversion de contrôle
- EJB session
- EJB Entity
- Mise en oeuvre des projets EJB
- EJB et Web services
- JMS
- MDB
- Gestion de transactions avec EJB
- Application
Une riche présentation de Mapping Objet Relationnel qui traite le standard JPA et l’implémentation Hibernate en les intégrant avec le frammework IOC spring.
Ce support explique les concepts de bases du principe de l'inversion de contrôle et d'injections des dépendances.
Les concepts les plus importants à comprendre par les futurs ingénieurs du génie Logiciel.
Support Complet sur la technologie EJB 3.1. Ce cours Traite l'architecture JEE. Les différents types EJB (Session, Entity, MDB). Des exemple complets sont aussi présentés.
Ce Support explique quelques concepts de base de NodeJS et montre comment mettre en oeuvre la technologie NodeJS pour développer la partie Backend d'une application.
Les vidéos des démonstrations sont publiées sur les adresse suivantes :
- https://www.youtube.com/watch?v=-X_C1tS5-9Y
- https://www.youtube.com/watch?v=rE-xRH28m0s
- https://www.youtube.com/watch?v=tnxjkTvWoKA
Cette série explique les éléments suivants :
- Architecture Web
- Modèles Multi-Threads avec les entrées sorties bloquantes
- Modèles Single Thread avec les entrées sortie non bloquantes
-Technologie Node JS
- Comment créer une simple application Node JS avec java Script
- Architecture du Framwork Express
- Comment créer une application NodeJS avec Type Script
- Comment écrire des tests unitaires avec Jest
- Quelques concepts sur MongoDb
- Comment Créer une API Rest avec NodeJS, Express et MongoDb
- Comment tester l'API Rest
- Comment Créer la partie FrontEnd avec Angular.
Même si la qualité audio n'est pas bonne, ses vidéos peuvent aider ceux qui débutent dans NodeJS en attendant d'autres vidéos avec plus qualité audio et de contenu.
Bonne lecture
Un support de cours complet sur l'architecture JEE et l'industrialisation du génie logiciel. Ce support contient les parties suivantes :
- Tendances du génie logiciel
- Architecture JEE
- Services de l'infrastructure JEE (jdbc, jndi, rmi,servlet, jsp, jstl, jsf,EJB, JaxWS, JaxRS, JMS, JMX, ....)
- Maven : Outil d'industrialisation du génie logiciel
- Junit : Test Unitaires
- Hibernate
- Spring IOC et Spring MVC
- Struts 2
Bon apprentissage à tous
Maven
Exemple d'application qui montre comment utiliser les bonnes pratiques de JEE pour développer un site web de commerce électronique en utilisant les outils :
- Eclipse comme environnement de développement
- Maven comme outil d’intégration
- JUnit comme Framework des tsts unitaire
- Spring IOC pour l'inversion de contrôle
- Spring MVC pour la couche web
- Spring Security pour la sécurité
- JPA, Hibernate
- Web Service SOAP
- Web Service REST
- Service RMI
Si vous pensez encore que le data-binding, l’inversion de dépendances, le pattern MVC ou bien encore la gestion de la navigation sont réservés au code Java des applications web modernes, courrez assistez à ce workshop. AngularJS, le dernier framework JavaScript de chez Google, devrait vous surprendre.
Basée sur l’université AngularJS, ou le futur du développement Web présentée lors de Devoxx France 2013, ce workshop a pour objectif de vous initier à AngularJS.
Les concepts fondamentaux seront mis en en action au travers de l’application Game Store.
Côté industrialisation, nous verrons que tests unitaires, tests fonctionnels et infrastructure de build ne sont pas non plus délaissés.
A l’heure où la couche présentation des applications web est de plus en plus déportée côté client, ce workshop a pour objectif de démystifier ce type de framework permettant de structurer une application JavaScript.
1. The document discusses optimism and pessimism, including defining optimism and pessimism and describing how people with these explanatory styles react differently to good and bad events.
2. It describes various tests and scales used to measure optimism and pessimism based on how permanent, pervasive, and personal individuals perceive causes of events to be. Lower scores indicate more optimism.
3. While pessimism can help with reality, excess pessimism is linked to depression, poorer health, lower achievement, and children doing worse when facing adversity. The document advocates learning to dispute pessimistic beliefs and develop a more optimistic explanatory style.
Ce support explique les concepts de bases du principe de l'inversion de contrôle et d'injections des dépendances.
Les concepts les plus importants à comprendre par les futurs ingénieurs du génie Logiciel.
Support Complet sur la technologie EJB 3.1. Ce cours Traite l'architecture JEE. Les différents types EJB (Session, Entity, MDB). Des exemple complets sont aussi présentés.
Ce Support explique quelques concepts de base de NodeJS et montre comment mettre en oeuvre la technologie NodeJS pour développer la partie Backend d'une application.
Les vidéos des démonstrations sont publiées sur les adresse suivantes :
- https://www.youtube.com/watch?v=-X_C1tS5-9Y
- https://www.youtube.com/watch?v=rE-xRH28m0s
- https://www.youtube.com/watch?v=tnxjkTvWoKA
Cette série explique les éléments suivants :
- Architecture Web
- Modèles Multi-Threads avec les entrées sorties bloquantes
- Modèles Single Thread avec les entrées sortie non bloquantes
-Technologie Node JS
- Comment créer une simple application Node JS avec java Script
- Architecture du Framwork Express
- Comment créer une application NodeJS avec Type Script
- Comment écrire des tests unitaires avec Jest
- Quelques concepts sur MongoDb
- Comment Créer une API Rest avec NodeJS, Express et MongoDb
- Comment tester l'API Rest
- Comment Créer la partie FrontEnd avec Angular.
Même si la qualité audio n'est pas bonne, ses vidéos peuvent aider ceux qui débutent dans NodeJS en attendant d'autres vidéos avec plus qualité audio et de contenu.
Bonne lecture
Un support de cours complet sur l'architecture JEE et l'industrialisation du génie logiciel. Ce support contient les parties suivantes :
- Tendances du génie logiciel
- Architecture JEE
- Services de l'infrastructure JEE (jdbc, jndi, rmi,servlet, jsp, jstl, jsf,EJB, JaxWS, JaxRS, JMS, JMX, ....)
- Maven : Outil d'industrialisation du génie logiciel
- Junit : Test Unitaires
- Hibernate
- Spring IOC et Spring MVC
- Struts 2
Bon apprentissage à tous
Maven
Exemple d'application qui montre comment utiliser les bonnes pratiques de JEE pour développer un site web de commerce électronique en utilisant les outils :
- Eclipse comme environnement de développement
- Maven comme outil d’intégration
- JUnit comme Framework des tsts unitaire
- Spring IOC pour l'inversion de contrôle
- Spring MVC pour la couche web
- Spring Security pour la sécurité
- JPA, Hibernate
- Web Service SOAP
- Web Service REST
- Service RMI
Si vous pensez encore que le data-binding, l’inversion de dépendances, le pattern MVC ou bien encore la gestion de la navigation sont réservés au code Java des applications web modernes, courrez assistez à ce workshop. AngularJS, le dernier framework JavaScript de chez Google, devrait vous surprendre.
Basée sur l’université AngularJS, ou le futur du développement Web présentée lors de Devoxx France 2013, ce workshop a pour objectif de vous initier à AngularJS.
Les concepts fondamentaux seront mis en en action au travers de l’application Game Store.
Côté industrialisation, nous verrons que tests unitaires, tests fonctionnels et infrastructure de build ne sont pas non plus délaissés.
A l’heure où la couche présentation des applications web est de plus en plus déportée côté client, ce workshop a pour objectif de démystifier ce type de framework permettant de structurer une application JavaScript.
1. The document discusses optimism and pessimism, including defining optimism and pessimism and describing how people with these explanatory styles react differently to good and bad events.
2. It describes various tests and scales used to measure optimism and pessimism based on how permanent, pervasive, and personal individuals perceive causes of events to be. Lower scores indicate more optimism.
3. While pessimism can help with reality, excess pessimism is linked to depression, poorer health, lower achievement, and children doing worse when facing adversity. The document advocates learning to dispute pessimistic beliefs and develop a more optimistic explanatory style.
Workshop Spring - Session 5 - Spring IntegrationAntoine Rey
Vous avez déjà entendu parler d’Apache Camel ?
Les Design Pattern n’ont plus de secrets pour vous ?
L’Event Driven Architecture vous attire ?
Les Enterprise Integration Pattern vous interpellent ?
Vos applications reposent sur TCP, JMS, FTP, SFTP, les fichiers, les mails, XML, les web services SOAP, REST, RSS, JPA, JDBC ou même Twitter ?
N’attendez plus : venez découvrir l’utilisation des patterns comme le Channel Adapter, le Router ou l’Aggregator au travers d’un workshop sur Spring Integration.
Voici le support de présentation d’un workshop d’1h s’appuyant sur le cas d’étude suivant : un moteur chargé d’indexer des données clients dans le moteur de recherche Elasticsearch.
Une connaissance minimaliste de Spring Framework est pré-requise.
Spring Integration est à votre portée de main. EAI et ESB n’ont qu’à bien se tenir !!
This document discusses the importance of developing software with a pessimistic mindset by anticipating errors and unexpected inputs rather than assuming everything will work correctly. It recommends techniques like defensive coding with input validation, assertions and error handling, designing by contract to define responsibilities and exceptions, and programming deliberately by expecting the unexpected and writing code that is robust to unintended use cases. The goal is to build software that is resilient to human and technical errors rather than fragile.
Tester unitairement une application javaAntoine Rey
Présente les différents types de tests automatisés, les objectifs des tests unitaires, les stratégies de mise en œuvre, les bonnes pratiques, les difficultés, ce qu'est un mock, différents outils (Unitils, Mockito, DbUnit, Spring Test) et des exemples de tests (DAO et contrôleurs Spring MVC), sans oublier le test de code legacy.
Microservices with .Net - NDC Sydney, 2016Richard Banks
Presented at NDC Sydney, August 2016
Thanks to organisations like Netflix, and the need to develop solutions that scale well in the cloud, microservices have become the hot new topic. Yet, for all the talk, there are few practical examples of how you actually build a microservice in .NET.
It's time to fix that little oversight as we show you how you can build a microservices based solution using .NET, and a number of open source tools (EventStore, RabbitMq and Redis to name a few).
You'll also get to understand the pros and cons of a microservices solution and consider how a microservices approach might impact how you and your team relate to your customers.
Chaque jour, de nombreux développeurs utilisent le framework Spring pour l’injection de dépendances et la gestion des transactions. Majeures, ces 2 fonctionnalités ne nécessitent pas un gros effort d’apprentissage. Pour autant, leurs mises en œuvre par le framework est complexe. Par curiosité intellectuelle, mais également afin d’éviter certains pièges et de profiter pleinement des capacités de Spring, il est intéressant de comprendre les mécanismes internes du framework qu’on utilise au quotidien : cycle de vie d’un bean, proxy, intercepteur, post-processeur, fabrique de beans, hiérarchie de contextes, portée …
Les slides de cette présentation ont pour objectif de vous les faire les introduire.
Workshop Spring 3 - Tests et techniques avancées du conteneur SpringAntoine Rey
Les secrets du conteneur Spring vous attendent pour ce 3ième workshop sur le framework Spring : module spring-test, injection de beans de portées différentes, support des JSR 250 et 330, post-processeurs de beans, fichiers de configuration et abstraction de l’accès aux ressources.
Spring Framework Petclinic sample applicationAntoine Rey
Spring Petclinic is a sample application that has been designed to show how the Spring Framework can be used to build simple but powerful database-oriented applications.
The fork named Spring Framework Petclinic maintains a version both with a plain old Spring Framework configuration and a 3-layer architecture (i.e. presentation --> service --> repository).
Clairement dans cette version, nous assistons à une volonté de simplification. Plus de lisibilité du code, plus d’outils pour ne plus avoir à perdre de temps sur des opérations simples et courantes, pour au final un code de meilleur qualité et plus accessible. La plupart de ces améliorations se trouvent dans cette présentation.
Le sujet principal de Java 9 est le support de la modularité mais Java 9 propose aussi de nombreuses autres fonctionnalités. Ce talk a pour but de faire une revue des principales d’entre-elles en attendant la sortie de Java 9 : support de standards, nouvelles API, évolutions dans certaines API, mises à jour des outils du JDK et améliorations de la JVM.
Windows Azure est une plateforme IaaS qui n'est pas réservée exclusivement aux application .NET. Cette session explore et explique comment déployer le serveur d'application JOnAS sur le cloud de Microsoft
Présentation d'un cours en JAVA/J2EE
Création et manipulations des objets en Java
** Connexion JDBC à la base de données
** Modèle en couches
** FrameworkHibernate
** Framewoek Spring MVC
MongoDB in a scale-up: how to get away from a monolithic hell — MongoDB Paris...Horgix
This is the slide deck of a talk by Alexis "Horgix" Chotard and Laurentiu Capatina presented at the MongoDB Paris User Group in June 2024 about the feedback on how PayFit move away from a monolithic hell of a self-hosted MongoDB cluster to managed alternatives. Pitch below.
March 15, 2023, 6:59 AM: a MongoDB cluster collapses. Tough luck, this cluster contains 95% of user data and is absolutely vital for even minimal operation of our application. To worsen matters, this cluster is 7 years behind on versions, is not scalable, and barely observable. Furthermore, even the data model would quickly raise eyebrows: applications communicating with each other by reading/writing in the same MongoDB documents, documents reaching the maximum limit of 16MiB with hundreds of levels of nesting, and so forth. The incident will last several days and result in the loss of many users. We've seen better scenarios.
Let's explore how PayFit found itself in this hellish situation and, more importantly, how we managed to overcome it!
On the agenda: technical stabilization, untangling data models, breaking apart a Single Point of Failure (SPOF) into several elements with a more restricted blast radius, transitioning to managed services, improving internal accesses, regaining control over risky operations, and ultimately, approaching a technical migration when it impacts all development teams.
L'IA connaît une croissance rapide et son intégration dans le domaine éducatif soulève de nombreuses questions. Aujourd'hui, nous explorerons comment les étudiants utilisent l'IA, les perceptions des enseignants à ce sujet, et les mesures possibles pour encadrer ces usages.
Constat Actuel
L'IA est de plus en plus présente dans notre quotidien, y compris dans l'éducation. Certaines universités, comme Science Po en janvier 2023, ont interdit l'utilisation de l'IA, tandis que d'autres, comme l'Université de Prague, la considèrent comme du plagiat. Cette diversité de positions souligne la nécessité urgente d'une réponse institutionnelle pour encadrer ces usages et prévenir les risques de triche et de plagiat.
Enquête Nationale
Pour mieux comprendre ces dynamiques, une enquête nationale intitulée "L'IA dans l'enseignement" a été réalisée. Les auteurs de cette enquête sont Le Sphynx (sondage) et Compilatio (fraude académique). Elle a été diffusée dans les universités de Lyon et d'Aix-Marseille entre le 21 juin et le 15 août 2023, touchant 1242 enseignants et 4443 étudiants. Les questionnaires, conçus pour étudier les usages de l'IA et les représentations de ces usages, abordaient des thèmes comme les craintes, les opportunités et l'acceptabilité.
Résultats de l'Enquête
Les résultats montrent que 55 % des étudiants utilisent l'IA de manière occasionnelle ou fréquente, contre 34 % des enseignants. Cependant, 88 % des enseignants pensent que leurs étudiants utilisent l'IA, ce qui pourrait indiquer une surestimation des usages. Les usages identifiés incluent la recherche d'informations et la rédaction de textes, bien que ces réponses ne puissent pas être cumulées dans les choix proposés.
Analyse Critique
Une analyse plus approfondie révèle que les enseignants peinent à percevoir les bénéfices de l'IA pour l'apprentissage, contrairement aux étudiants. La question de savoir si l'IA améliore les notes sans développer les compétences reste débattue. Est-ce un dopage académique ou une opportunité pour un apprentissage plus efficace ?
Acceptabilité et Éthique
L'enquête révèle que beaucoup d'étudiants jugent acceptable d'utiliser l'IA pour rédiger leurs devoirs, et même un quart des enseignants partagent cet avis. Cela pose des questions éthiques cruciales : copier-coller est-il tricher ? Utiliser l'IA sous supervision ou pour des traductions est-il acceptable ? La réponse n'est pas simple et nécessite un débat ouvert.
Propositions et Solutions
Pour encadrer ces usages, plusieurs solutions sont proposées. Plutôt que d'interdire l'IA, il est suggéré de fixer des règles pour une utilisation responsable. Des innovations pédagogiques peuvent également être explorées, comme la création de situations de concurrence professionnelle ou l'utilisation de détecteurs d'IA.
Conclusion
En conclusion, bien que l'étude présente des limites, elle souligne un besoin urgent de régulation. Une charte institutionnelle pourrait fournir un cadre pour une utilisation éthique.
Ouvrez la porte ou prenez un mur (Agile Tour Genève 2024)Laurent Speyser
(Conférence dessinée)
Vous êtes certainement à l’origine, ou impliqué, dans un changement au sein de votre organisation. Et peut être que cela ne se passe pas aussi bien qu’attendu…
Depuis plusieurs années, je fais régulièrement le constat de l’échec de l’adoption de l’Agilité, et plus globalement de grands changements, dans les organisations. Je vais tenter de vous expliquer pourquoi ils suscitent peu d'adhésion, peu d’engagement, et ils ne tiennent pas dans le temps.
Heureusement, il existe un autre chemin. Pour l'emprunter il s'agira de cultiver l'invitation, l'intelligence collective , la mécanique des jeux, les rites de passages, .... afin que l'agilité prenne racine.
Vous repartirez de cette conférence en ayant pris du recul sur le changement tel qu‘il est généralement opéré aujourd’hui, et en ayant découvert (ou redécouvert) le seul guide valable à suivre, à mon sens, pour un changement authentique, durable, et respectueux des individus! Et en bonus, 2 ou 3 trucs pratiques!
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...OCTO Technology
Par Nicolas Bordier (Consultant numérique responsable @OCTO Technology) et Alaric Rougnon-Glasson (Sustainable Tech Consultant @OCTO Technology)
Sur un exemple très concret d’audit d’éco-conception de l’outil de bilan carbone C’Bilan développé par ICDC (Caisse des dépôts et consignations) nous allons expliquer en quoi l’ACV (analyse de cycle de vie) a été déterminante pour identifier les pistes d’actions pour réduire jusqu'à 82% de l’empreinte environnementale du service.
Vidéo Youtube : https://www.youtube.com/watch?v=7R8oL2P_DkU
Compte-rendu :
Le Comptoir OCTO - Qu’apporte l’analyse de cycle de vie lors d’un audit d’éco...
Workshop spring session 2 - La persistance au sein des applications Java
1. Workshop Spring - Session 2
La persistance au sein des
applications Java
Conçu en décembre 2011
Réactualisé en novembre 2014
# 1
2. Agenda du workshop n°2
1. La persistance des données facilitée
Gestion des exceptions
Déclarer une source de données
Classes de support pour JDBC, Hibernate et JPA
2. Encore plus loin avec
Spring Data JPA
et QueryDSL
3. Gestion des transactions
# 2
3. Mise en oeuvre de la persistance
Les atouts du framework Spring :
Facilite l’utilisation de JDBC et des principaux ORM
Rend le code plus lisible
Limite les risques d’erreur inhérents à la libération des ressources
Gestion des exceptions
Laisse la possibilité d’accéder à la technologie sous-jacente
Gère élégamment les transactions
Le projet Spring Data apporte un support :
Encore plus avancé pour JDBC et JPA
Pour les différents types de bases de données
(orientées graphes, colonnes, map …)
# 3
4. # 4
Gestion des exceptions
Les exceptions levées par un DAO doivent être indépendantes de la
technologie sous-jacente :
SQLException pour JDBC
HibernateException pour Hibernate
Spring permet de s’abstraire de ces exceptions techniques en disposant
de sa propre hiérarchie d’exceptions d’accès aux données
Non vérifiée (runtime), DataAccessException en est l’exception parent
Les classes de support d’accès aux données de Spring permettent
d’encapsuler l’exception technique dans une DataAccessException
SQLException avec code erreur ORA-1722 en
DataIntegrityViolationException
5. # 5
Quelques exceptions
DataIntegrityViolationException : utilisée lorsqu’une violation de contrainte
d'intégrité est détectée par la base (ex : contrainte d’unicité, clé étrangère)
DataAccessResourceFailureException : problème de connexion à la base
de données
ConcurrencyFailureException : fait suite à un problème de concurrence
d’accès aux données (verrou pessimiste ou optimiste)
DeadlockLoserDataAccessException : signale que le processus est bloqué
par un verrou
DataRetrievalFailureException : erreur produite lors d’une requête de
sélection (ex: l’objet n’existe pas ou plus)
6. # 6
Source de données
Possibilité Cas d’utilisation Exemple de déclaration
Pool de
connexions
par JNDI
• Application web
déployée dans
un serveur
d’application
<jee:jndi-lookup
id="dataSource"
jndi-name="jdbc/DemoDataSource"/>
Pool de
connexions
embarqué
• Application
standalone
<bean id="dataSource"
class="org.apache.commons.dbcp
.BasicDataSource"
destroy-method="close"
p:driverClassName="${db.driver}"
p:username="{db.user}" ... />
Connexion
unique à la
base
• Tests unitaires
• Batchs
<bean id="dataSource"
class="org.springframework.jdbc
.datasource.SingleConnectionDataSource"
p:suppress-close="true"
p:driverClassName="${db.driver}"
p:username="{db.user}" ... />
8. # 8
Template Method Pattern
Squelette d’un algorithme à l’aide d’opérations abstraites
Permet de masquer le code technique générique
Le développeur se concentre sur la requête et l’extraction du résultat
SQL pour JDC, HQL ou Criteria pour Hibernate …
JdbcOperations DAO StatementCallback
result
execute (callback)
result
doInStatement (statement)
Exécute la requête
Récupère le résultat
Récupère la connexion
Prépare le statement
Gère les exceptions
Ferme le statement
Libère la connexion
9. # 9
Support de JDBC
Les classes JdbcTemplate et NamedParameterJdbcTemplate
centralisent toute la puissance du support JDBC de Spring.
JdbcTemplate template = new JdbcTemplate(dataSource);
String sql = "select count(*) from client";
int nombreClient = template.queryForInt(sql);
sql = "select * from client";
RowMapper<Client> rowMapper =
ParameterizedBeanPropertyRowMapper.newInstance(Client.class);
List<Client> clients = template.query(sql, rowMapper);
sql = "insert into client (id, nom, prenom) VALUES (?, ?, ?)";
template.update(sql, client.getId(), client.getNom(),
client.getPrenom());
Remarque: la classe SimpleJdbcTemplate est dépréciée depuis Spring 3 au profit
des 2 classes citées.
10. # 10
Support des ORM
Solutions ORM supportées par Spring 4 :
JPA 2.1
Hibernate 3.6 et 4.x
JDO 2.x
Cohérence des classes de support de ces différentes technologies
Création et configuration de l’EntityManagerFactory / SessionFactory
Gestion du cycle de vie des EntityManager / sessions Hibernate
Synchronise l’ouverture d’une transaction et la création d’une session
11. # 11
Parallèles entre solutions
Concept JDBC Hibernate JPA
Resource Connection Session EntityManager
Resource factory DataSource SessionFactory EntityManagerFactory
Exception SQLException HibernateException PersistenceException
Classe de
support
JDBC Hibernate JPA
Template class JdbcTemplate HibernateTemplate JpaTemplate
DAO support JdbcDaoSupport HibernateDaoSupport JpaDaoSupport
Transaction DataSourceTransaction
Manager
HibernateTransaction
Manager
JpaTransactionManager
Classes principales des différentes API d’accès aux données
Classes de support de Spring pour les différentes API d’accès aux données
Légende : à éviter pour les nouveaux projets. Préférez l’API native d’Hibernate
supprimer de Spring 4.x
12. Exemple valide en Spring 3.x mais
pas en 4.X suite à la suppression
des 2 classes de support
# 12
Exemples de DAO
@Repository
public class JpaClientDAO extends JpaDaoSupport implements IClientDAO {
public List<Client> findByNom1(String nom) {
return getJpaTemplate().findByNamedQuery("Client.findByNom", nom);
}
public List<Client> findByNom2(String nom) {
String query = “select c from Client c where c.nom = ?1";
return getJpaTemplate().find(query, nom);
}
…
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
@Repository
public class JpaClientDAO implements ICompteDAO {
@PersistenceContext
private EntityManager entityManager;
public List<Client> findAll() {
return entityManager.createQuery("from Client").getResultList();
}
…
Requête nommée définie
sur l’entité Client par
l’annotation @NamedQuery
Requête dynamique JPQL
Injection par Spring du contexte persistant JPA
13. # 13
Encore plus loin
Le projet Spring Data JPA simplifie l’écriture de la couche d’accès aux données
Continuation du projet Hades
Apporte le support pour une approche Domain Driven Developpment (DDD)
Retour à la vraie conception objet
Tout en conservant la séparation entre le fonctionnel et la technique
Utilise le pattern Repository
Manipule uniquement des objets du domaine métier (entités)
Comparé à une interface d’accès à une collection d’objets du domaine
Ne nécessite aucune implémentation : le code est généré par le framework
Fonctions CRUD disponibles en standard : save, findById, count, exists …
14. # 14
Toujours plus loin
Implémentation dynamique des requêtes à partir du nom de la méthode
S’appuie sur des conventions de nommage
Interprète les mots clés : And, Or, Like, OrderBy, NotIn, Between …
Ajout possible de requêtes personnalisées avec leur implémentation
Gestion de la pagination et du tri
Suivi de la création et de la modification des entités (dates et utilisateurs)
Les Spécifications permettent de réutiliser des Criterias JPA 2
Support de la librairie QueryDSL pour requêter des entités
de manière typesafe
avec une syntaxe épurée et fluide
15. # 15
Exemple de JpaRepository
// Repository de l’entité Client dont l’identifiant est un entier
public interface ClientRepository extends JpaRepository<Client, Integer> {
// Recherche par nom de clients
List<Client> findByNom(String nom);
// Recherche effectuée à partir du solde es comptes des clients
List<Client> findByComptesSoldeGreaterThan(Double montant);
// Recherche paginée et ordonnée
Page<Client> findByPrenom(String prenom, Pageable pageable);
// Utilisation de la requête JPQL spécifiée
@Query("select count(c) from Client c where u.prenom=?1")
Long countWithPrenom(String prenom);
}
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:jpa="http://www.springframework.org/schema/data/jpa" … >
<!– Détecte et active tous les Repository du package spécifié -->
<jpa:repositories base-package="fr.sqli.bfa.demo.repository" />
</beans>
16. # 16
Query DSL en Action
// Interface héritant de JpaRepository et QueryDslPredicateExecutor
@Autowired
QueryDslJpaRepository<User, Integer> repository;
...
// Méta-modèle de l'entité Client généré à partir des annotations JPA
// Référence les propriétés et les associations d’un client
QClient client = QClient.client;
// Création de prédicats réutilisables
BooleanExpression majeur = client.age.gt(18);
BooleanExpression sousTutelle = client.tuteur.isNotNull();
// Exécution de requêtes type-safe
// - utilisant des prédicats
List<Client> sousResponsabilites = repository.findAll(majeur.or(sousTutelle));
Integer nombreParisiens = repository.count(client.ville.like("paris"));
// - écrites "naturellement" avec Query DSL
JPAQuery query = new JPAQuery(em);
List<Client> clients =
query.from(client).join(client.addresses).fetch().list(client);
Integer maxSolde = query.from(client).uniqueResult(client.solde.max());
17. # 17
Support des transactions
API générique pour la gestion des transactions
Transparence sur la nature d’une transaction (locale ou globale)
Intégration aux différentes technologies :
JDBC, Hibernate, JPA, JMS, JCA, XA
Différentes approches pour la démarcation des transactions
Par programmation
En AOP
Par annotations
Permet d’utiliser le service transactionnel des serveurs JEE
18. # 18
Les attributs transactionnels
Propagation des transactions
Niveau d’isolation
Conditions de rollback
Optimisations sur les transactions en lecture-seule
Time-out
Gestionnaire de transaction
19. # 19
Exemples de propagation
MANDATORY : la méthode doit forcément être exécutée au sein d’un
contexte transactionnel. Si tel n’est pas le cas, une exception est levée.
REQUIRED : la méthode doit forcément être exécutée dans un
contexte transactionnel. S’il n’existe pas lors de l’appel, il est créé.
PROPAGATION_REQUIRES_NEW
Client Service DAO
sans TX
TX1
TX1
TX2
20. # 20
Démarcation par annotations
L’annotation @Transactional permet de déclarer des transactions
Sur une classe ou une interface
l’interface est à privilégier
toutes les méthodes en bénéficient
Sur une méthode
modifie le comportement défini au niveau de la classe
L’annotation @Transactional s’hérite, ce qui permet de :
Bénéficier du comportement transactionnel d’une classe parent
Modifier le comportement d’une classe ou d’une méthode redéfinie
Par défaut, Spring crée un proxy transactionnel à partir de l’interface
Attention aux appels directs de méthode sans passer par le bean
21. # 21
@Transactional par l’exemple
<!-- Active la détection des annotations @Transactional -->
<tx:annotation-driven />
@Transactional(rollbackFor=BusinessException.class)
public interface IBanqueService {
void effectuerVirement(Compte compteSrc, Compte compteDest,
BigDecimal montant) throws SommeIndisponibleException;
@Transactional(readOnly=true)
List<Client> rechercherClient(Criteres criteres);
@Transactional(timeout=30000, Propagation=Propagation.REQUIRES_NEW)
void crediter(Compte compte, BigDecimal montant);
}
22. # 22
Annotation versus AOP
Tableau comparant l’utilisation de l’annotation @Transactional et de
fichier XML pour définir des aspects
Annotation AOP
Avantages + Compilation
+ Productivité
+ Indépendance envers Spring
+ Configuration centralisée
+ Tissage statique possible
Inconvénients - Couplage fort
- Pollution du code
- Lisibilité
- Validation à l’exécution
- Refactoring délicat
- Certaine rigueur nécessaire