0

由于原始 mojarra 实现中的已知错误,我需要在我的 WAR 文件中捆绑 JSF 实现。

我不允许替换模块中的 JSF 实现,所以我使用的是 useBundledJsf 属性。

运行 Payara 版本:Payara Server 4.1.1.164 #badassfish (build 28) 这个版本应该正确支持 useBundledJsf。

我已将此添加到我的 glassfish-web.xml 中:

  <class-loader delegate="false" />
  <property name="useBundledJsf" value="true" />  

并将 javax.faces 依赖项添加到我的 pom 中:

<dependency>
   <groupId>org.glassfish</groupId>
   <artifactId>javax.faces</artifactId>
   <version>2.2.13</version>
</dependency>  

我收到以下错误,并且所有注射都失败了。

SEVERE: JSF1051: Service entry 'org.glassfish.faces.integration.GlassFishInjectionProvider' does not extend DiscoverableInjectionProvider. Entry will be ignored.

我试图将weld-integration.jar 添加到我的项目中,但它仍然会产生JSF1051 错误,如下所示:

Unable to create a new instance of 'org.jboss.weld.jsf.ConversationAwareViewHandler'

我使用的焊接集成的依赖性:

<dependency>
<groupId>org.glassfish.main.web</groupId>
<artifactId>weld-integration</artifactId>
<version>4.1.2</version>
<exclusions>
    <exclusion>
        <artifactId>*</artifactId>
        <groupId>*</groupId>
    </exclusion>
</exclusions>    

4

1 回答 1

0

Payara Server 171 中有一个额外的功能可以使这更容易,该功能是专门为使这些场景正常工作而添加的。

从文档中:

可以在已部署应用程序的类加载委托上配置极端隔离级别。通过这种极端的隔离行为,部署的应用程序可以强制服务器仅从 Payara 服务器上包含的库中加载类,这些库属于其部署描述符中定义的白名单包。

要配置白名单打包,您可以使用<whitelist-package>glassfish-web.xml(WAR 工件)或 glassfish-application.xml(EAR 工件)上的元素。可以多次包含此元素以将多个包列入白名单。以下是将 WAR 应用程序的 Google Guava 和 Jackson 包列入白名单的示例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
<glassfish-web-app error-url="">
  ...
  <whitelist-package>com.google.guava</whitelist-package>
  <whitelist-package>com.fasterxml.jackson</whitelist-package>
</glassfish-web-app>

白名单语法很简单:定义包含相关类的包的名称。例如,写入com.google会将服务器上包含的所有 Google 库列入白名单,而写入com.google.guava只会将 Google Guava 库列入白名单。

极端的类加载隔离

于 2017-05-24T10:07:58.857 回答