在库jar中找不到CDI命名bean

时间:2015-05-29 08:11:47

标签: jsf java-ee dependency-injection glassfish cdi

我有一个使用一些库来重用一些常见内容的ear包。其中一个常见的事情是SettingsBean,它为应用程序执行一些通用设置。但是,即使存在beans.xml文件,也无法使用CDI找到SettingsBean。

以下是我的EAR文件的文件结构:

<item name="android:actionBarStyle">@style/ActionBar.Solid.Example</item>

SettingsBean:

META-INF
lib
main-ejb.jar
main-web.war
|
`-- WEB-INF
|   |
|   `-- lib
|   |   |
|   |   `-- primefaces.jar
|   |       common-web.jar
|   |       |
|   |       `-- META-INF
|   |       |   |
|   |       |   `-- resources
|   |       |   |   |
|   |       |   |   `-- WEB-INF
|   |       |   |       |
|   |       |   |       `-- mainTemplate.xhtml
|   |       |   `-- maven
|   |       |   `-- MANIFEST.MF
|   |       |   `-- beans.xml
|   |       `-- com
|   |           |
|   |           `-- SettingsBean.class
|   `-- classes
|   `-- web.xml
|   `-- glassfish-web.xml
|   `-- faces-config.xml
|   `-- beans.xml
`-- META-INF
`-- index.xhtml

的index.xhtml:

@Named(value = "settingsBean")
@SessionScoped
public class SettingsBean implements Serializable {
    //Code here
}

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:p="http://primefaces.org/ui" template="/WEB-INF/mainTemplate.xhtml"> <ui:define name="content"> Content comes here </ui:define> </ui:composition> 我调用了settingsBean。因此,当我调用index.xhtml页面时,出现以下错误:

mainTemplates.xhtml

有关如何访问库jar中的命名bean的任何帮助?到目前为止我所读到的是你需要在其中包含beans.xml文件,否则CDI将不会扫描jar中的Named bean,但正如你所看到的,我有beans.xml。

1 个答案:

答案 0 :(得分:0)

这不是OP的问题(考虑到文件的发布树),但是由于其他问题,对于具有相同错误消息的其他人可能会有帮助。

当在 bean发现期间无法识别bean时,会发生这种错误。未被发现的一个可能原因是,如果未将JAR标记为具有bean,在这种情况下将不会对其进行扫描。解决方案是确保在WEB-INF下的WAR文件和META-INF下的JAR文件中都有bean.xml的副本。

请参见reference 1下的reference 2here