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.

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() {      
...
}
il manque un bout. mais quoi ?
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