2014-07-14 20 views
5

Hy tamJava EE Stosując metodę producentów w Plony „WELD-001408 Odmowne zależności ..” wyjątek

jestem całkowicie świeżym Java EE i CDI. Próbuję skonfigurować test-projekt, aby wykonać pierwsze kroki z JAX-RS i CDI. Mam włączoną funkcję CDI, udostępniając plik bean.xml. Dopóki testuję, używam elementu bean-discovery-mode = "all". Wydaje mi się, że CDI działa dobrze, ponieważ mogę z powodzeniem wstrzyknąć mi BeanManagera do mojego zasobu testowego i mogę wydrukować wszystkie odkryte ziarna.

Próbuję wstrzyknąć klasę dostarczoną przez metodę producenta. NetBeans pokazuje mi ostrzeżenie dla pola provideMe: Nie włączona kwalifikują się do fasoli iniekcyjnych znajdują

Kiedy wdrożyć aplikację do GlassFish, otrzymuję spoiny wyjątek:

WELD-001408 Unsatisfied dependencies for type [ProvideMeInterface] with qualifiers [@Default] at injection point [[BackedAnnotatedField] @Inject private com.test.rest.DataImport.provideMe] 

Oto moje zajęcia dla tego małego testu:

Interfejs:

package com.test.orm; 
public interface ProvideMeInterface 
{ 
    int getCount(); 
} 

implementuje entation:

package com.test.orm; 
public class ProvideMeImpl implements ProvideMeInterface { 

    int cnt; 
    ProvideMeImpl(int cnt) 
    { 
     this.cnt = cnt; 
    } 

    @Override 
    public int getCount() { 
     return cnt; 
    } 
} 

Producent:

package com.test.orm; 

import javax.enterprise.context.ApplicationScoped; 
import javax.ws.rs.Produces; 

public class ProvideMeProvider { 

    @Produces 
    @ApplicationScoped 
    public ProvideMeInterface produceFactory() { 
     return new ProvideMeImpl(111); 
    } 
} 

zasobów:

package com.test.rest; 

import ... 
... 

@Path("rest/import") 
public class DataImport { 
    private final Logger logger = LoggerFactory.getLogger(getClass()); 

    @Inject 
    private ProvideMeInterface provideMe; 

    @Inject 
    BeanManager beanManager; 

    public DataImport() {} 

    @GET 
    @Produces("text/html") 
    public String getHtml() { 
     return "<html><body><h1>IMPORT Resource: " + provideMe.getCount() + " </body></h1></html>"; 
    } 
} 

Kiedy uruchomić aplikację bez testu "ProvideMe" i wydrukować wydrukować wszystkie wykryte fasolę The ProvideMeProvider klasa jest odkryta, podobnie jak "ProvideMe":

... 
INFO: 2014-07-14 14:09:31,040 [DEBUG] com.test.rest.DataImport - Bean: com.test.orm.ProvideMeProvider 
INFO: 2014-07-14 14:09:31,041 [DEBUG] com.test.rest.DataImport - Bean: com.test.orm.ProvideMe 
... 

Pytania:

1) Dlaczego uzyskać „Zam zależności ..” błąd podczas próby wstrzyknąć tylko implementację interfejsu?

2) Czy odkryto tu wszystkie niezbędne klasy?

3) Jeśli nie, co muszę zrobić, aby zostały wykryte?

4) Co to jest klasa "ProvideMe", którą odkrywa? (Mam ProvideMeImpl, ProvideMeInterface i ProvideMeProvider, ale bez klasy ProvideMe)

Używam: GlassFish 4.0 (build 89) (Java EE 7 Web)/NetBeans 8.0/Maven 3.2.1/JDK 1.7

Odpowiedz