当前位置: 首页 > 知识库问答 >
问题:

CDI在简单的WebSphere Liberty Profile设置中不起作用

施令秋
2023-03-14

我在本地计算机上安装了WebSphere Liberty Profile(wlp-beta-javaee7-2015.4.0.0.zip),服务器上有以下server.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<server description="new server">
  <!-- Enable features -->
  <featureManager>
    <feature>jsp-2.3</feature>
    <feature>cdi-1.2</feature>
    <feature>ejbLite-3.2</feature>
    <feature>jaxrs-2.0</feature>
    <feature>jpa-2.1</feature>
    <feature>jaxrs-2.0</feature>
    <feature>jaxrsClient-2.0</feature>
    <feature>concurrent-1.0</feature>
    <feature>jndi-1.0</feature>
    <feature>localConnector-1.0</feature>
  </featureManager>

  <httpEndpoint id="defaultHttpEndpoint" httpPort="9080" httpsPort="9443" />
  <applicationMonitor updateTrigger="mbean" />
  <application id="test2_ear_exploded" location="C:\myfolder\test2\out\artifacts\test2_ear_exploded" name="test2_ear_exploded" type="ear" />
</server>

该应用程序是一个调用bean方法的简单JSP页面。该方法使用@Inject-ed bean:

package pkg1;
import javax.inject.Inject;

public class Test {
    @Inject
    private Bean1 bean1;

    public String test() {
        return bean1.testMethod();
    }
}

应用程序启动后,我在那里得到了NullPointerException。在我看来,CDI注入不起作用。有人能帮我吗?

共有2个答案

乐正光誉
2023-03-14

我在JSP代码中使用了@Inject,这似乎在JSP中不起作用。当我将所有注入移到Java并使用CDI BeanManager实例化第一个bean时,所有其他@Injects都开始工作。

不太方便,但证明CDI是有效的。

赵涵亮
2023-03-14

这个错误表明测试不是一个bean。如果您想对一个类执行注入,该类应该是Bean或JavaEE组件,详见表EE。EE7规范第5-1条。

测试类没有定义bean的注释,因此它不是隐式bean存档中的bean(没有beans.xml或有bean.xml,但bean discovery mode=“annotated”)。

要解决此问题,可以对测试进行注释。带有Bean定义注释的java,如Dependent、ApplicationScoped等。或者,添加一个空白Bean。xml或bean。带有bean discovery mode=“all”的xml,这有效地使测试成为具有依赖范围的bean。

 类似资料:
  • 文件src/main/webapp/WEB-INF/web.xml包含用于引导CDI的servlet侦听器和BeanManager引用: 通过这些设置,在使用mvn Jetty运行应用程序时,我总是遇到以下错误:run(第一行是最重要的): 应用程序正在运行,但正如异常消息所述:CDI注入在servlet中不可用。 在src/main/resources/log4j.properties中,我增加

  • 问题内容: 我正在研究一个简单的Java聊天客户端gui应用程序。(服务器等由其他人完成)。 这不是一个大项目,但是我唯一的问题是,无论如何尝试调整上述GUI上任何组件的大小,都将无法正常工作。 例如: 不行 谢谢您的帮助。 问题答案: 在Swing中,您有两个用于布局的选项:手动执行所有操作或为您处理。 仅当您不使用时,通话才有效。由于您使用的是A,因此您必须使用其他方式来指定所需的内容。 尝试

  • 问题内容: 我正在使用HtmlUnit 2.9(本月发布的稳定版本)。您是否知道以下代码为何不起作用? 我还要添加jstack的结果。注意,我标记了一个不断重复的部分: 我认为关于自动加载框架存在某种循环。如果是这样,是否有任何方法可以禁用该行为以打破循环? 提前致谢! 问题答案: 好吧,尽管这是一个可怕的解决方案(实际上,解决方法……),但我最终决定按照HtmlUnit的开发人员之一的建议,在H

  • 我有一些jQuery在Chrome中工作得很好,但当测试时,它根本不工作。为了帮助解决问题,我创建了一个简单的按钮,其中包含一个非常精简的jQuery版本,应该只显示一个删除按钮。但是,我在控制台中得到一个语法错误,我没有看到警报。 有人看到我错过了什么吗?我正在使用一个CSS类将jQuery代码挂接到按钮上,但我不认为这是一个问题……除非IE不能处理这个问题。

  • 我用泽西岛写了一个非常简单的例子。我从泽西岛网站下载了最新的jar文件到WEB-INF的lib文件夹中。我的课程和在下面。 当我提供URL我得到。 然而,当我使用Maven时,它是有效的。我用的是Eclipse开普勒,Glassfish 4服务器,Java 7。 非Maven版本我做错了什么? 谢谢。 类: Web.xml:

  • 我正在指定一个上下文根,如下面的XML所示。但是,当我在Glassfish admin web控制台中手动上传war文件时,它不起作用。如果我通过glassfish的maven插件部署它,它就能工作。Glassfish似乎没有读取文件,而是使用默认名称...我是不是漏掉了什么,或者这是一个错误?我正在使用Glassfish 3.1.2.2构建5。 glassfish-web.xml