【问题标题】:Glassfish 4, simple example in CDI fails with WELD-001408 Unsatisfied dependenciesGlassfish 4,CDI 中的简单示例因 WELD-001408 不满足的依赖关系而失败
【发布时间】:2013-11-11 06:10:03
【问题描述】:

我是 CDI 的新手。这是我的第一个示例,我正在尝试运行它。在网上搜索后,我编写了以下代码: 我要注入的类

public class Temp {

public Temp(){

}

public String getMe(){
    return "something";
}
}

小服务程序

@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("<body>");
        out.println("<h1> Here it is"+temp.getMe()+ "</h1>");
        out.println("</body>");
    }
}
...

但我必须在 glassfish 4 中出现以下错误:

org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied 注入时带有限定符 [@Default] 的类型 [Temp] 的依赖项 点 [[BackedAnnotatedField] @Inject 私有 xxx.example.NewServlet.temp]

我做错了什么?

【问题讨论】:

  • 你在WEB-INF中添加beans.xml了吗?

标签: java jakarta-ee dependency-injection glassfish cdi


【解决方案1】:

WEB-INF 中不存在beans.xml,或者文件需要将bean-discovery-mode="annotated" 更改为bean-discovery-mode="all"


<?xml version="1.0" encoding="UTF-8"?>
<beans
  xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
                  http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
  bean-discovery-mode="all">
</beans>

说明

推荐值“annotated”仅识别带注释的CDI 托管bean。没有任何注释的 Bean 将被忽略。由于您的 Temp 类不是 CDI bean,因此建议不适用于您的情况。

使用 bean-discovery-mode="annotated"

要使用annotated,请使用@RequestScoped 注释类:

// Import only this RequestScoped
import javax.enterprise.context.RequestScoped;

@RequestScoped
public class Temp {

    public Temp() { }

    public String getMe() {
        return "something";
    }
}

RequestScoped 会将您的Temp 类转换为CDI bean,并将与bean-discovery-mode="annotated" 一起使用。

【讨论】:

    【解决方案2】:

    在我使用这个命令时:

    asadmin set configs.config.server-config.cdi-service.enable-implicit-cdi=false
    

    所以禁用对我有用的 enable-implicit-cdi。

    【讨论】:

    • 好的,这是来自终端?
    • 或者这可以作为参数传递吗?
    • 当我尝试这个时,我得到“NCLS-ADMIN-00010 javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateExpiredException: NotAfter: Tue Apr 03 18:09:20 EDT 2018 Command设置失败。”但是我已经检查了我在 cacerts.jks 和 keystore.jks 中的所有证书,并且没有一个过期。帮忙?
    猜你喜欢
    • 1970-01-01
    • 2014-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    相关资源
    最近更新 更多