Eu sou muito novato em CDI. Este é o meu PRIMEIRO exemplo e estou tentando executá-lo. Tendo pesquisado na internet eu escrevi o seguinte código: Classe que eu quero ser injetado
public class Temp { public Temp(){ } public String getMe(){ return "something"; } }
Servlet
@WebServlet(name = "NewServlet", urlPatterns = {"/NewServlet"}) public class NewServlet extends HttpServlet { @Inject public Temp temp; protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); try (PrintWriter out = response.getWriter()) { out.println(""); out.println(" Here it is"+temp.getMe()+ "
"); out.println(""); } } ...
Mas eu tenho que seguir o erro no glassfish 4:
org.jboss.weld.exceptions.DeploymentException: WELD-001408 Dependências insatisfeitas para o tipo [Temp] com qualificadores [@Default] no ponto de injeção [[BackedAnnotatedField] @Inject private xxx.example.NewServlet.temp]
- Por que diferentes unidades de persistência com fonts de dados separadas consultam a mesma fonte de dados?
- Como injetar objects da mesma class com escopos diferentes?
- javax.ejb.NoSuchEJBException depois de reimplementar EJBs
- Solda e Java SE
- Como gerenciar o ciclo de vida do EntityManager no ambiente CDI (usando o Tomcat)
O que estou fazendo de errado?
Nenhum beans.xml
existe no WEB-INF
ou o arquivo requer a mudança de bean-discovery-mode="annotated"
para bean-discovery-mode="all"
.
O valor recomendado ” annotated
” apenas reconhece os beans gerenciados por CDI
anotados. Feijões sem qualquer anotação são ignorados. Como sua class Temp
não é um bean CDI
, então a recomendação não é aplicável no seu caso.
Para trabalhar com annotated
, anote a class com @RequestScoped:
// Import only this RequestScoped import javax.enterprise.context.RequestScoped; @RequestScoped public class Temp { public Temp() { } public String getMe() { return "something"; } }
Este RequestScoped
converterá sua class Temp
em bean CDI
e funcionará com bean-discovery-mode="annotated"
.
Em mim trabalhou com este comando:
asadmin set configs.config.server-config.cdi-service.enable-implicit-cdi=false
Então desabilite o enable-implicit-cdi trabalhado para mim.