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