Injection de logger avec CDI
• Alexis Hassler
Cette semaine, le projet Lombok a annoncé sa version 0.10 dans laquelle une nouvelle annotation @Log est annoncée. N’étant pas fan de ce projet, à cause de son coté trop magique, j’ai regardé ce qu’il fallait mettre en place pour faire quelque chose de similaire avec CDI. Plus précisément, j’ai voulu mettre en place le mécanisme d’injection pour obtenir un logger avec le moins de code possible.
L’idée n’est pas récente, puisque Seam 1 / 2 proposait déjà un mécanisme de ce type :
@Logger
private Log log;
L’intérêt de CDI est de pouvoir choisir facilement l’utilitaire de Log et de ne dépendre d’aucune API non standard.
Je démarre donc avec une classe à qui j’injecte un Logger de SLF4J.
public class LoggerInjected {
@Inject
Logger logger;
public void doSomething() {
logger.info("I'm doing something");
}
}
Ensuite, il faut produire le bean logger. En utilisant la portée par défaut (@Dependent), j’aura une instance différente pour chaque point d’injection . En utilisant en plus un objet InjectionPoint, je peux avoir des informations sur l’endroit où mon logger est injecté et le créer de façon contextuelle.
public class LoggerProducer {
@Produces
public Logger getLogger(InjectionPoint injectionPoint) {
return LoggerFactory.getLogger(
injectionPoint.getBean().getBeanClass());
}
}
Dans ces conditions, je trouve que l’annotation de lombok perd de sa valeur ajoutée. Vous aurez noté que je n’ai ajouté aucune extension à CDI pour faire cette injection et qu’on conserve toute liberté pour le framework de logging.
Adam Bien a fait un version un peu plus évoluée de ce pattern d’injection dans son (très bon) livre Real World Java EE Night Hacks.
Le code source de l’exemple est publié sur GitHub.
Alexis Hassler
J'ai créé la société Sewatech en 2005, pour y exercer mon métier de développeur full stack, à dominante back end.
Vous pouvez me contacter si vous cherchez un développeur indépendant expérimenté (plus de 25 ans d'expérience) pour intégrer votre équipe de projet. Je peux aussi intervenir pour un audit ou une mission de conseil.
Enfin, je donne des formations sur Spring, Vert.x, WildFly,... en intra sur site ou à distance.
Archives
-
- Authentification Digest et chiffrement des mots de passe, avec Tomcat Realm
- Adieu boot2docker, bonjour docker-machine
- Authentification Digest et chiffrement des mots de passe, avec Spring Security
- Découverte de CompletableFuture
- Comment ouvrir les ports JMX remote à chaud
- sewatech.fr sur mobile
- Intégration continue avec Travis CI et Docker Hub
- Putain, 10 ans !
- Charlie Hebdo
- Bilan 2014 du blog
-
- Comment installer OpenVPN sur Google Cloud
- Comment chiffrer les mots de passe de Tomcat
- Démarrer RESTEasy en mode standalone
- Réduire la taille des images Docker
- Construire une image Docker pour WildFly
- Construire une image Docker pour Apache / mod_cluster
- Compiler mod_cluster pour Apache 2.4 : pourquoi et comment ?
- Mon interview sur ma formation WildFly, par Arun Gupta
- Installer un cluster WildFly avec Docker
- WildFly 8, administration guide : le livre
- Devoxx France 2014 : BOFs et à-cotés
- Devoxx France 2014 : Conférences
- Devoxx France 2014 : Keynotes
- Devoxx France 2014 : Universités et Ateliers
- Pub WinDev : mon mail de réponse
- Les nouveautés de WildFly 8
-
- Attention aux parenthèses dans Logback
- Accéder à la console de JBoss AS 7 via Apache Web Server
- JBoss EAP 6 et les bonnes nouvelles
- Construire soi-même JBoss AS 7 (ou WildFly)
- Développeurs JSF, fuyez @ManagedBean
- Tester des beans en scope Conversation avec Arquillian
- Accéder aux composants remote de JBossAS 7
- Présentation Arquillian
-
- Déployer une application JavaEE via l'API Cloudbees
- Les sorties de l'été 2011
- Sorties de l'été 2011, JBoss AS 7
- Versions mineures de JBoss AS
- Sorties de l'été 2011, Java SE 7
- Injection de logger avec Spring
- Injection de logger avec CDI
- Découverte de Cloudbees
- Mots de passe chiffrés pour les datasources de JBoss
- JUnit Runner pour CDI / Weld
- JUnit Rule pour CDI / Weld
- Carte des JUGs en France
-
- DAO ou pas DAO ?
- Devoxx Schedule dans Google Calendar
- Environnement de développement Java EE 6
- Tutoriel JSF, Spring et Hibernate
- Enrichir les logs avec LogWEx
- VirtualBox 64bits sous MacOS X
- Premiers pas avec Git et GitHub
- Déploiement de Silverpeas sur JOnAS
- SLF4J et JCL sous Jonas 5
- Tests unitaires pour Google App Engine
- JRebel avec OpenJDK et Grizzly
- Silverpeas sur JBoss 5
- Script de création de machine virutelle VirtualBox
- Installation de Silverpeas
- Persistance dans Google App Engine : JDO, JPA ou ... ?
- Environnement de développement pour GAE
- Mon projet GAE
- Démarrage du blog