Bonjour
je désespère de réussir à faire fonctionner CDI dans jersey.
J'ai un simple war que je déploie dans tomcat. donc pas de serveur jee pas d'ejb etc.
les annotations jersey pour rest fonctionnent sans aucune difficulté.
c'est du les injections de dépendance que j'ai un problème.
je crois que j'ai mis tous jesey et tout hk2 dans maven sans parvenir à faire fonctionner les injection autrement qu'à la main.
en clair si je ne fait pas un bind manuel dans mon application je n'ai aucune injection.
l'utilité des injection deviens vite inutile si on doit écrire 5 fois plus de code que lorsqu'on utilise pas CDI.
J'ai parcouru et testé au moins 50 tutoriels sans jamais obtenir ne serait-ce qu'un début de solution.
il manque un bout. mais quoi ?
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 @ApplicationPath("/api") public class AppConfig extends ResourceConfig { public AppConfig() { packages("fr.ici.webapp.sample"); register(new Binder()); } class Binder extends AbstractBinder { @Override protected void configure(){ bindFactory(EntityDAO.class).to(EntityManager.class).in(Singleton.class); //bindAsContract(Sample.class); //<= je cherche à mettre en oeuvre le binding automatique } } } @Contract public interface ISample { } @Service @Singleton public class Sample implements ISample { public Sample() { System.out.println("new Sample"); } } @Path("book") public class BookApi { @Inject public EntityManager bookStore; @Inject private ISample sample; @GET @Produces(MediaType.APPLICATION_JSON) public Response getAll() { ... }
nombre de tutoriel se basent sur des API qui ne sont pas présente dans jersey 2.27
comment faire en sorte que les @contract @services @named soient reconnus et injectés directement ?
je rappelle que je n'ai pas de serveur JEE que c'est donc le JSR330 (CDI for JSE) et pas le JSR299 (CDI for JEE).
Merci
A+JYT
Partager