我的应用服务器是 Glassfish 3.1.1,使用 Mojarra 2.0.3 FCS(据我所知)。我希望我的应用程序使用 JSF 2.1.2。我已经找到了在我的 Maven 构建中使用的正确工件。
现在,如何确保从该工件加载 JSF 类,而不是遵循 Glassfish libvrary 类加载器的“经典”委托(它将加载 JSF 2.0.3 并为我的 omnifaces/richfaces 附加组件生成 ClassNotFoundException)?
我的应用服务器是 Glassfish 3.1.1,使用 Mojarra 2.0.3 FCS(据我所知)。我希望我的应用程序使用 JSF 2.1.2。我已经找到了在我的 Maven 构建中使用的正确工件。
现在,如何确保从该工件加载 JSF 类,而不是遵循 Glassfish libvrary 类加载器的“经典”委托(它将加载 JSF 2.0.3 并为我的 omnifaces/richfaces 附加组件生成 ClassNotFoundException)?
通常,如何从档案中覆盖特定的 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)。