La transposition de processus métiers complexes en programmes informatiques est parfois difficile pour des raisons techniques et/ou communicationnelles. Le faire efficacement et sous une forme flexible l'est encore plus. Pousse-Café, un framework Java se basant sur le Domain-Driven Design (DDD), rend la tâche plus abordable. https://www.pousse-cafe-framework.org/
Par Gérard Dethier, aux Geeks Anonymes du 15 janvier 2021
Vidéo : https://youtu.be/DE0QpTIz1cQ
Windows PowerShell est le langage de script incontournable pour l’automatisation des tâches simples ou complexes sur les environnements Windows. Cette session vous propose un retour d’expérience de l’utilisation de Windows PowerShell sur des cas concrets tirés de projets, accompagné de démonstrations.
Les équipes de développement se tournent de plus en plus vers des architectures orientées conteneurs.
Une fois les POCs validés, il faut songer à la mise en production de ces solutions. Jonathan est administrateur systéme, il a mis en place et exploité des solutions conteneurisées dont certaines architectures dites ‘star wars’ (cf Devoxx 2015). Jean-Pascal est développeur backend, il a développé Kodo Kojo, une solution de provisionning d’usine logicielle fortement basée sur des conteneurs.
Au cours de cette présentation, ils vont vous présenter les solutions permettant de connaître l’état de vos clusters de conteneurs à un instant T.
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)
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
Windows PowerShell est le langage de script incontournable pour l’automatisation des tâches simples ou complexes sur les environnements Windows. Cette session vous propose un retour d’expérience de l’utilisation de Windows PowerShell sur des cas concrets tirés de projets, accompagné de démonstrations.
Les équipes de développement se tournent de plus en plus vers des architectures orientées conteneurs.
Une fois les POCs validés, il faut songer à la mise en production de ces solutions. Jonathan est administrateur systéme, il a mis en place et exploité des solutions conteneurisées dont certaines architectures dites ‘star wars’ (cf Devoxx 2015). Jean-Pascal est développeur backend, il a développé Kodo Kojo, une solution de provisionning d’usine logicielle fortement basée sur des conteneurs.
Au cours de cette présentation, ils vont vous présenter les solutions permettant de connaître l’état de vos clusters de conteneurs à un instant T.
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)
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
Conférence donnée à la Droidcon Tunisia 2015.
Les mises à jour OTA sont partout sur nos téléphones (ok, presque partout) mais comment fonctionnent-elles ?
Au cours de cette présentation, nous verrons :
Ce qu’est une MàJ OTA
Comment l’implémenter (exploration de code : intent, permission système, recovery, etc.)
Quelle architecture backend pour mettre en place une solution d’OTA
Bien que Docker soit facile d'utilisation, construire une image reste un exercice compliqué.
Optimisation, layers, et sécurité nécessitent de s'abstraire des Dockerfile basiques qu'on peut trouver sur internet.
Dans ce BBL, nous verrons comment bien packager une application Spring Boot dans une image Docker/OCI.
Nous allons parcourir les bonnes pratiques préconisées par Spring, les pièges à éviter, comment bien écrire un Dockerfile pour optimiser la construction et l'image finale pour une exécution dans Kubernetes et nous verrons aussi des moyens alternatifs de construction d'images Spring Boot et l'outillage d'analyse à ajouter à votre toolbox.
Venez découvrir les méthodes, outils et best practices utilisés par les experts du Support Microsoft pour identifier et corrigier les problèmes de performances sur SQL Serveur ou tout simplement en optimiser les performances. Cette session présentée par nos spécialistes au Support SQL Serveur en France, sera pour vous une occasion unique de les rencontrer ! Avec environ 50% de contenu original pour cesTechdays, nous aborderons entre autre la gestion des index, du columns store ou encore de la compression, nous vous présenterons également les outils utilisés et la manière de les utiliser.
Java dans Windows Azure: l'exemple de JonasMicrosoft
Jonas, serveur d'application J2EE, a récemment été porté par Bull, avec l'aide de Microsoft, sur Windows Azure. Au-delà de la mixité des environnements Java et Microsoft, cette session démontrera par l'exemple la grande ouverture de Windows Azure à des technologies peu habituées à s'éxécuter en environnement Windows.
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...Alexandre Touret
Kubernetes et les technologies cloud sont aujourd'hui les standards pour déployer des applications de toutes sortes dans le cloud: api, batchs, microservices et même des monolithes! Ils apportent des solutions à beaucoup de problèmes mais aussi une grande complexité. Il peut donc être très difficile pour les développeurs et concepteurs d'identifier les contraintes de telles architectures.
Dans cette présentation, vous (re)découvrirez dix astuces et conseils que j'ai pu appliquer et qui m'ont aidé dans mes derniers projets.
Ces derniers traiteront :
de l'environnement de l'application
du choix des solutions techologiques
du développement
des contraintes de conception liées à K8S
et plus encore !
http://www.brownbaglunch.fr/baggers.html#Olivier_BAZOUD
Monitoring: regarder votre application à la loupe!
Regarder fonctionner votre application sous toutes les coutures.
Nous verrons comment alimenter Graphite, un excellent outil de métrologie, dans une architecture java (je peux m'adapter à vote langage): collectd, jmxtrans, metrics, statsd,.. afin de prendre des mesures au niveau du système, de l'applicatif, des batchs et du métier (KPI). Nous aborderons ensuite la corrélation tous ces métriques de façon très visuelle et comment réveiller vos sysadmins en cas d'urgence ;)
Cette session passe en revue des nouveautés autour de l’infrastructure dans Microsoft Azure. Nous verrons toutes les dernières évolutions : les templates de VM, le stockage, le réseau, la console …
Cette session passe en revue des nouveautés autour de l’infrastructure dans Microsoft Azure. Nous verrons toutes les dernières évolutions : les templates de VM, le stockage, le réseau, la console …
Les containers docker vu par un chef cuisinier et un mécanicienRachid Zarouali
Les containers docker sont partout aujourd'hui, nos boites mails google/office365, nos applications web, notre accès pour les rendez-vous médicaux, les avions, ...
Ils sont partout mais pourtant pas toujours facile a appréhender, et pourtant, ils ont beaucoup plus de similitude avec des métiers de notre quotidien qu'il n'y parait.
Lors de ce webinar, je vous presenter ces fameux containers Docker, vu par un chef cuisiner et un mécanicien automobile et vous ferez qu'il a beaucoup de points communs.
Agenda :
Les enjeux de la performance d'un site Web
Les différents éléments de performance d'un site Web
Infrastructure, architecture technique, tuning, architecture applicative, WebPerf
L'obsession de la mesure
Les outils
Les quickwins
Caches, upscaling, outscaling, sharding
La démarche de test de charge
Méthodologie, outils, types de test, données de test
La démarche PDCA
Intégrer les tests de charge au cycle de développement
Environnement éphémère
Oxalide MorningTech #2 - Démarche de performance
2ème MorningTech @Oxalide, animé par Adrien Le Priol (@Priolix) et Ludovic Piot (@lpiot), le 28 février 2017.
Une vue d'ensemble sur la démarche et les outils pour aborder et maîtriser la performance de son site Web.
En 2012, Amazon publiait une étude indiquant que chaque seconde de performance perdue sur son site de commerce lui coûtait $1.6 milliards de chiffre d'affaire.
Par delà ce chiffre colossal avancé par le géant du Web, il est une réalité business : plus un site est lent, et moins les utilisateurs sont enclin à naviguer dessus. Les smartphones et le SoLoMo exacerbent cette réalité avec encore plus depuis 10 ans maintenant.
Sur le terrain, l'architecture technique des sites Web, de plus en plus complexe, rendent ses performances impossibles à prédire : complexité des développements applicatifs, multitude des composants impliqués dans l'architecture technique, recours à des services tiers (issus du SI de votre entreprise, ou de services tiers), big data, machine learning…
Une seule façon de prédire les performances : tester… en situation réelle.
A travers les différentes étapes d'une démarche d'optimisation des performances d'un site Web, les enjeux et les écueils d'une telle démarche vous seront détaillés.
Subject: Oxalide's MorningTech talk about an overview of how to deal with performance in a Web site.
Date: 28-feb-2017
Speakers: Adrien Le Priol (@Priolix, @Oxalide) and Ludovic Piot (@lpiot, @Oxalide)
Language: french
Lien SpeakerDeck : https://speakerdeck.com/lpiot/oxalide-morning-tech-number-2-demarche-performance
Lien SlideShare : https://www.slideshare.net/LudovicPiot/morning-tech-2-demarche-performance-slides
YouTube Video capture: https://youtu.be/a8jSbvyBzYU
Main topics:
* Les enjeux de la performance d'un site Web
* Les différents éléments de performance d'un site Web
** Infrastructure, architecture technique, tuning, architecture applicative, WebPerf
* L'obsession de la mesure
* Les outils
* Les quickwins
** Caches, upscaling, outscaling, sharding
* La démarche de test de charge
** Méthodologie, outils, types de test, données de test
* La démarche PDCA
** Intégrer les tests de charge au cycle de développement
** Environnement éphémère
* Questions / Réponses
Managing Open Source Licenses (Geeks Anonymes)Geeks Anonymes
This document discusses open source software licenses and managing open source code. It provides an overview of common open source licenses like GPL, MIT, and BSD licenses. It also discusses risks of license incompatibility and how to detect open source code dependencies. The document recommends that developers choose licenses carefully, document code properly, and that companies establish open source policies.
Contenu connexe
Similaire à Implémentation efficace et durable de processus métiers complexes
Conférence donnée à la Droidcon Tunisia 2015.
Les mises à jour OTA sont partout sur nos téléphones (ok, presque partout) mais comment fonctionnent-elles ?
Au cours de cette présentation, nous verrons :
Ce qu’est une MàJ OTA
Comment l’implémenter (exploration de code : intent, permission système, recovery, etc.)
Quelle architecture backend pour mettre en place une solution d’OTA
Bien que Docker soit facile d'utilisation, construire une image reste un exercice compliqué.
Optimisation, layers, et sécurité nécessitent de s'abstraire des Dockerfile basiques qu'on peut trouver sur internet.
Dans ce BBL, nous verrons comment bien packager une application Spring Boot dans une image Docker/OCI.
Nous allons parcourir les bonnes pratiques préconisées par Spring, les pièges à éviter, comment bien écrire un Dockerfile pour optimiser la construction et l'image finale pour une exécution dans Kubernetes et nous verrons aussi des moyens alternatifs de construction d'images Spring Boot et l'outillage d'analyse à ajouter à votre toolbox.
Venez découvrir les méthodes, outils et best practices utilisés par les experts du Support Microsoft pour identifier et corrigier les problèmes de performances sur SQL Serveur ou tout simplement en optimiser les performances. Cette session présentée par nos spécialistes au Support SQL Serveur en France, sera pour vous une occasion unique de les rencontrer ! Avec environ 50% de contenu original pour cesTechdays, nous aborderons entre autre la gestion des index, du columns store ou encore de la compression, nous vous présenterons également les outils utilisés et la manière de les utiliser.
Java dans Windows Azure: l'exemple de JonasMicrosoft
Jonas, serveur d'application J2EE, a récemment été porté par Bull, avec l'aide de Microsoft, sur Windows Azure. Au-delà de la mixité des environnements Java et Microsoft, cette session démontrera par l'exemple la grande ouverture de Windows Azure à des technologies peu habituées à s'éxécuter en environnement Windows.
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...Alexandre Touret
Kubernetes et les technologies cloud sont aujourd'hui les standards pour déployer des applications de toutes sortes dans le cloud: api, batchs, microservices et même des monolithes! Ils apportent des solutions à beaucoup de problèmes mais aussi une grande complexité. Il peut donc être très difficile pour les développeurs et concepteurs d'identifier les contraintes de telles architectures.
Dans cette présentation, vous (re)découvrirez dix astuces et conseils que j'ai pu appliquer et qui m'ont aidé dans mes derniers projets.
Ces derniers traiteront :
de l'environnement de l'application
du choix des solutions techologiques
du développement
des contraintes de conception liées à K8S
et plus encore !
http://www.brownbaglunch.fr/baggers.html#Olivier_BAZOUD
Monitoring: regarder votre application à la loupe!
Regarder fonctionner votre application sous toutes les coutures.
Nous verrons comment alimenter Graphite, un excellent outil de métrologie, dans une architecture java (je peux m'adapter à vote langage): collectd, jmxtrans, metrics, statsd,.. afin de prendre des mesures au niveau du système, de l'applicatif, des batchs et du métier (KPI). Nous aborderons ensuite la corrélation tous ces métriques de façon très visuelle et comment réveiller vos sysadmins en cas d'urgence ;)
Cette session passe en revue des nouveautés autour de l’infrastructure dans Microsoft Azure. Nous verrons toutes les dernières évolutions : les templates de VM, le stockage, le réseau, la console …
Cette session passe en revue des nouveautés autour de l’infrastructure dans Microsoft Azure. Nous verrons toutes les dernières évolutions : les templates de VM, le stockage, le réseau, la console …
Les containers docker vu par un chef cuisinier et un mécanicienRachid Zarouali
Les containers docker sont partout aujourd'hui, nos boites mails google/office365, nos applications web, notre accès pour les rendez-vous médicaux, les avions, ...
Ils sont partout mais pourtant pas toujours facile a appréhender, et pourtant, ils ont beaucoup plus de similitude avec des métiers de notre quotidien qu'il n'y parait.
Lors de ce webinar, je vous presenter ces fameux containers Docker, vu par un chef cuisiner et un mécanicien automobile et vous ferez qu'il a beaucoup de points communs.
Agenda :
Les enjeux de la performance d'un site Web
Les différents éléments de performance d'un site Web
Infrastructure, architecture technique, tuning, architecture applicative, WebPerf
L'obsession de la mesure
Les outils
Les quickwins
Caches, upscaling, outscaling, sharding
La démarche de test de charge
Méthodologie, outils, types de test, données de test
La démarche PDCA
Intégrer les tests de charge au cycle de développement
Environnement éphémère
Oxalide MorningTech #2 - Démarche de performance
2ème MorningTech @Oxalide, animé par Adrien Le Priol (@Priolix) et Ludovic Piot (@lpiot), le 28 février 2017.
Une vue d'ensemble sur la démarche et les outils pour aborder et maîtriser la performance de son site Web.
En 2012, Amazon publiait une étude indiquant que chaque seconde de performance perdue sur son site de commerce lui coûtait $1.6 milliards de chiffre d'affaire.
Par delà ce chiffre colossal avancé par le géant du Web, il est une réalité business : plus un site est lent, et moins les utilisateurs sont enclin à naviguer dessus. Les smartphones et le SoLoMo exacerbent cette réalité avec encore plus depuis 10 ans maintenant.
Sur le terrain, l'architecture technique des sites Web, de plus en plus complexe, rendent ses performances impossibles à prédire : complexité des développements applicatifs, multitude des composants impliqués dans l'architecture technique, recours à des services tiers (issus du SI de votre entreprise, ou de services tiers), big data, machine learning…
Une seule façon de prédire les performances : tester… en situation réelle.
A travers les différentes étapes d'une démarche d'optimisation des performances d'un site Web, les enjeux et les écueils d'une telle démarche vous seront détaillés.
Subject: Oxalide's MorningTech talk about an overview of how to deal with performance in a Web site.
Date: 28-feb-2017
Speakers: Adrien Le Priol (@Priolix, @Oxalide) and Ludovic Piot (@lpiot, @Oxalide)
Language: french
Lien SpeakerDeck : https://speakerdeck.com/lpiot/oxalide-morning-tech-number-2-demarche-performance
Lien SlideShare : https://www.slideshare.net/LudovicPiot/morning-tech-2-demarche-performance-slides
YouTube Video capture: https://youtu.be/a8jSbvyBzYU
Main topics:
* Les enjeux de la performance d'un site Web
* Les différents éléments de performance d'un site Web
** Infrastructure, architecture technique, tuning, architecture applicative, WebPerf
* L'obsession de la mesure
* Les outils
* Les quickwins
** Caches, upscaling, outscaling, sharding
* La démarche de test de charge
** Méthodologie, outils, types de test, données de test
* La démarche PDCA
** Intégrer les tests de charge au cycle de développement
** Environnement éphémère
* Questions / Réponses
Managing Open Source Licenses (Geeks Anonymes)Geeks Anonymes
This document discusses open source software licenses and managing open source code. It provides an overview of common open source licenses like GPL, MIT, and BSD licenses. It also discusses risks of license incompatibility and how to detect open source code dependencies. The document recommends that developers choose licenses carefully, document code properly, and that companies establish open source policies.
Conférence des Geeks Anonymes sur " Reprendre le contrôle de ses données ", par Gérard Dethier, le 26 octobre 2020.
Vidéo : https://youtu.be/RUbZ9RbI7TA
Conférence des Geeks Anonymes sur " le langage Go ", par Thomas Hayen le 23 septembre 2020.
Cette conférence est disponible en vidéo sur Youtube : https://youtu.be/AlGGneVGTJk
This document provides an overview of Kubernetes including: its architecture with key components like kubelet, kube-proxy, controller manager, scheduler, and etcd; how it manages deployments with rolling updates and rollbacks; jobs; services; ingress; volumes; configmaps and secrets; namespaces; cronjobs and daemonsets; readiness and liveness probes; statefulsets; network policies; RBAC and security; and a brief history of Kubernetes. It also includes contact information for Philippe Collignon who provides additional context on his experience with Kubernetes.
Rust is a systems programming language that offers performance comparable to C and C++ with memory safety and thread safety. It uses a borrow checker to enforce rules around ownership, borrowing, and lifetimes that prevent common bugs like use of dangling pointers and data races. Rust also supports features like generics, pattern matching, and idioms that improve productivity without sacrificing performance.
This document discusses best practices for testing code. It recommends writing unit, integration, functional, generated, and performance tests. Unit tests should be isolated, reproducible, fast, simple, and automated. Integration tests check interactions between components. Functional tests simulate user behaviors. Generated tests use random inputs to try breaking code. Performance tests measure timing and load capacity. The document provides examples of tools and techniques for writing different types of tests in Python.
Become Rick and famous, thanks to Open SourceGeeks Anonymes
This document discusses how to become rich and famous through open source software by attracting users and developers, and outlines various business models for monetizing open source projects including services, dual licensing, and creating added value products. It notes that choosing open source allows for social impact, helps customers avoid lock-in, and helps attract talent from the open source community.
This document provides an introduction to natural language processing (NLP) and discusses various NLP techniques. It begins by introducing the author and their background in NLP. It then defines NLP and common text data used. The document outlines a typical NLP pipeline that involves pre-processing text, feature engineering, and both low-level and high-level NLP tasks. Part-of-speech tagging and sentiment analysis are discussed as examples. Deep learning techniques for NLP are also introduced, including word embeddings and recurrent neural networks.
1. The document discusses modern features of SQL such as window functions, common table expressions, grouping sets, rollup and cube.
2. It provides examples and explanations of these features and how they can be used to analyze and query data in flexible ways.
3. Compatibility of these features across major database systems such as PostgreSQL, SQL Server, and Oracle is also discussed.
3. Tout est processus...
▶
La majorité des systèmes IT implémentent des processus
métier
▶
L’implémentation implique le stockage d’un état (les
données)
▶
L’état évolue par réaction à des stimuli (des commandes
soumises par les utilisateurs)
4. Une exécution efficace est importante
▶
L’exécution d’un grand nombre de transactions par unité
de temps est parfois nécessaire
▶
Ces transactions peuvent devoir être exécutées en
parallèle
▶
« Time is money »
5. La maintenabilité est essentielle
▶
Les conditions évoluent
▶
Besoins (métier)
▶
Attentes (utilisateurs)
▶
Équipes (composition)
6. Le Domain-Driven Design apporte des outils
▶
Domain-Driven Design = DDD
▶
Un langage commun entre développeurs et experts du domaine
▶
Le code est un modèle de la réalité du terrain
▶
Des règles de conception favorisant
▶
maintenabilité
▶
efficacité
▶
robustesse
8. DDD est une méthodologie de modélisation
▶
Développeurs et experts coconstruisent un modèle abstrait
▶
DDD fournit des composants de base
▶
Ils utilisent un langage commun
▶
Le Ubiquitous Language
▶
Le modèle est descriptible à l’aide de code
9. Les composants ont différentes caractéristiques
▶
État
▶
Représentation des données
▶
Les données sont immuables ou non
▶
Maintient des contraintes liées aux données
▶
Comportement
▶
Opérations pouvant impliquer l’état
▶
Structure
▶
Regroupement d’autre composants
▶
Stratégie
▶
Possibilité de raisonner sur des systèmes « morcelés » et à grande échelle
10. Les composants avec un état
▶
Value Object (VO)
▶
Données immuable
▶
Le comportement n’altère pas l’état
▶
Entity
▶
Données non-immuables
▶
Le comportement peut altérer l’état
▶
Domain event (ou event)
▶
Permet le transport de données
▶
Pas de comportement
11. Aggregate et composants liés
▶
Aggregate
▶
Graphe d’Entities et VOs liés par un ensemble de contraintes fortes
▶
Accès uniquement via l’Aggregate Root (= Entity garantissant le respect des contraintes)
▶
Factory
▶
Produit des Aggregates
▶
Les contraintes sont respectées initialement
▶
Repository
▶
Stocke et récupère des Aggregates
▶
Les contraintes sont respectées au moment du stockage et lors de la récupération
13. Autres composants
▶
Service
▶
Pas d’état
▶
Comportement qui ne peut être mis ailleurs
▶
Bounded Context
▶
Stratégie
▶
Partition d’un système
▶
Peut contenir un ou plusieurs Modules, voir des fragments
▶
Context Map
▶
Graphe liant les Bounded Contexts
▶
Lien = dépendance (librairies), transport de données (event ou autre)
14. Quelques règles de conception...
▶
Un seul Aggregate mis à jour par transaction
▶
Les règles de consistance portant sur plusieurs
Aggregates sont implémentées à l’aide Events
▶
Les Aggregates doivent être les plus petits possibles
▶
Le code documente le modèle implémenté
▶
Conventions de nommage
▶
Utilisation du Ubiquitous Language
15. Appliquer DDD n’est pas toujours simple
▶
Bonne connaissance théorique requise
▶
Trop abstrait pour les experts métier
▶
Pas assez concret pour les développeurs
▶
Implique la résolution de difficultés techniques
▶
Séparation claire entre modèle et détails techniques
▶
Dans un contexte distribué, transport et traitement des
événements
17. Pousse-Café (PC) est un framework...
▶
Java (11+)
▶
Libre et open-source (Apache 2.0)
▶
Léger
▶
Modulaire
▶
Facilitant...
▶
l’implémentation efficace de processus complexes
▶
l’abstraction du stockage et du transport des données
▶
une bonne communication entre développeurs et experts métier
18. PC interprète le DDD dans l’« univers » Java
▶
Classes
▶
VOs
▶
Entities
▶
Factories
▶
Repositories
▶
Services
▶
Aggregates
▶
Interfaces
▶
Events
▶
Modules
19. PC introduit quelques éléments supplémentaires
▶
Les Commands
▶
Requêtes soumises par les utilisateurs
▶
Définies par une classe ou une interface
▶
Les Processes
▶
Interfaces nommant et décrivant des processus métiers
▶
Les Listeners
▶
Méthodes traitant Event ou Command
▶
Liés à un ou plusieurs Processes
20. PC fournit un Runtime
▶
Charge un ensemble défini de composants au démarrage
▶
Reçoit des Commands
▶
Consomme les Events à partir d’un bus de communication
▶
Pour chaque Command/Event traité
▶
détermine le(s) Aggregates à créer/mettre à jour/supprimer
▶
exécute les Listeners des Aggregate Roots, Factories et Repositories
▶
sauvegarde les changements et publie les Events potentiellement émis
22. Il y a quelques étapes...
▶
Définir le Process
▶
Définir les Aggregates
▶
Aggregate Roots
▶
Factories
▶
Repositories
▶
Définir les Commands et Events
▶
Créer les Listeners et les lier au Process
24. Définition du Process ProductManagement
public interface ProductManagement extends Process {
}
25. Définition de l’Aggregate Product
@Aggregate
public class Product {
public static class Factory extends AggregateFactory<ProductId, Root, Root.Attributes> {
}
public static class Root extends AggregateRoot<ProductId, Root.Attributes> {
public static interface Attributes extends EntityAttributes<ProductId> {
Attribute<Integer> totalUnits();
Attribute<Integer> availableUnits();
}
}
public static class Repository extends AggregateRepository<ProductId, Root, Root.Attributes> {
@Override
public ProductDataAccess<Root.Attributes> dataAccess() {
return (ProductDataAccess<Attributes>) super.dataAccess();
}
}
}
public interface ProductDataAccess<N extends Product.Root.Attributes>
extends EntityDataAccess<ProductId, N> {
}
public class ProductId extends StringId {
public ProductId(String id) {
super(id);
}
}
Aggregate et composants liés
Définition des requêtes utilisées par le dépôt Identifiant de l’entité racine
26. Définition des Commands
public interface CreateProduct extends Command {
Attribute<ProductId> productId();
}
public interface AddUnits extends Command {
Attribute<ProductId> productId();
Attribute<Integer> units();
}
27. Ajout d’un Listener pour la création d’un produit
public class Factory extends AggregateFactory<ProductId, Root, Root.Attributes> {
@MessageListener(processes = ProductManagement.class)
public Root buildProductWithNoStock(CreateProduct command) {
Root product = newAggregateWithId(command.productId().value());
product.attributes().totalUnits().value(0);
product.attributes().availableUnits().value(0);
return product;
}
}
28. Ajout d’un Listener pour l’ajout d’unités
public static class Root extends AggregateRoot<ProductId, Root.Attributes> {
@MessageListener(runner = AddUnitsRunner.class, processes = ProductManagement.class)
public void addUnits(AddUnits command) {
int units = command.units().value();
if(units <= 0) {
throw new DomainException("Cannot add negative number of units");
}
attributes().availableUnits().value(attributes().availableUnits().value() + units);
attributes().totalUnits().value(attributes().totalUnits().value() + units);
}
...
}
public class AddUnitsRunner
extends UpdateOneRunner<AddUnits, ProductId, Product.Root> {
@Override
protected ProductId aggregateId(AddUnits message) {
return message.productId().value();
}
}
Service permettant la localisation de l’Aggregate
Listener dans l’Aggregate Root
29. Simple mais un peu fastidieux...
▶
Chaque classe/interface est simple à implémenter
▶
… mais il y en a « beaucoup »
▶
… et on en a vite oublié une.
▶
Le principe de séparation des préoccupations est à ce prix
▶
… tout comme la séparation entre définition et
implémentation
30. PC fournit des outils adressant ce problème
▶
EMIL (Extended Messaging Intermediate Language), un
DSL permettant la description concise d’un processus
implémenté par PC
▶
Des outils de génération de code prenant une description
EMIL en entrée
31. La représentation EMIL de ProductManagement
process ProductManagement
CreateProduct? -> F{Product.Factory}[buildProductWithNoStock]
AddUnits? -> Ru{AddUnitsRunner}
@Product.Root[addUnits]
▶
Les outils de génération de code vont créer toutes les
classes et méthodes
▶
Il ne restera plus qu’à remplir le corps des méthodes
33. PC utilise un mécanisme d’extensions
▶
Extension = un ensemble de classes implémentant certaines interfaces
▶
Deux types d’extensions
▶
Stockage
▶
Transport (des Events)
▶
Les classes fournies par les extensions aident les développeurs à
implémenter
▶
Les données concrètes (Entities et Events)
▶
Les requêtes vers une base de donnée (Storage)
▶
La publication des données liés aux Events (Messaging)
35. Plusieurs extensions de stockage disponibles
▶
Mémoire (en vue de tester la logique métier)
▶
Spring Data MongoDB
▶
Spring Data JPA
36. Implémentation des Commands
@MessageImplementation(message = CreateProduct.class)
@SuppressWarnings("serial")
public class CreateProductData implements
Serializable, CreateProduct {
@Override
public Attribute<ProductId> productId() {
return stringId(ProductId.class)
.read(() -> productId)
.write(value -> productId = value)
.build();
}
private String productId;
}
@MessageImplementation(message = AddUnits.class)
@SuppressWarnings("serial")
public class AddUnitsData implements Serializable,
AddUnits {
...
@Override
public Attribute<Integer> units() {
return single(Integer.class)
.read(() -> units)
.write(value -> units = value)
.build();
}
private int units;
}
37. Plusieurs extensions de transport disponibles
▶
Mémoire (en vue de tester la logique métier)
▶
Pulsar (messages JSON)
▶
Kafka (messages JSON)
38. Les extensions génèrent aussi du code
▶
L’outil de génération de code peut utiliser la logique fournie
par les extensions
▶
Les classes d’implémentation du stockage et du transport
seront générées
40. Cela dépend du type d’application
▶
JavaSE
▶
Application web propulsée par Spring Boot
▶
...
41. Dans tous les cas, il faut définir un Module
▶
Un Module est représenté par une interface
▶
Tout composant définit dans un subpackage y est inclus
▶
Chaque composant du module doit avoir un nom unique
package poussecafe.shop;
import poussecafe.domain.Module;
/**
* Models an online shop where Customers may buy Products by placing Orders. Customers receive Messages giving them
* an update about the handling of their Orders.
*/
public interface Shop extends Module {
}
42. Ensuite, sélectionner les Modules à charger
public class ShopBundle {
public static BundleConfigurer configure() {
return new BundleConfigurer.Builder()
.module(Shop.class)
.build();
}
private ShopBundle() {
}
}
Ajout du module Shop dans un Bundle
43. Enfin, instancier le Runtime
▶
Ci-dessous, un exemple Spring Boot
▶
Définition et implémentation sont « connectés »
@Configuration
@Import(RuntimeConfiguration.class)
public class ApplicationConfiguration {
@Bean
protected Bundles bundles(
Messaging messaging,
SpringJpaStorage storage) {
MessagingAndStorage messagingAndStorage = new MessagingAndStorage(messaging, storage);
return new Bundles.Builder()
.withBundle(ShopBundle.configure()
.defineThenImplement()
.messagingAndStorage(messagingAndStorage)
.build())
.build();
}
}
44. PC fournit un bridge avec Spring
▶
Ce bridge permet l’injection de composants PC dans des
Bean
@PostMapping(path = "/product")
public void createProduct(@RequestBody CreateProductView input) {
ProductId productId = new ProductId(input.id);
CreateProduct command = runtime.newCommand(CreateProduct.class);
command.productId().value(productId);
runtime.submitCommand(command);
}
@Autowired
private Runtime runtime;
Injection et interaction avec le Runtime PC
46. Le Ubiquitous Language apparaît dans le code
▶
PC favorise la définition d’éléments dont le nom est
naturellement issu du Ubiquitous Language
▶
… mais les experts lisent rarement du code
▶
… et un DSL comme EMIL reste rébarbatif
47. PC fournit un outil de génération de doc
▶
Le code est l’unique référence
▶
HTML ou PDF sont générés automatiquement
▶
La documentation inclut du texte et des schémas
Schéma de processusExtrait de texte
48. Je veux me lancer ! Quels sont
les outils à ma disposition ?
49. Un plug-in et un archetype Maven
▶
Génération de projet (via l’archétype)
▶
mvn archetype:generate ...
▶
Validation de code
▶
mvn pousse-cafe:validate
▶
Génération de documentation
▶
mvn pousse-cafe:generate-doc
▶
Génération de code
▶
mvn pousse-cafe:update-process -DprocessName=...
51. Du contenu en ligne
▶
Un site web (avec un guide de référence)
https://www.pousse-cafe-framework.org/
▶
Le code source et des exemples
https://github.com/pousse-cafe
▶
Un tag sur StackOverflow
https://stackoverflow.com/questions/tagged/pousse-cafe
▶
Un compte Twitter
@PousseCafeFW