【问题标题】:Where should beans.xml be placed?beans.xml 应该放在哪里?
【发布时间】:2012-02-17 23:29:29
【问题描述】:

我刚刚从 7.0 升级到 NetBeans 7.1。在打开 JSF 托管 bean 时,它“有用地”告诉我它找不到我的 beans.xml 文件,所以我希望它为我创建。我知道我在 WEB-INF 下有一个 beans.xml 文件,但我还是答应了,看看发生了什么。在 META-INF 下为我创建了一个新 beans.xml。

我认为我犯了一个错误,我删除了 WEB-INF 下的文件,只是为了让我的应用程序在启动时失败。将 beans.xml 放回 WEB-INF 解决了这个问题。此页面似乎认为这两个位置都有效:http://seamframework.org/Documentation/WhatIsBeansxmlAndWhyDoINeedIt

那么,问题是 beans.xml 应该放在 WEB-INF 还是 META-INF 中?

我正在运行 GlassFish 3.1.1 和 Java 7

【问题讨论】:

    标签: java-ee-6 glassfish-3


    【解决方案1】:

    在您的情况下,将 beans.xml 放置到 WEB-INF 目录中很好,因为很可能 bean 位于 WEB-INF 类下。

    beans.xml 的正确位置取决于归档类型和 bean 类的位置。

    在规范中是这样解释的:

    已启用 bean 的 Bean 类必须部署在 bean 档案中。

    • 如果库 jar、EJB jar、应用程序客户端 jar 或 rar 归档在 META-INF 目录中有一个名为 beans.xml 的文件,那么它就是一个 bean 归档。
    • 如果战争的 WEB-INF 目录中有一个名为 beans.xml 的文件,那么战争的 WEB-INF/classes 目录就是一个 bean 存档。
    • 如果 JVM 类路径中的目录在 META-INF 目录中有一个名为 beans.xml 的文件,那么它就是一个 bean 存档。

    【讨论】:

    • 很好的回答谢谢,教会了我一些新东西。我怀疑 NetBeans 在这种情况下是错误的。
    • 答案帮助我理解了我在 servlet 中使用 @Inject 时遇到的异常 javax.enterprise.inject.UnsatisfiedResolutionException: Api type ... 异常。我将 beans.xml 放在 META-INF 而不是 WEB-INF 中。
    猜你喜欢
    • 2013-09-05
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 2012-07-18
    • 2020-09-30
    • 1970-01-01
    相关资源
    最近更新 更多