Concevoir des piles logicielles entreprises et des applications java professionnelles en utilisant la puissance de l'inversion de contrôle avec nuun.io.
1. Epo Jemba @ejemba Lundi 11 juillet 1 / 44
L‘IOC avec Nuun.io
« Develop using your own rules »
2. Epo Jemba @ejemba Lundi 11 juillet 2 / 44
Votre guide
● Architecte Logiciel Senior Ronin (i.e.
indépendant)
● 17 ans de vadrouille dans le monde de
l‘ingénierie logicielle
● Polyglote ou «language agnostic» (Java,
Go, Scheme, Ada, Bash, Clojure, Scala,..)
● Étudie sur les architecture scalable
(Openshift, Kubernetes, Docker, ...)
● Aime le libre, l‘art de coder et concevoir
des applications belles et durables
3. Epo Jemba @ejemba Lundi 11 juillet 3 / 44
Agenda
● Définition : L‘inversion de contrôle
● Presentation de nuun
● Demo : L’inversion de contrôle avec nuun kernel
4. Epo Jemba @ejemba Lundi 11 juillet 4 / 44
Métaphore de la rivière
Conte écologique
5. Epo Jemba @ejemba Lundi 11 juillet 5 / 44
Tous les jours, je pars travailler
6. Epo Jemba @ejemba Lundi 11 juillet 6 / 44
je marche, je suis en contrôle.
7. Epo Jemba @ejemba Lundi 11 juillet 7 / 44
Un jour, je change de travail
8. Epo Jemba @ejemba Lundi 11 juillet 8 / 44
Une rivière sur le chemin !
10. Epo Jemba @ejemba Lundi 11 juillet 10 / 44
Nager : Pour et Contre
● Pour
– On ne dépend de rien ni de personne #yolo
– On est en contrôle complet,
– Sensation totale de l’expérience
● Contre
– On met plus de temps
– On doit se sécher
– C’est un peu dangereux
12. Epo Jemba @ejemba Lundi 11 juillet 12 / 44
Bateau : Pour et Contre
● Pour
– On ne se mouille pas, pas besoin de se sécher
– On arrive plus vite
– c’est moins dangereux
– Moins de contexte switching
● Contre
– On maitrîse un moins,
– Moins de sensations,
– Et surtout, →
13. Epo Jemba @ejemba Lundi 11 juillet 13 / 44
Il faut acquerir un bateau ...
14. Epo Jemba @ejemba Lundi 11 juillet 14 / 44
La métaphore s’arrête ici.
Le monde numérique s’affranchissant de
certaines barrières,
le temps/homme et l’expertise sont
partageables plus facilement aussi grâce aux
logiciels libres et à l’opensource.
15. Epo Jemba @ejemba Lundi 11 juillet 15 / 44
L’inversion de contrôle
est donc un principe général que l’on retrouve
IRL comme dans la programmation
16. Epo Jemba @ejemba Lundi 11 juillet 16 / 44
1
On utilise l’inversion de contrôle quand on a un
besoin réel voire un point réellement bloquant
ce n’est pas juste de la factorisation de code
Car elle a un coût
17. Epo Jemba @ejemba Lundi 11 juillet 17 / 44
2
L’Inversion de contrôle délègue la résolution
d’une problématique précise à une solution
tierce
18. Epo Jemba @ejemba Lundi 11 juillet 18 / 44
3
En pratique la solution tierce vient souvent de
vendeurs de solutions
19. Epo Jemba @ejemba Lundi 11 juillet 19 / 44
4
Les vendeurs de solutions proposent souvent
leurs conventions bonnes ou mauvaises où ..
20. Epo Jemba @ejemba Lundi 11 juillet 20 / 44
On a un menu
→ xml
→ annotation style 1
Mais on aimerait aller voir en cuisine pour
apprendre à se faire ses propres recettes
21. Epo Jemba @ejemba Lundi 11 juillet 21 / 44
Déclinaison de l’inversion de contrôle
● S.O.L.I.D. : le D est D.I. « Dependency Inversion ». L’ « Inversion de
dépendance » est un principe basé sur la notion d’interface
permettant de mettre en œuvre l’IOC dans son code
● D.I. « Dependency Injection » .L’«injection de dépendance » un
pattern délégant l’instanciation et l’affectation des dépendances
● A.O.P. : La programmation orientée aspect permet également la
mise en œuvre de l’IOC.
● Ces 3 concepts servent au final à définir les propriétés statiques
et dynamiques de l«Object Graph» de l’application.
22. Epo Jemba @ejemba Lundi 11 juillet 22 / 44
Problématiques d’industrialisation
● Définition de l’Object Graph (DI, AOP,…)
● Configuration (JNDI, etcd, )
● Gestion de la modularité
● Gestion de l’extensibilité
● Prise en compte de la configuration de nouveaux
framework complexe etc
● Le tout sans xml et avec son propre style
23. Epo Jemba @ejemba Lundi 11 juillet 23 / 44
Convention vs Configuration 1/2
● Les conventions sont l’outil le plus commun pour
palier à la perte de contrôle,
● Suivre des conventions empêchent de se perdre
quand le flow du code source est caché
● Utiliser ses propres conventions dans une
organisation, est facteur clés de réussite
24. Epo Jemba @ejemba Lundi 11 juillet 24 / 44
Convention vs Configuration 2/2
● Trop de configuration apporte de la friction
● L’utilisation de valeurs par défaut saines et
cohérente est un bon principe
● Nous cherchons tous l’auto-configuration
25. Epo Jemba @ejemba Lundi 11 juillet 25 / 44
nuun.io
est une micro lib permettant la mise en oeuvre
l’inversion de contrôle
26. Epo Jemba @ejemba Lundi 11 juillet 26 / 44
● Nuun est un µframework permettant de concevoir des piles
logicielles et des applications non triviales en se basant sur
l’inversion de contrôle en Java/Scala/Kotlin/etc
● Nuun s’appuie sur des composant standards et éprouvés
– la JSR 330 pour gérer la DI (via guice)
– ServiceLoader
– Reflections
– Plus une architecture Kernel/Plugin unique
● Il est compatible avec les majeurs DI containers du marché.
29. Epo Jemba @ejemba Lundi 11 juillet 29 / 44
Fonctionnement général
● Le kernel doit fournir le graphe de l’application
● Pour cela il s’appuie sur les plugins en aggregeant
leur fragments de configuration en une
configuration globale
● La configuration est donc toujours fonction de
l’environnement de l’application (classpath,
ressources, etc ...)
30. Epo Jemba @ejemba Lundi 11 juillet 30 / 44
Détail du protocole Kernel / Plugin
33. Epo Jemba @ejemba Lundi 11 juillet 33 / 44
Les plugins envoient des requètes au kernel
34. Epo Jemba @ejemba Lundi 11 juillet 34 / 44
Le kernel scanne le classpath en
fonction des requètes des plugins
35. Epo Jemba @ejemba Lundi 11 juillet 35 / 44
Le kernel retourne le résultat de chaque
requète à chaque plugin
36. Epo Jemba @ejemba Lundi 11 juillet 36 / 44
À partir des résultats du kernel chaque plugin
construit sa configuration dynamique
37. Epo Jemba @ejemba Lundi 11 juillet 37 / 44
Chaque plugin retourne son fragment de
configuration
38. Epo Jemba @ejemba Lundi 11 juillet 38 / 44
Le kernel détermine la configuration
globale et peut ainsi construire l’injecteur.
39. Epo Jemba @ejemba Lundi 11 juillet 39 / 44
L’injecteur comprend le modèle du
graphe de l’application
40. Epo Jemba @ejemba Lundi 11 juillet 40 / 44
Done !
● Ce processus se passe au début de l’application une
seule fois et dure moins de 200 ms
● Il permet d’avoir un niveau de flexibilité quasi
illimité et nous allons le voir une définition
d’injection de dépendance, d’AOP complètement
dynamique
● Ce qui permet de définir nos propres conventions
41. Epo Jemba @ejemba Lundi 11 juillet 41 / 44
API Complète
API
● Kernel Lifecycle
● Kernel params
● Plugin Lifecycle
● Request API
● Plugin Dependencies
● Integration Tests
SPI
● DI Provider
● Concerns
● Multi-Round initialisat°
● Kernel Extension
● Kernel params aliases
43. Epo Jemba @ejemba Lundi 11 juillet 43 / 44
From zero to productive with nuun
● Street Fighter – Static DI
● Street Fighter – IOC ++
– Custom launcher
● Crash with 2 launcher
– Detect Pattern in our code then automate their
configuration – The sound (SF2PluginTest)
– «Here comes a new challenger»
● Monoidish Runner for the launcher