Articles

Affichage des articles du avril, 2014

@Any ou comment utiliser CDI pour récupérer les implémentations d'une interface

Problème Itérer sur des implémentation d'interface afin d'appeler une méthode commune a toutes les implémentations car partagé par l'interface. (Implémentations différentes pour chaque classe) Imaginons l'interface AnimalIfc ayant une méthode getType() : public interface AnimalIfc { String getType(); } Et des implémentations : @ChienQualifier public class Chien extends AnimalIfc{ public Chien(){ super(); } @Qualifier @Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @Target({ java.lang.annotation.ElementType.TYPE, java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.PARAMETER, java.lang.annotation.ElementType.FIELD }) public @interface ChienQualifier { } @Override public String getType() { return this.getClass().getSimpleName(); } } @ChatQualifier public class Chat extends AnimalIfc{ public Chat(){ super(); } @Qualifier @Retention(java.lang.annotation.RetentionPolicy....

Utilisation d'attribut injecté avec CDI dans le constructeur d'un objet injecté lui même avec CDI avec @PostConstruct

Problème Lors d'un test d'intégration je me suis retrouvé avec un nullpointer lors de l'exécution de celui-ci. Le nullpointer venait du fait que CDI n'avais pas achevé son injection dans l'attribut que j'utilisais et qui était donc null lors de son utilisation. Imaginons une classe 'Developpeur' et dans cette classe un attribut qui serait une classe 'LieuDeTravail'. La classe LieuDeTravail: public class LieuDeTravail { private String ville; public Travail(){ super(); } public String getVille(){ return ville; } public String setVille(String ville){ this.ville = ville; } } La classe Developpeur: public class Developpeur { @Inject private transient LieuDeTravail lieu; private String ville; public Developpeur(){ super(); ville = lieu.getVille(); } ... ...