CDI - 正确的bean.xml格式是什么?

时间:2015-10-05 06:57:51

标签: java glassfish cdi jboss-weld

我对bean.xml文件的正确格式和用法有疑问。在我的项目中,我通常将此内容用于我的bean.xml文件(不使用explizit bean声明):

<?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>

这在WildFly 8和9中运行良好。但是我在GlassFish 4中遇到了部署问题。在问题:Glassfish 4, simple example in CDI fails with WELD-001408 Unsatisfied dependencies我写了一个替代格式:

<beans
   xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
                  http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
          bean-discovery-mode="all">
</beans>

使用了不同的命名空间。并且GlassFish4似乎关心这一点。

用于JEE7的空bean.xml文件的正确格式是什么?

1 个答案:

答案 0 :(得分:14)

正确的空beans.xml可以是完全空文件,真的; - )

但是当您想要添加一些内容时,请注意大多数XML部署描述符名称空间已在Java EE 7中更新。此post describes详细信息。此外还添加了bean-discovery-mode

BTW:我正在使用的示例beans.xml现在看起来像:

<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
       version="1.2" bean-discovery-mode="annotated">

    <!-- some content -->
</beans>

您可能会注意到version="1.2"属性的使用 - 您可以自由地将其设置为1.1。它只是提醒读者项目正在使用CDI 1.2(实际上只是 CDI 1.1 规范的维护版本)。