我的应用服务器是Glassfish 3.1.1,使用Mojarra 2.0.3 FCS(据我所知)。我希望我的应用程序使用JSF 2.1.2。我已经找到了在我的maven构建中使用的正确工件。
现在,我如何确保JSF类是从这个工件加载的,而不是遵循"经典"委托到Glassfish库类加载器(它将加载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中的jar。这正是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)。