【问题标题】:Websphere - bean produced by producer from other maven module stopped to be seenWebsphere - 由其他 maven 模块的生产者生产的 bean 停止被看到
【发布时间】:2014-08-27 14:52:49
【问题描述】:

我正在 IBM RAD 9 下开发 WebSphere 8.5 的应用程序,使用 EJB 3 :(

我已将项目拆分为以下 maven 模块:

  • dto(仅“愚蠢”的传输对象)
  • ejb(业务逻辑)
  • web(REST 通道,构建类型为 WAR)
  • ear(嗯,构建类型是 EAR)

EJB 模块在 META-INF 中有空的 beans.xml 文件。那里有一个生产者类,它产生一些my.ejb.HelperClass

 @ApplicationScoped
public class MyHelperProducer {
    @Produces
    @ApplicationScoped
    public HelperClass produceGenWsClient() {
        ....
    }
}

用法很琐碎:

@Inject
private HelperClass helper;

它已经在运行了!在对代码进行一些更改后(涉及重构许多类中的许多字段,但不涉及那些!)一切都停止了。现在我收到这样的错误消息:

[8/27/14 16:33:38:960 CEST] 00000063 BeansDeployer E BeansDeployer 部署 javax.enterprise.inject.UnsatisfiedResolutionException:API 类型 [my.ejb.HelperClass] 未找到带有限定符的限定符: [@javax.enterprise.inject.Default()] 用于注入字段 注入点,字段:私有 my.ejb.HelperClass my.web.MyChannel.helper,Bean 所有者:[WSEjbBean [businessLocals=[my.web.MyChannel], ejbName=MyChannel1710565165,名称:null,WebBeans 类型:ENTERPRISE,API 类型:[java.lang.Object,my.web.MyChannel],限定符:[javax.enterprise.inject.Any,javax.enterprise.inject.Default]] InjectionType:[class my.ejb.HelperClass] 注释: [注释字段,基本类型:类 my.ejb.HelperClass,类型闭包: [类 my.ejb.HelperClass,类 java.lang.Object],注解: [@javax.inject.Inject()],Java 成员名称:助手] 限定符: [[@javax.enterprise.inject.Default()]] 在 org.apache.webbeans.util.InjectionExceptionUtils.throwUnsatisfiedResolutionException(InjectionExceptionUtils.java:92) 在 org.apache.webbeans.container.ResolutionUtil.checkResolvedBeans(ResolutionUtil.java:96) 在 org.apache.webbeans.container.InjectionResolver.checkInjectionPoints(InjectionResolver.java:189) 在 org.apache.webbeans.container.BeanManagerImpl.validate(BeanManagerImpl.java:1092) 在 org.apache.webbeans.config.BeansDeployer.validate(BeansDeployer.java:394) 在 org.apache.webbeans.config.BeansDeployer.validateInjectionPoints(BeansDeployer.java:332) 在 org.apache.webbeans.config.BeansDeployer.deploy(BeansDeployer.java:183) 在 org.apache.webbeans.lifecycle.AbstractLifeCycle.startApplication(AbstractLifeCycle.java:124) 在 org.apache.webbeans.web.lifecycle.WebContainerLifecycle.startApplication(WebContainerLifecycle.java:78) 在 com.ibm.ws.webbeans.common.CommonLifeCycle.startApplication(CommonLifeCycle.java:106)

“有趣”的是,我已经在其他应用程序中遇到了此类错误,但后来我通过启动服务器清理并删除项目并将其重新导入工作区来解决它们。然而现在,即使这样也没有用。

这里实际上有什么问题? RAD 中是否存在大错误?或者我做错了什么,那只是以前偶然工作的?如何诊断此类错误?

【问题讨论】:

  • 实际上,在反转 OpenJPA 映射中的更改后,问题“消失”了。但是为什么异常显示在 bean 上,没有对 OpenJPA 的引用,为什么没有显示 OpenJPA 异常?

标签: java jakarta-ee ejb websphere ibm-rad


【解决方案1】:

查看此链接Troubleshooting contexts and dependency injection。也许它会帮助你。引用:

  1. 解决无法满足的依赖关系。
    无法满足的依赖关系,或 javax.enterprise.inject.UnsatisfiedResolutionException,发生在 与注入匹配的对象没有相应的来源 应用程序中的点。字段的 API 类型,以及 可选的限定符注释集,规定了 bean 的集合 满足依赖是有效的。不满意的原因 依赖如下:

    • 没有可分配给 注入点。
    • 没有任何托管 bean 的生产者方法的返回类型可分配给注入点。
    • 在任何类型可分配给注入点的托管 bean 中都没有生产者字段。
    • 前面提到的场景之一是有效的,但注入点上的限定符注释不存在于 豆子或生产者。

通过使用 API 类型和 通过引入一个新的 bean 来获得限定符,删除限定符, 或添加生产者字段或方法

如果 bean 在一个模块中创建并在另一个模块中使用,您可能缺少一些类路径依赖项?

【讨论】:

  • 类路径依赖没有改变。实际上,堆栈跟踪中提到的类没有任何变化。
猜你喜欢
  • 2014-11-20
  • 2022-10-12
  • 2020-08-27
  • 1970-01-01
  • 2021-11-07
  • 2013-01-07
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
相关资源
最近更新 更多