CDI:为什么在以下设置中存在不满意的依赖关系?

时间:2013-08-02 03:30:43

标签: cdi

耳文:

ear
 +--lib
 |   +--API jar
 |   |     +-- com.foobar.Greeter.class (interface)
 |   |         (look, ma, no META-INF/beans.xml on purpose)
 |   |
 |   +--JAX-RS endpoint jar
 |         +-- com.foobar.GreeterResource.class (has @Inject Greeter greeter;)
 |         +-- META-INF/beans.xml
 |   
 +--EJB jar
 |   +-- com.foobar.GreeterBean implements com.foobar.Greeter (@Stateless, @Local)
 |   +-- META-INF/beans.xml
 |
 +--JAX-RS skinny war (no libs)
     +-- WEB-INF/beans.xml (maybe not necessary?)
     +-- WEB-INF/classes/com.foobar.Application 
                                   (empty subclass of JAX-RS Application)

回顾一下英文:

  • API jar文件。包含Greeter接口。出现在lib目录中。
  • EJB jar文件。包含实现@Stateless的{​​{1}} @Local EJB。还包含Greeter文件。 CDI says this is necessary使其成为一个bean存档。
  • 瘦弱的战争。仅存在一个(空)META-INF/beans.xml类作为JAX-RS的bootstrappy部分。端点不在其中。包含Application文件,但我承认我不确定这是否必要,因为by definition WEB-INF/beans.xml仅标记WEB-INF/beans.xml目录(此处不存在) bean archive。
  • JAX-RS端点jar文件。这个有点奇怪。出现在 classes .ear目录中,所以在类路径中,但不在lib文件的.war目录中(有意)。根据JAX-RS 1.1规范发现 - 由JAX-RS应用程序自动发现,因此其中的类可能是JAX-RS和CDI之间的一种拉锯战。 lib包含GreeterResource

在GlassFish 3.1.2.2(Weld 1.1.8)中部署它会导致@Inject Greeter greeter;位置的不满足的依赖性错误。 WTF?

为什么呢?整个应用程序中唯一的@Inject实例是EJB实现,它位于bean存档中。资源类位于bean归档中。我将规范读作saying that session beans automatically have their business local interfaces registered as bean types

0 个答案:

没有答案