Bonjour,
Je developpe un projet (Etudiants, cours dispensés) avec JSF et serveur Wildfly
Préliminaire: une classe singleton pour retourner un object connection à une base de données.
Par exemple, pour la gestion des entités ‘Course’, on a besoin d’une classe ‘CourseDAO’ pour extraire ou MAJ les informations d’un représentant (un cours). Cette classe est elle-même une dépendence du bean ‘AbonneControllerBean.java’ qui fait appel à la methode de celui-ci: coursedao.findAll() pour retrouver la liste de tous les cours.
Ce que j’ai compris sur CDI en lisant un extrait de la doc https://jakarta.ee/learn/docs/jakart...cdi-basic.html
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 @Named @SessionScoped public class AbonneControllerBean { public String groupName; public int groupid; public Abonne session_abonne; public List<Student> students; // present here whereas the Abonne POJO class shall only contain a list of lastNames @Inject public StudentDAO studentDAO; //private List<String> courseNames; private List<Course> courses; @Inject public CourseDAO courseDAO; @PostConstruct public void init() { this.groupName = "science"; this.groupid = 1; IDatabase connectMySQLService = DatabaseMySQLConnect.getInstance(); // this.studentDAO = new StudentDAO(connectMySQLService); this.studentDAO.setConnectService(connectMySQLService); this.students = this.studentDAO.findAll(); this.courseDAO.setConnectService(connectMySQLService); this.courses = this.courseDAO.findAll(); } }
CDI 3.0 est inclus dans la plateforme jakarta ee dans la continuité des services (ex EJB) de cette plateforme. Plus précisement elle est utilisée pour deux applications:
- Dependency Injection
- Managed Bean des bean stateful géré par la plateforme (ex anciens backing bean de l’annotation @ManagedBean de JSF migré vers CDI bean de l’annotation @Named)
cité:
«In addition, CDI provides the following services:
- Integration with the Expression Language (EL), which allow any component to be used directly within a Jakarta Faces or a Jakarta Server Pages page.
[…]- stop»
La question que je me pose maintenant, c’est que dans ma classe CourseDAO, je définis une dépendence à un objet singleton, connectService et avec Springframework cette fois. Cet objet va faire l’appel à l’ouverture d’une Connexion à la base paramétrée (MySQL ou une autre, il suffit alors de changer cet objet). Est ce que cette façon de faire est une hierarchie et non passible de conflit CDI vs Springframework (Je n’ai pas encore attaqué les tests pour l’instant)?
De l’autre côté, j’ai déjà fait des autres codes avec Spring pour créer des beans = classes de connexion dépendant d’un fichier properties.xml puis les injecter dans le DAO, ça marchait très bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 @Configuration public class CourseDAO implements IEntityDAO<Course> { private IDatabase connectService; // dependency injection private Connection connect; @Autowired public void setConnectService(IDatabase connectService) { this.connectService = connectService; } public CourseDAO() { try { this.connect = connectService.getConnection(); } catch (Exception e) { System.out.println("AbonneDAO error getConnection"); } } //... }
Je peux donner un peu plus de resultats sous 24h mais y a t-il déjà quelque chose qui frappe*?
Partager