2017-05-24 2 views
0

Je dois regrouper l'implémentation JSF dans mon fichier WAR en raison d'un bogue connu dans l'implémentation initiale de mojarra.L'intégration de JSF dans WAR pour Payara échoue avec JSF1051 GlassFishInjectionProvider ne s'étend pas DiscoverableInjectionProvider

Je ne suis pas autorisé à remplacer l'implémentation JSF dans les modules, donc j'utilise la propriété useBundledJsf. Exécution de Payara Version: Payara Server 4.1.1.164 #badassfish (build 28) Cette version devrait prendre en charge useBundledJsf correctement.

J'ai ajouté à mon GlassFish-web.xml:

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

et a ajouté les javax.faces dependecy à mon pom:

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

Je reçois l'erreur suivante et toutes les injections échouent.

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

J'ai essayé d'ajouter la soudure integration.jar à mon projet, mais il produit encore l'erreur JSF1051 suivante:

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

La dépendance de la soudure d'intégration j'ai utilisé:

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

Répondre

0

Il existe une fonctionnalité supplémentaire pour vous faciliter la tâche dans Payara serveur 171 wh J'ai été ajouté spécifiquement pour que ces scénarios fonctionnent correctement.

De la documentation:

Il est possible de configurer un niveau d'isolement extrême de la délégation de chargement de classe pour les applications déployées. Avec ce comportement d'isolation extrême, une application déployée peut forcer le serveur à charger uniquement les classes des bibliothèques incluses sur Payara Server qui appartiennent à des packages en liste blanche définis sur ses descripteurs de déploiement.

Pour configurer l'empaquetage de liste blanche, vous pouvez utiliser l'élément <whitelist-package> sur glassfish-web.xml (artefacts WAR) ou glassfish-application.xml (artefacts EAR). Cet élément peut être inclus plusieurs fois dans la liste blanche de plusieurs packages. Voici un exemple de liste blanche à la fois les paquets Google goyave et Jackson pour une application WAR:

<?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> 

La syntaxe est simple whitelist: Définir le nom du package qui contient les classes en question. Par exemple, si vous écrivez com.google, toutes les bibliothèques Google incluses sur le serveur figureront sur la liste blanche, tandis que l'écriture com.google.guava ne mettra que la liste blanche de la bibliothèque Google Guava.

Extreme Classloading Isolation

+0

Merci pour le conseil, mais je ne suis pas sûr de ce que je devrais whitelist ici. tous les paquets utilisés par les facelets sont déjà en liste blanche (Classes en blanc par défaut): com.sun, javax et le paquetage dans le message d'erreur org.glassfish. Il essaie toujours de charger JSF externaly et l'erreur est toujours là. – tak3shi