2011-08-15 1 views
2

J'ai besoin de la fonctionnalité CDI sur une application de repos dans laquelle j'utilise RESTEASY. J'ai donc suivi le manual's instruction pour installer le module resteasy-cdi sur mon application, qui fonctionne sur JBoss AS7.resteasy-cdi - obtention d'un "paramètre d'initialisation de contexte dupliqué resteasy.injector.factory" erreur

Mais quand je lance le serveur je reçois l'erreur suivante:

13: 48: 08631 ERREUR [org.apache.catalina.core.StandardContext] (fil de service MSC 1-4) Contexte [/ MainService] démarrage a échoué en raison d'erreurs précédentes: java.lang.IllegalArgumentException: paramètres d'initialisation du contexte en double resteasy.injector.factory

Mon web.xml est le suivant:

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    version="2.5"> 
    <listener> 
     <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class> 
    </listener> 
    <servlet> 
     <servlet-name>Resteasy</servlet-name> 
     <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class> 
    </servlet> 
    <context-param> 
     <param-name>resteasy.injector.factory</param-name> 
     <param-value>org.jboss.resteasy.cdi.CdiInjectorFactory</param-value> 
    </context-param> 
    <context-param> 
     <param-name>resteasy.scan</param-name> 
     <param-value>true</param-value> 
    </context-param> 
    <servlet-mapping> 
     <servlet-name>Resteasy</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

J'ai essayé sever toutes les combinaisons de paramètres, et essayé de le configurer comme dans this thread aussi, mais sans succès.

La spécification de javax.ws.rs.core.Application sur le fichier web.xml et la désactivation de resteasy.scan n'ont également pas résolu le problème.

Mon pom.xml a le contenu suivant:

<dependency> 
    <groupId>org.jboss.resteasy</groupId> 
    <artifactId>resteasy-cdi</artifactId> 
    <version>2.2.1.GA</version> 
</dependency> 

J'ai aussi essayé les tests avec et sans l'artefact resteasy-jarxs ensemble et avec la déclaration de la dépendance comme this article.

Je suis vraiment perdu. As tu des idées? J'ai besoin de CDI ou d'EJB pour utiliser EntityManager de JPA par injection. Je sais que je peux m'en passer, mais je préférerais pouvoir explorer l'intégration de JTA et les fonctionnalités de CDI dans le futur.

Merci.

Répondre

2

J'ai rencontré la même erreur, j'ai testé les versions de jar RestEasy et inclusion/exclusion, et je n'ai fait aucun progrès pour le résoudre. J'ai donc signalé un bug sur le tracker de problème RestEasy JBoss (https://issues.jboss.org/browse/RESTEASY-586) qui, j'espère, recevra une réponse par la suite. J'utilise aussi JBoss AS 7 et les derniers RestEasy et CDI et Seam.

Ma demande a bien fonctionné dans Glassfish 3.1.1 mais rompu (avec cette erreur « paramètre initialisation du contexte Duplicate resteasy.injector.factory ») lorsque je me suis déplacé à JBoss AS 7.

7

Le problème est que les faisceaux de AS7 resteasy-cdi et vous le groupez également. L'analyseur de déploiement AS7 détecte et traite les fragments Web provenant des deux jarres qui déclarent resteasy.injector.factory en indiquant l'erreur 'duplicate'. Vous avez deux options, utilisez la version fournie de resteasy (préféré) ou retirez le module fourni. Pour la première option, vous définissez votre dépendance Maven comme prévu et ajoutez une dépendance à resteasy dans votre manifeste. Pour exécuter sur la dernière version de AS7 (construire à partir https://github.com/jbossas/jboss-as) essayez de changer votre configuration pour ressembler à ceci:

<properties> 
    <resteasy.version>2.2.3.GA</resteasy.version> 
    <maven.war.plugin.version>2.1.1</maven.war.plugin.version> 
</properties> 

<dependency> 
    <groupId>org.jboss.resteasy</groupId> 
    <artifactId>resteasy-jaxrs</artifactId> 
    <version>${resteasy.version}</version> 
    <scope>provided</scope> 
</dependency> 
<dependency> 
    <groupId>org.jboss.resteasy</groupId> 
    <artifactId>resteasy-cdi</artifactId> 
    <version>${resteasy.version}</version> 
    <scope>provided</scope> 
</dependency> 

Et ajouter une dépendance à l'égard resteasy-cdi dans votre manifeste, par exemple:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>${maven.war.plugin.version}</version> 
      <configuration> 
       <failOnMissingWebXml>false</failOnMissingWebXml> 
       <archive> 
        <manifestEntries> 
         <Dependencies> 
          org.jboss.resteasy.resteasy-jaxrs, 
          org.jboss.resteasy.resteasy-cdi 
         </Dependencies> 
        </manifestEntries> 
       </archive> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

Jetez un coup d'oeil dans $ JBOSS_HOME/modules/org/jboss/resteasy/... pour savoir quelle version de resteasy est fournie par votre version d'AS7.

Vous pouvez également supprimer ces modules de jboss et procéder à l'empaquetage de votre propre copie. Voir les exemples d'une guerre brisée et d'une guerre fixe jointe à RESTEASY-586 pour plus de détails.

0

Le reste du module easy-cdi est fourni avec J Boss AS depuis la version 6.0.0 M4. donc pas besoin d'ajouter explicitement la fabrique CdiInjectorFactory. Mais si vous utilisez Tomcat ou tout autre serveur, ajoutez cette ligne de code ci-dessus dans le fichier web.xml.

Questions connexes