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

当ejb注入同一ear war中定义的实现时,CDI不起作用

乐正涵意
2023-03-14
@Inject
@Any
private Instance<ConfigurationProviderLocal> providerEjb;

此接口的实现是在WAR中定义的。这个实现部署了Fine。

在glassfish V3.1日志中,我看到:

信息:EJB FormConfigurationProviderBean的可移植JNDI名称:[java:global/com.dialog.eDialog_eServices_EAR_1.0.1-snapshot/checkout-form-1.0-snapshot/FormConfigurationProviderBean,java:global/com.dialog.eDialog_eServices_EAR_1.0.1-snapshot/checkout-form-1.0-snapshot/FormConfigurationProviderBean!

但在我的实现的迭代中:

for (ConfigurationProviderLocal provider : providerEjb) {
            [...]
        }

实现FormConfigurationProviderBean从不迭代。我在日志中没有可以解释这一点的消息。

此外,当我单独部署war时(不是在ear内部部署war,在ear内部嵌入依赖项),注入工作正常。

共有1个答案

魏风华
2023-03-14

如果设置正确(可能是这样),这应该可以工作。

我在JBoss世界(在AS6上)也遇到过类似的问题,在EAR中不同的工件不能互相看见。我通过重新配置JBoss类加载机制解决了这个问题,但这是JBoss的普通(专有的)东西。

作为调试的第一步,我要做的是:查询BeanManager关于bean的实际内容。这可能会给你一个提示。转储初始bean处理的小型CDI扩展也会有帮助。

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

  • 问题内容: 我的配置是:Wildfly 8.2.0,焊接 是否可以在bean中而不是在CDI中的接口中注入bean? 问题答案: 是的,可以,但是当EJB注入业务视图时,您要公开的唯一业务视图是该视图,该视图是实现接口(在您的情况下是本地业务接口)时的默认视图。因此,如果要注入bean本身,则需要告诉容器您正在使用无接口视图。 在您的示例中,如果仍然要实现接口并进行注入,则应使用注释,这意味着Be

  • 我试图让CDI在tomcat 9.x中工作。我遵循了以下链接,但openwebbeans容器仍然没有将资源注入servlet https://devlearnings.wordpress.com/2011/05/15/apache-openwebbeans-cdi-from-standalone-to-webapp/https://dzone.com/articles/using-apache-o

  • 我已经创建了一个CDI(WELD)拦截器,它可以工作并拦截它应该拦截的内容。 其中MyInterceptorBinding是一个拦截器绑定: 我想将我的拦截器注入一个bean类,如下所示: 但是这个注入带来了一个错误: 我如何克服这个问题?问题是否与拦截器的事实有关?我应该使用CDI便携式扩展设施吗?如果是,如何解决?

  • 我的配置是:Wildfly8.2.0,Weld 是否可以在CDI中注入bean而不是在其接口中注入?

  • CDI bean: 当我现在访问无状态EJB(例如从servlet访问)时,我希望testMethod使用与调用方的HttpSession相关联的CDI bean。因此,如果来自不同Browser/HTTP会话的两个客户机访问Servlet,它们都将得到不同的结果字符串。 我是否需要CDI而不是?如果需要,我如何为给定会话生成正确的bean实例?我想过也许可以使用BeanManager并搜索Ses