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
Cette présentation explique quelques concepts fondamentaux de Hazelcast dans l'écosystème du Big Data, et montre comment :
- Créer un cache mémoire distribué basé sur un cluster Hazelcast
- Faire du traitement distribué avec Hazelcast
- Créer une application de messagerie asynchrone utilisant les Topic d'un cluster Hazelcast
- Autres ...
Bon apprentissage
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.
The Spring IoC container is at the core of the Spring Framework. The container will create the objects, wire them together, configure them, and manage their complete life cycle from creation till destruction. The Spring container uses dependency injection (DI) to manage the components that make up an application.
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.
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
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.
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
Cette présentation explique quelques concepts fondamentaux de Hazelcast dans l'écosystème du Big Data, et montre comment :
- Créer un cache mémoire distribué basé sur un cluster Hazelcast
- Faire du traitement distribué avec Hazelcast
- Créer une application de messagerie asynchrone utilisant les Topic d'un cluster Hazelcast
- Autres ...
Bon apprentissage
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.
The Spring IoC container is at the core of the Spring Framework. The container will create the objects, wire them together, configure them, and manage their complete life cycle from creation till destruction. The Spring container uses dependency injection (DI) to manage the components that make up an application.
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.
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
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.
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.
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.
Quelques Concepts de base à comprendre :
- Data Science
- Machines er Deep Learning, Les réseaux de neurones artificiels,
Les problèmes et les contraintes posées par les algorithmes d’apprentissage basés sur les réseaux de neurones
Principaux catalyseurs qui ont redynamisé l’intelligence artificielle:
- Calcul de hautes performances à savoir les architectures massivement parallèles et les systèmes distribués
- La Virtualisation et le cloud Computing
- Big Data, IOT et Applications Mobiles
- Framework et Algorithmes de Machines et Deep Learning
- Réseaux et Télécommunications
- Open source
L’écosystème des Framework de Machines et Deep Learning.
- L’architecture du Framwork TensorFlow
- Comment développer des applications de machines et Deep Learning pour les applications Web et Mobile en utilisant TensorFlow.JS.
- Démonstrations avec des liens pour télécharger le code source, allant de l’implémentation d’un simple perceptron en Java vers des modèles d’apprentissage supervisé multicouches de classification et un modèle d’extraction de caractéristiques à partir des images pour la reconnaissance des objets filmés par une caméra en utilisant des modèles CNN, pré-entraînes et exposés sur le cloud. (MobileNet)
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
Ce support explique les concepts de base de Big Data Processing. Elle aborde les parties suivantes :
Série de vidéos : https://www.youtube.com/watch?v=1JAljjxpm-Q
- Introduction au Big Data
- Système de stockage en Big Data
- Batch Processing et Stream Processing en Big Data
- Aperçu bref de l’écosystème de Hadoop
- Aperçu de l’écosystème des outils du Bid Gata
- Big data stream processing avec Kafka écosystème
- Architecture de Kafka (Brokers, Zookeeper, Procuder, Consumer, Kafka Streams, Connecteurs)
- Comment démarrer un cluster de brokers KAFKA
- Création et configuration des Topics
- Création d’un Java Kafka consumer
- Création d’un Java Kafka Produder
- Kafka Producer et Kafka Consumer dans une application basée sur Spring
- Kafka Streams
- Intégration de Kafka dans Spring Cloud.
Mot clés : Big data, Big Data Processing, Stream Processing, Kafka, Kafka Streams, Java, Spring
Bon apprentissage
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
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 !!
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.
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.
Quelques Concepts de base à comprendre :
- Data Science
- Machines er Deep Learning, Les réseaux de neurones artificiels,
Les problèmes et les contraintes posées par les algorithmes d’apprentissage basés sur les réseaux de neurones
Principaux catalyseurs qui ont redynamisé l’intelligence artificielle:
- Calcul de hautes performances à savoir les architectures massivement parallèles et les systèmes distribués
- La Virtualisation et le cloud Computing
- Big Data, IOT et Applications Mobiles
- Framework et Algorithmes de Machines et Deep Learning
- Réseaux et Télécommunications
- Open source
L’écosystème des Framework de Machines et Deep Learning.
- L’architecture du Framwork TensorFlow
- Comment développer des applications de machines et Deep Learning pour les applications Web et Mobile en utilisant TensorFlow.JS.
- Démonstrations avec des liens pour télécharger le code source, allant de l’implémentation d’un simple perceptron en Java vers des modèles d’apprentissage supervisé multicouches de classification et un modèle d’extraction de caractéristiques à partir des images pour la reconnaissance des objets filmés par une caméra en utilisant des modèles CNN, pré-entraînes et exposés sur le cloud. (MobileNet)
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
Ce support explique les concepts de base de Big Data Processing. Elle aborde les parties suivantes :
Série de vidéos : https://www.youtube.com/watch?v=1JAljjxpm-Q
- Introduction au Big Data
- Système de stockage en Big Data
- Batch Processing et Stream Processing en Big Data
- Aperçu bref de l’écosystème de Hadoop
- Aperçu de l’écosystème des outils du Bid Gata
- Big data stream processing avec Kafka écosystème
- Architecture de Kafka (Brokers, Zookeeper, Procuder, Consumer, Kafka Streams, Connecteurs)
- Comment démarrer un cluster de brokers KAFKA
- Création et configuration des Topics
- Création d’un Java Kafka consumer
- Création d’un Java Kafka Produder
- Kafka Producer et Kafka Consumer dans une application basée sur Spring
- Kafka Streams
- Intégration de Kafka dans Spring Cloud.
Mot clés : Big data, Big Data Processing, Stream Processing, Kafka, Kafka Streams, Java, Spring
Bon apprentissage
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
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 !!
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.
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.
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).
Pour finir l'année en beauté, le Spring User Groupe FR vous propose de nous retrouver le Mardi 20 Décembre 2011 à 19h00 pour une session sur "Spring Batch Avancé". Lors de la première présentation (http://www.slideshare.net/sugfrance/spring-batch-concepts-de-base), nous avons vu les concepts de base de "Spring Batch".
Lors de cette session nous vous proposons d'aborder les notions avancés de "Spring Batch" en tenant compte de vos suggestions (voir le Google Moderator http://www.google.com/moderator/#16/e=5f36). A la fin de la conférence, nous vous proposerons un quizz afin de gagner quelques exemplaires de "Spring Batch in Action" (A.Cogoluegnes, T. Templier, G. Gregory, O. Bazoud), offerts par la société Ekino (http://www.ekino.com / @3k1n0).
Olivier Bazoud / @obazoud est architecte logiciel chez Ekino (http://www.ekino.com), spécialisé dans les technologies Java/JEE/Spring. Fort de 12 ans d’expérience, Olivier est en charge de l’architecture technique de sites et d'applications web à très fort traffic.
Julien Jakubowski / @jak78 est architecte chez OCTO Technology. Il a 10 ans d'expérience acquise au sein de projets à fort engagement pour des grands comptes, dans des secteurs d'activités variés : banque, assurance, industrie, grande distribution...
Julien accompagne ses clients sur des problématiques d'architecture, d'expertise technique, et de productivité des développements.
Il est également co-fondateur et président du Ch'ti JUG (Java User Group de la région Lilloise), qui rassemble tous les mois plus de 100 passionnés de technologies Java.
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.
Spring Boot propose un large panel d'outils pour démarrer et développer rapidement des applications.
Après une rapide introduction à l'outil, nous présenterons le code d'une application développé en mode microservices. Ce sera aussi l'occasion d'évoquer les principes de circuit breaker et de monitoring ainsi que de savoir comment Spring Boot permet de les réaliser.
Par Nicolas Jozwiak et Thomas Auffredou
Three Key Concepts for Understanding JSR-352: Batch Programming for the Java ...timfanelli
In this presentation, Tim Fanelli provides an introduction to JSR352 programming, and builds a simple application utilizing the JSR 352 chunk processing model.
The sample program presented may be downloaded here:
https://www.dropbox.com/s/55fsjt4ylny95hc/MySampleBatch.jar
Or, email Tim Fanelli - the contact information is on slide 3!
Découvrez Spring Batch, sa simplicité, les concepts de bases ainsi que les notions avancées. Tout tout tout, vous saurez tout sur Spring Batch!
Intervenant : Olivier Bazoud @obazoud
http://chtijug.org/session-spring-batch-avec-ekino-le-29-novembre/
Nous avons le plaisir de vous annoncer que la prochaine session du Ch’ti JUG est prévue le 29 novembre 2011. Elle aura lieu à l’IUT A de Lille 1, boulevard Paul Langevin, à Villeneuve d’Ascq. Plan d’accès
Le thème de cette session est Spring Batch : un framework pour implémenter des traitements de masse en Java.
Cette présentation sera animée par Olivier Bazoud / @obazoud et Julien Jakubowski / @jak78.
Cette session est rendue possible grâce à Ekino / @3k1no.
http://www.parisjug.org/xwiki/bin/view/Meeting/20130514
Quand j'écris une application Web, il y a pléthore de frameworks Web. Quand j'accède à une base de données, il y a des solutions de persistance (Hibernate, etc.). Quand je fais du batch, je suis... à poil ! Les batchs seraient-ils les parents pauvres de Java ? Spring Batch offre pourtant une solution pour vous guider lors de l'écriture de vos batchs en Java en toute décontraction. Le 14 Mai, Olivier et Julien vous présenteront Spring Batch et vous donneront une autre vision des batchs en Java.
Intervenants : Julien Jakubowski et Olivier Bazoud
Au cours de cette session, nous plongerons avec vous dans le quotidien d’une startup qui vient de se lancer sur le Net.
Alors que les premiers utilisateurs affluent vers ses serveurs, l’équipe se retrouve confrontée à ses premiers problèmes de performance. Le prix du succès… ! Nous verrons avec eux comment simuler une arrivée massive d’utilisateurs pour “stresser” leur plateforme. Nous utiliserons les outils d’APM pour monitorer les serveurs et applications Java mais aussi évaluer l’expérience utilisateur. Enfin, nous proposerons une démarche et des outils pour tester la performance en continue.
Avec de nombreuses démos en live, cette session en français s’adresse aux développeurs, architectes et décideurs sur les projets IT.
Animé avec Landry DEFO KUATE (OCTO)
Construire une application sur l'architecture modèle-vue-contrôleur en PHP à partir d'un exemple simple : une liste de choses à faire, avec deux pages types : liste et détails.
Vous ne vous y retrouver pas dans la nébuleuse Spring ?
Vous avez entendu parler de Spring Batch (ou pas d’ailleurs), vous aimeriez que l’on vous explique comment on s’en sert ?
Vous voulez en savoir plus sur ce framework ?
Alors venez au prochain NormandyJUG !
Jean-Philippe Briend est Architecte chez Infin-IT, société de service de petite taille spécialisée en Nouvelles Technologies et Finance / Assurance.
Il est intervenu chez de grands comptes (grande distribution, finance, assurance, éditeurs, etc…) sur des projets Java / J2ee stratégiques.
En 2010, il est intervenu comme Architecte pour la refonte de batchs orientée Performance chez un grand éditeur français.
Il nous présentera Spring Batch et son retour d’expérience de ce projet.
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
MongoDB 3.6 helps you move at the speed of your data, turning developers, operations teams and analysts into a growth engine for the company. It enables new applications to be marketed faster, run reliably and securely on a large scale, and unlock information and information in real time. Learn more: https://www.mongodb.com/mongodb-3.6
Intégration Continue PHP avec Jenkins CIHugo Hamon
Comment assurer le suivi qualite du code source d'une application web? Ce n'est pas une tache aisée ! C’est d’autant plus vrai que PHP est encore considéré aujourd'hui comme un langage peu professionnel. PHP est pourtant un langage dont l'outillage n'a rien a envier a l'ensemble de ses concurrents. L'objectif de cette conférence est de présenter les bonnes pratiques à adopter ainsi que les différents outils a mettre en oeuvre afin de contrôler la qualité d'un projet PHP au quotidien. Un focus particulier sera porté sur la plateforme d'intégration continue Jenkins, les tests unitaires ou bien encore la récupération et l'interprétation des métriques collectées.
1. Workshop Spring - Session 4
Retour d’expérience
Mise en oeuvre de Spring Batch
Diffusé en janvier 2012
Réactualisé en décembre 2014
2. Sommaire
Introduction 3
Présentation de l’étude de cas 4
Objectifs 7
Mise en oeuvre 8
Pour aller plus loin 23
Conclusion 24
2
Retour d’Expérience sur la mise en oeuvre de Spring Batch
3. Introduction
• Qu’est-ce qu’un Batch ?
• Suite de traitements sur un ensemble de données
• sans intervention humaine
• Java et les batchs
• Spring Batch
• Standardisation JSR-352 Batch Applications dans JEE 7
– Implémentation de référence : https://java.net/projects/jbatch/
• Aucune alternative aussi aboutie
• Objectifs
• Aperçu concret de sa Mise en oeuvre
• Intégrer les fondamentaux
• Avoir une vue d’ensemble de Ses fonctionnalités
• L’utiliser demain
3
Workshop sur les batchs en java
4. Présentation de l’étude de cas
4
Périmètre fonctionnel
• Commandes réalisées depuis une application Web
et stockées en base de données
• Tous les soirs, un traitement batch émet un fichiers
client et un fichier de facturation vers un Back
Office Mainframe
• Les commandes traitées sont marquées comme tel
5. Présentation de l’étude de cas
• Projet métier
• Retarder l’exécution de 2 batchs quotidiens
• Export de données au Mainframe réalisé à chaud
• Batchs iso-fonctionnels
• Recette complète par la MOA
• Opportunités
• Montée de version de framework : Spring et Hibernate
• Migration d’un framework de batch maison à Spring Batch 2.1
• Déploiement automatisé des batchs
• Fiabiliser l’exécution des batchs
Gestion des erreurs et des codes retours
• Améliorer la gestion des logs
• Bénéficier de reporting
5
Origine du projet de migration
6. Présentation de l’étude de cas
1. Récupère les identifiants des commandes à exporter
2. Charge les commandes à partir de leurs identifiants
3. Itère sur la liste des commandes
1. Génère les factures et identifie les clients
2. Construit les enregistrements CICS des factures et des clients
3. Incrémente les compteurs
4. Construit les enregistrements header et footer
5. Ecrit les enregistrements dans 2 fichiers temporaires
6. Met à jour en base de données un flag d’émission
7. Renomme les fichiers temporaires afin qu’ils soient pris en compte par le
système de transfert de fichier
6
Batchs existants décomposés en 7 étapes
7. Objectifs
• Migration technique
• Mêmes données en entrée
• Mêmes fichiers en sortie
• Evolutions techniques
• Tests de non régressions
– Tests de bout en bout basés sur :
• Un échantillonnage de données de production
• Des fichiers générés à partir du batch existant
• Des outils : H2, Maven et JUnit
• Tests selenium
• Saisie et émission de commandes
• Exécutés automatiquement avant, pendant et après le batch
7
Des batchs iso-fonctionnels
8. Mise en oeuvre
8
Décomposition des batchs en une seule étape
Base
MySql
avec
Commandes
Alerte par mail
Erreur
Lecture Ecriture
Fichier de facturation
Fichier des clients
Traitement
Construction
Enregistrements
CICS
Une étape décomposée en 3 phases
9. Spring Batch
9
Vocable
Job
Step
Chunk Tasklet
ItemReader ItemProcessor ItemWriter
s
Base
G@el
10. Spring Batch
10
Diagramme de séquence de traitement d’un chunk
TaskletStep ItemReader ItemProcessor ItemWriter
read
item
transform(items)
transformedItems
write(transformedItems)
Chaque chunk
s’exécute dans sa
propre transaction
Les items sont lus un à
un ou en bloc
La phase de
traitement est
optionnelle
Le lot de données à traiter peut être morcelé en chunk
Point de sauvegarde
avant le commit
11. Mise en oeuvre
11
Configuration d’un Job et d’un Step
<!-- Job Spring Batch chargé d'exécuter le batch JM076-->
<batch:job id="batchJM076Job" restartable="false">
<batch:step id="processCarOrderStep"
parent="processOrderStep" />
</batch:job>
Permet de mutualiser le step entre 2 batchs
<!– Etape chargée d'émettre des commandes-->
<batch:step id="processOrderStep" abstract="true">
<batch:tasklet transaction-manager="transactionManager">
<batch:chunk reader="orderReader"
processor="orderProcessor"
writer="billingAndCustomerWriter"
… />
</batch:tasklet>
…
</batch:step>
Référence 3
beans Spring
Batch transactionnel
12. Mise en oeuvre
12
Reader Hibernate
Initialement décomposé en un bean parent générique et un bean
spécifique au batch JM076
<!-- Reader Spring Batch chargé de récupérer les commandes
à traiter depuis la base de données via Hibernate -->
<bean id="orderReader"
class="org.sf.batch.item.database.HibernateCursorItemReader"
p:sessionFactory-ref="sessionFactory"
p:useStatelessSession="false">
<property name="queryString"
value="FROM Order order
WHERE order.sentItemFlag is null
ORDER BY id" />
</bean>
Session Hibernate nécessaire
pour le Lazy-loading
Requête HQL de sélection des
commandes à émettre
13. Spring Batch
13
Quelques implémentations de Reader disponibles
public interface ItemReader<T> {
T read() throws Exception, UnexpectedInputException,
ParseException;
}
Classes Propriétés
StoredProcedureItemReader Nom de la procédure stockée, paramètres,
row mapper
JdbcPagingItemReader Taille d’une page, fournisseur de requêtes
SQL pagninées, paramètres
FlatFileItemReader Encodage, ressource à lire, lignes d’en-tête,
line mapper, séparateur
StaxEventItemReader Ressource XML à lire, élément racine,
unmarshaller
JmsItemReader Jms template, file JMS à lire
14. Mise en oeuvre
14
Déclaration et implémentation d’un Item Processor
<!-- Traite les commandes fin d'émettre les factures -->
<bean id="orderProcessor"
class="com.javaetmoi.batch.jm076.CarOrderProcessor"
scope="step"
p:billingCounter-ref="billingCounter"
p:customerCounter-ref=« customerCounter" />
public class CarOrderProcessor implements
ItemProcessor<Order, ProcessResultHolder> {
public ProcessResultHolder process(Order order)
throws BatchException {
// … Création des factures et identification des clients
return processResultHolder;
} …
}
15. Mise en oeuvre
15
Configuration des writers (1/2)
<!-- Writer composite Spring batch chargé de générer 2 fichiers
pour le back office et de mettre à jour la base MySql-->
<bean id="billingAndCustomerWriter"
class="org.sf.batch.item.support.CompositeItemWriter">
<property name="delegates">
<list>
<!-- Fichier des factures -->
<ref bean=« billingWriter" />
<!-- Fichier des clients -->
<ref bean="customerWriter" />
<!– Mis à jour indicateur de transmission dans la table
des commandes -->
<ref bean="orderFlagWriter" />
</list>
</property>
</bean>
Writers délégués appelés
séquentiellement dans
l’ordre déclaré
16. Spring Batch
16
Quelques implémentations de writers disponibles
public interface ListItemWriter<T> {
void write(List<? extends T> items) throws Exception;
}
Classes Propriétés
HibernateItemWriter Template Hibernate
JdbcBatchItemWriter Requête SQL, callback method chargé de
setter les paramètres
FlatFileItemWriter Encodage, fichier plat, séparateur de ligne,
callbacks d’en-ête et de fin de fichier
StaxEventItemWriter Fichier XML, élément racine, marshaller,
callbacks d’en-ête et de fin de fichier
SimpleMailMessageItemWriter Implémentation de MailSenders
17. Mise en oeuvre
17
Configuration des writers (2/2)
<!-- Writer Spring batch chargé d'écrire le fichier des factures -->
<bean id="billingWriter"
class="com.javaetmoi.core.batch.writer.ExtendedFlatFileItemWriter"
p:lineSeparator="" p:encoding="ISO-8859-1"
p:shouldDeleteIfError="true" />
<property name="lineAggregator">
<bean class="com.javaetmoi…common.item.BillingLineAggregator"/>
</property>
<property name="resource" value="file:${batch.data.out.path}
/billing-jm076.dat"/>
<property name="footerCallback" ref="billingFooterCallback" />
</bean>
<!-- Met à jour le flag des factures envoyées au back office -->
<bean id="billingFlagWriter"
class="com.javaetmoi…common.item.GenericFlagWriter"
p:processOrderToExport-ref="processOrderToExport" />
<bean id=" processOrderToExport "
class="fr…batch.commun.services.ProcessOrdertoExport"
p:orderDao-ref="orderDao" />
18. Mise en oeuvre
• Besoin
• Une seule et unique transaction pour tout le batch
• Les erreurs fonctionnelles ne doivent pas faire échouer le batch
• Fichiers générés : tout ou rien
• Comportement proposé par Spring Batch
• Une transaction par chunk
• Configuration des exceptions n’annulant pas la transaction
• Les writers sur filesystem peuvent participer au contexte transactionnel
• Solutions
• Intervalle de commit réglé à l’infini pour avoir un unique chunk
• Les exceptions de type BatchException ne provoquent pas de rollback
• Les writers des factues et des clients sont enregistrés au Stream
• Restauration en mémoire des compteurs assurée par un listener
18
Gestion des transactions (1/2)
20. Mise en oeuvre
• Besoin
• Erreur de traitement d’une commande non bloquante
• Enregistrée dans les pistes d’audit
• Être alerté par mail
• Solutions
• Les erreurs fonctionnelles signalées par des exceptions spécifiques
ne doivent pas faire échouer le traitement
– Non vérifiées, les BatchException sont levées lors de la génération des
enregistrements
– Paramétrable dans le chunk : skip-limit et skippable-exception-classes
• Traces générées lorsqu’une exception est levée
– Méthode onProcessError() de l’interface ItemProcessListener
• Envoi de mail sur génération d’une trace de niveau >= à warning
– Implémentation avec Logback : SMTPAppender, OnEventEvaluator,
HTMLLayout
20
Gestion des erreurs (1/2)
21. 21
Mise en oeuvre
<batch:tasklet …>
<batch:chunk … skip-limit="2147483647" …>
…
<batch:skippable-exception-classes>
<batch:include
class="com…common.exception.BatchException" />
</batch:skippable-exception-classes>
</batch:chunk>
…
</batch:tasklet>
public void onProcessError(Order order, Exception ex) {
LOGGER.error("Une erreur est survenue lors du
traitement de la commande n°{}: {}",
order.getNumber(), ex.getMessage());
}
Gestion des erreurs (2/2)
22. Mise en oeuvre
• Exécution possible en ligne de commande ou par
programmation
• Ordonnanceur : Quartz, $U, CRON, planificateur de tâches Windows …
• Tests Junit et TestNG
• JMX, Interface graphique, ServIces web …
• Contexte projet :
• Ordonnanceur Dollar Universe
• Packagés dans un JAR
– Extrait du MANIFEST.MF de myapp-batch-2.0.1.jar :
– Main-Class:
org.springframework.batch.core.launch.support.CommandLineJobRunner
Class-Path: ./ojdbc-10.2.0.3-jdk14.jar ./spring-batch-core-3.0.2.RELEASE.jar …
• En Ligne de commande
– java -jar myapp-batch-2.0.1.jar
com/javaetmoi/myapp/batch/applicationContext-batch-jm076.xml
batchJM076Job
22
Exécution du batch
23. Pour aller plus loin
• Console d’administration et de suivi
• Spring batch Admin
• Reprise sur erreur
• Réexécution d’une instance de job
• Persistance du contexte
• Exécution dynamique
• Enchaînement conditionnels d’étapes
• Paramètres d’entrée évalués dynamiquement
• Scalabilité et Parallélisme
• Exécution de chunk et de step en parallèle
• Sur la même machine ou de manière distribuée
• Partionnement des données
23
Fonctionnalités non présentées
24. Conclusion
• Code technique supprimé
• Réutilisabilité du code métier
• Création des enregistrements CICS à partir des commandes
• Testabilité
• Tests unitaires existants conservés
• Tests de bout en bout ajoutés
• Design Amélioré
• Découpage mieux structuré
• Peut-être encore meilleur si développé from scrath
• Désenttement de l’ancien framework de batchs maison
• Buggué au niveau du code retour en cas d’erreur
• Exemple d’utilisation réutilisé pour 2 autres batchs
• Job Repository persistant non exploité
• Effort nécessaire pour monter en compétences
• La connaissance du framework Spring est un pré-requis
24
Retours sur la migration vers Spring Batch
25. Conclusion
25
Spring Batch en 3 mots
Robuste
• Fiable
• Gestion des
erreurs
• Reprise
• Tests unitaires
• Performant
• Standardisé
Productif
• Cadre de
développement
• Maintenabilité
• Code technique
fourni
Extensible
• Ouvert
• Spring Batch
Admin
• Spring
Intégration
Notes de l'éditeur
Qu’est-ce qu’un batch ?
Pas nécessairement d’IHM – déclenchement en ligne de commande
Traitements généralement sur de gros volumes de données,
Planifiés à une heure fixe
Un batch n’est pas un scheduler (cron / $U / Quartz)
Exemples de batchs :
Mise à jour de données du référentiel
Reporting
Technique d’intégration entre systèmes du SI (transfert de fichiers) qui n’ont pas besoin de temps réel
Java et les batchs
Frameworks batch open source : expresso ?, java batch and job framework (jbjf)
Order (Commande) => Billing (facturation) + Customer (client)
Reporting : reporting par mail en cas d’erreur et, à plus long termes, via l’outil Spring Batch Admin
Lexique de Spring Batch
Job : batch Spring
Step : étape d’un traitement par lot. Un bath peut être composé de plusieurs étapes (workfow). Nouvelle portée : step
Tasklet : interface portant une unique méthode execute() (références aux servlet, portlet)
Chunk : sous-lot de données à traiter transactionnellement
ItemXxx : tâche portant sur une donnée
<batch: namespace Spring du DSL permettant de décrire un batch
restartable à false : indique à Spring que le batch n’est pas conçu pour être redémarré de suite. En effet, le fichier Cobol généré lors de la première exécution serait écrasé avant qu’il ne soit transféré au CICS.
Un seul step dont la configuration est définie dans un step parent (réutilisé dans 2 batchs similaires)
ItemReader
Renvoie null lorsqu’il n’y a plus aucune donnée
Les implémentations n’ont pas besoin d’être thread-safe
Autres implémentations :
StaxEventItemReader
HibernatePagingItemReader
JpaPagingItemReader
ListItemReader (intéressante pour les tests)
Le bean a pour portée l’étape : il est créé au début du step et détruit à la fin
Le bean orderProcessor référence 2 beans de compteurs en utilisant le namespace p: de Spring 3.0
La classe ProcessResultHolder est une classe spécifique contenant des listes de tableaux de byte, une pour les factures et une autre pour les clients
Le mappging Classe Java Enregistrements binaires COBOL / CICS a été facilité par un générateur de classe Java de RAD
La classe ExtendedFlatFileItemWriter étend la classe FlatFileItemWriter de Spring Batch en lui ajoutant une propriété supplémentaire :
Lorsqu'une erreur technique survient pendant une étape, la propriété shouldDeleteIfError de ce writer permet de supprimer le fichier de destination. En principe, du fait du buffering, ce fichier est vide ou ne contient qu'un footer.
L'activation de ce comportement permet de rester en phase avec l'ancienne version du batch sans Spring Batch.
Pour être utilisé, ce writer doit être enregistré en tant que listener au niveau du step
La classe BillingtLigneAggregator est chargée d'aggrèger les enregistrements en fin de fichier à partir du tableau de bytes des enregistrements CICS
Le 3ième bean customerWriter est déclaré similairement au bean bilingWriter
Volumétrie : 300 commandes par jour (tout tient en mémoire)
Streaming d’écriture : le contenu est bufférisé. Il est flusher lors d’un commit.
Les beans implémentant l’interface ItemStream (ex: ItemWriter) peuvent participer aux transactions.
Lorsqu’ils sont utilisés indirectements, via par exemple un CompositeItemWrite, doivent s’enregistrer dans la balise <streams>
Un compteur d’enregistrements est incrémenté au cours du traitement des commandes. Il sert à générer le pied de fichier. Lorsqu’une exception fonctionnelle est levée, l’enregistrement en cours ne sera pas écrit. Le compteur doit en tenir compte. Un ItemProcessListener est donc enregistré.
beforeProcess
onProcessError
Une autre solution aurait pu être implémenté à l’aide d’un delegate : cf. § « Writing a Summary Summer » du manuel de référence
La valeur de l’attributt commit-interval correspond à Integer.MAX_VALUE
Commit interval : nombre d’élements traités dans la même transaction
Ajustable en fonction de plusieurs variables :
Performance : ouverture/fermeture intempestive de transaction vs transaction longue
Occupation mémoire
Niveau de granularité des reprises sur incidents
Step multi-thread : un task executor est référencé au niveau du step. Chaque chunk est exécuté par un thread différent.
Code technique maison supprimé : Ouverture/fermeture de fichiers, DAO, Tests unitaires
Si batch développé from scratch :
Footer sans doute généré en suivant la bonne pratique du guide de référence
Peut-être un second step pour gérer les erreurs : envoi de mail, suppression du fichier vide …
Job Repository persistant :
monitoring / suivi des batchs exécutés
reprise après erreurs sans avoir à relancer tout le batch
Montée en compétence :
Documentation de Référence de Spring Batch 3 : PDF de 177 pages (http://docs.spring.io/spring-batch/reference/pdf/spring-batch-reference.pdf)
Extensible : ajout d’un composant batch dans le socle technique du projet + cf. https://github.com/arey/spring-batch-toolkit