@Inject 来自 EJB 项目的 bean 给出 UnsatisfiedResolutionException

@Inject a bean from an EJB project gives UnsatisfiedResolutionException

我有两个maven项目。

  1. 一种是封装类型ejb,在/META-INF
  2. 中包含一个beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"
>
  1. 一种是封装类型war,在/WEB-INF
  2. 中包含一个beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"
>
</beans>

然后将这些包装成一只耳朵。

在我的ejb项目中,我有一个classBanana,在war项目中,我有一个classMonkey
然后我尝试在 WAS 8.5 中 运行 这个,所以它将使用 JEE 6
但是,当我尝试在 Monkey class 中 @Inject Banana cdiBanana 时,它失败了。
它给出消息

javax.enterprise.inject.UnsatisfiedResolutionException: Api type [org.food.Banana] is not found with the qualifiers
Qualifiers: [@javax.enterprise.inject.Default()]

当我将 Banana 设为 @Stateless EJB,并将 Monkey 设为 @EJB Banana ejbBanana 时,它就可以工作了。

为什么这行不通?我应该怎么做或尝试让它发挥作用?

可能与 CDI: Why are there unsatisfied dependencies in the following setup? 有关?

现在,我将关闭这个问题。 看起来问题出在 JEE6 规范上。

  • 运行 这在自由 (JEE7) 中工作正常。
  • 运行 在 Wildfly (JEE7) 中工作正常
  • 运行 在 JBoss (JEE6) 中失败
  • WAS 8.5 (JEE6) 中的
  • 运行 失败。

显然,@Inject 来自另一个 Ejb-jar 的 bean 会给容器带来问题。 当您使用 @EJB 时它工作正常。