使用JSF1051将Payray中的JSF捆绑在一起失败使用GlassFishInjectionProvider不会扩展DiscoverableInjectionProvider

时间:2017-05-24 09:42:07

标签: jsf glassfish jsf-2.2 glassfish-4 payara

由于原始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>    

1 个答案:

答案 0 :(得分:0)

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

来自文档:

  

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

     

要配置白名单打包,您可以使用glassfish-web.xml(WAR工件)或glassfish-application.xml(EAR工件)上的<whitelist-package>元素。可以多次包含此元素以将多个包列入白名单。以下是将WAR 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库列入白名单。

Extreme Classloading Isolation