0

我的应用服务器是 Glassfish 3.1.1,使用 Mojarra 2.0.3 FCS(据我所知)。我希望我的应用程序使用 JSF 2.1.2。我已经找到了在我的 Maven 构建中使用的正确工件。

现在,如何确保从该工件加载 JSF 类,而不是遵循 Glassfish libvrary 类加载器的“经典”委托(它将加载 JSF 2.0.3 并为我的 omnifaces/richfaces 附加组件生成 ClassNotFoundException)?

4

1 回答 1

2

通常,如何从档案中覆盖特定的 Java EE 工件是特定于应用程序服务器的。如果是 GlassFish,如果我没记错的话,您可以在 WEB-INF/glassfish-web.xml 中使用以下内容:

<glassfish-web-app error-url="">
    <class-loader delegate="false" />
    <property name="useBundledJsf" value="true" />
</glassfish-web-app>

还可以替换[glassfish home]/glassfish/modules中的罐子。这正是 JSF 构建脚本所做的事情,因此应该保证它可以正常工作。

请注意,如果您从低至 2.0.3 的版本升级到当前版本,您会看到从 2 个 jar 变为 1 个 jar。所以在这种情况下,在[glassfish home]/glassfish/domains/domain1/config/default-web.xml[glassfish home]/glassfish/lib/templates/default-web.xml中删除条目 jsf-api.jar 和 jsf -impl.jar 并将它们替换为单个 javax.faces.jar。

也许更简单的选择是下载最新版本的 GlassFish (3.1.2.2)。

于 2013-01-02T11:33:13.037 回答