O CDI pode injetar POJOs da biblioteca padrão em um EJB?
Posso injetar meu próprio POJO em um objeto gerenciado como este:
import javax.ejb.Stateless;
import javax.inject.Inject;
@Stateless
public class SomeEjb {
@Inject
private SomePojo somePojo;
}
E eu tenho esse POJO:
// No annotations
public class SomePojo {
}
Isso funciona bem. Se eu injetar o EJB em um backing bean JSF, posso ver que o valor desomePojo
é um valor não nulo, conforme o esperado.
No entanto, se eu tentar injetar umjava.util.Date
para dentroSomeEjb
, Recebo a seguinte exceção na implantação:
Severe: Exception while loading the app : WELD-001408 Unsatisfied dependencies for type [Date] with qualifiers [@Default] at injection point [[field] @Inject private SomeEjb.date]
org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [Date] with qualifiers [@Default] at injection point [[field] @Inject private SomeEjb.date]
at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:311)
SomeEjb agora:
// No annotations
public class SomeEjb {
@Inject
private Date date;
}
Date tem um construtor público, sem argumentos, e pensei que seria tudo o que o CDI precisaria para "satisfazer a dependência". Tenho certeza de que esse comportamento é "especificado", mas claramente há um grande buraco no meu entendimento do CDI.
Alguém pode explicar por que isso não funciona? Qual é a diferença entreSomePojo
ejava.util.Date
do ponto de vista do CDI?
Contexto:
Java EE 6GlassFish 3.1.2.2Eu não tenho um caso de uso para isso. Eu sei que posso apenas especificarnew Date()
.