JDev 12 和 Java EE CDI

问题描述 投票:0回答:1

我正在尝试在 JDev 12.2.1 的 ADF 应用程序中使用 Java EE CDI,但即使是这个简单的案例:

public class ClassA { }

public class ClassB {
    @Inject ClassA injected;
}

它似乎创建了 ClassA bean 的两个副本,但失败并出现 Ambiguous dependencies 错误。还有其他人让 CDI 在 JDev 12.2.1 中工作吗?是否有我弄错的项目或 weblogic 设置?

weblogic.management.DeploymentException: CDI deployment failure:WELD-001409: Ambiguous dependencies for type ClassA with qualifiers @Default
  at injection point [BackedAnnotatedField] @Inject private ca.bluecross.ab.muw.view.controller.ClassB.injected
  at ca.bluecross.ab.muw.view.controller.ClassB.injected(ClassB.java:0)
  Possible dependencies:
  - Managed Bean [class ca.bluecross.ab.muw.view.controller.ClassA] with qualifiers [@Any @Default],
  - Managed Bean [class ca.bluecross.ab.muw.view.controller.ClassA] with qualifiers [@Any @Default]
:org.jboss.weld.exceptions.DeploymentException:WELD-001409: Ambiguous dependencies for type ClassA with qualifiers @Default
  at injection point [BackedAnnotatedField] @Inject private ca.bluecross.ab.muw.view.controller.ClassB.injected
  at ca.bluecross.ab.muw.view.controller.ClassB.injected(ClassB.java:0)
  Possible dependencies:
  - Managed Bean [class ca.bluecross.ab.muw.view.controller.ClassA] with qualifiers [@Any @Default],
  - Managed Bean [class ca.bluecross.ab.muw.view.controller.ClassA] with qualifiers [@Any @Default]

                at org.jboss.weld.bootstrap.Validator.validateInjectionPointForDeploymentProblems(Validator.java:367)
                at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:281)
                at org.jboss.weld.bootstrap.Validator.validateGeneralBean(Validator.java:134)
                at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:155)
                at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:518)
                Truncated. see log file for complete stacktrace
cdi jdeveloper
1个回答
0
投票

Class ClassA 有一个默认范围,它是 @Dependent。这个 bean 将在注入点创建。查看类 ClassA 的 bean 将在哪里创建和注入。销毁范围为 @Dependent 的 bean 取决于将注入它的类的实例。如果你没有这个点,那么创建它,或者改变这个 bean 的范围。例如放置@ApplicationScope 并检查它。

© www.soinside.com 2019 - 2024. All rights reserved.