Comment puis-je intégrer Jersey avec TomEE / openEJB
Je me suis mise à niveau d'un code qui utilise Maillot de JAX-RS pour s'exécuter sur un Apache TomEE serveur. Malheureusement, il jette des erreurs lorsque j'essaye d'utiliser Jersey avec TomEE.
Je suis en utilisant eclipse et ont JAX-RS projet facette allumé. Il pointe vers le Maillot de la bibliothèque. J'ai également déplacé le Maillot des bibliothèques dans le répertoire /lib/pour essayer de résoudre le problème en vain. Le serveur lance le message d'erreur suivant:
May 14, 2012 6:26:44 AM com.sun.jersey.api.core.ScanningResourceConfig logClasses
INFO: Provider classes found:
class org.codehaus.jackson.jaxrs.JsonParseExceptionMapper
class org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider
class org.codehaus.jackson.jaxrs.JsonMappingExceptionMapper
class org.codehaus.jackson.jaxrs.JacksonJsonProvider
May 14, 2012 6:26:44 AM org.apache.catalina.core.ApplicationContext log
SEVERE: StandardWrapper.Throwable
java.lang.RuntimeException: javax.naming.NameNotFoundException: Name [com] is not bound in this Context. Unable to find [com].
at com.sun.jersey.server.impl.cdi.CDIExtension.getInitializedExtension(CDIExtension.java:177)
at com.sun.jersey.server.impl.cdi.CDIComponentProviderFactory.<init>(CDIComponentProviderFactory.java:92)
at com.sun.jersey.server.impl.cdi.CDIComponentProviderFactoryInitializer.initialize(CDIComponentProviderFactoryInitializer.java:75)
at com.sun.jersey.spi.container.servlet.WebComponent.configure(WebComponent.java:576)
at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.configure(ServletContainer.java:311)
at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:608)
at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:210)
at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:373)
at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:556)
at javax.servlet.GenericServlet.init(GenericServlet.java:160)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1266)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1185)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1080)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5015)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5302)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1566)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1556)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: javax.naming.NameNotFoundException: Name [com] is not bound in this Context. Unable to find [com].
at org.apache.naming.NamingContext.lookup(NamingContext.java:820)
at org.apache.naming.NamingContext.lookup(NamingContext.java:168)
at org.apache.naming.SelectorContext.lookup(SelectorContext.java:158)
at javax.naming.InitialContext.lookup(Unknown Source)
at com.sun.jersey.server.impl.cdi.CDIExtension$2.stepInto(CDIExtension.java:290)
at com.sun.jersey.server.impl.cdi.CDIExtension.diveIntoJNDIContext(CDIExtension.java:267)
at com.sun.jersey.server.impl.cdi.CDIExtension.lookupJerseyConfigJNDIContext(CDIExtension.java:287)
at com.sun.jersey.server.impl.cdi.CDIExtension.getInitializedExtension(CDIExtension.java:175)
... 22 more
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<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_3_0.xsd" version="3.0">
<display-name>tomeeTest3</display-name>
<servlet>
<description>JAX-RS Tools Generated - Do not modify</description>
<servlet-name>JAX-RS Servlet</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JAX-RS Servlet</servlet-name>
<url-pattern>/jaxrs/*</url-pattern>
</servlet-mapping>
</web-app>
Personne ne sait comment je peut faire ce travail? Je voudrais également envisager d'utiliser la tomEE+ Jax-rs serveur, mais il ne semble pas reconnaître la Jackson annotations.
EDIT: je pense que le problème est que le openEJB CDI est en conflit avec le CDI qui vient avec Jersey. Je n'ai aucune idée de comment résoudre ce problème.
web.xml posté.
Greg - Avez-vous résoudre ce problème? Je semble être d'avoir exactement le même problème.
Nope, j'ai décidé de ne pas utiliser TomEE
OriginalL'auteur Greg | 2012-05-14
Vous devez vous connecter pour publier un commentaire.
RÉSURRECTION! Juste au cas où quelqu'un est toujours en cours d'exécution dans ce problème.
J'avais un Maillot de l'application en cours d'exécution dans Tomcat peachy keen et a explosé exactement de cette manière, quand j'ai déménagé il TomEE. Le problème est que TomEE a déjà sa propre JAX-RS de mise en œuvre (tomee-jaxrs-1.5.0 au moment d'écrire ces lignes), ce qui entre en conflit avec le maillot de faisceaux de pots.
Tout ce que j'avais à faire pour se débarrasser de ce problème, c'était de retirer le maillot des pots et commentez la servlet de la déclaration et de la cartographie dans les web.xml
Donner un redémarrage, et l'alto! Rappelez-vous que l'Url sera légèrement différente. Par exemple, sur un défaut de jersey installer vous pourriez avoir
http://localhost/rest/represent/me
et lorsque vous déplacez la même application pour TomEE il serahttp://localhost/represent/me
Si vous utilisez un IDE comme eclipse, il peut aboyer à vous pour ne pas être en mesure de trouver les pots, il suffit d'aller dans les propriétés du projet et de définir la cible de l'exécution pour TomEE (vous devrez ajouter une instance de serveur) et vous devriez être bon d'aller.
De partager et de profiter.
J'ai vérifié ce correctif. Pour l'opportunisme j'ai simplement supprimé les bibliothèques de la guerre de fichier et déployé
Ce ne peut être valide, si vous essayez d'utiliser Maillot de JAX-RS version de TomEE. Le webprofile version n'a pas de JAX-RS, nous avons besoin d'une solution différente.
le profil des rejets sont spécifiques à leur utilisation. Pour le profil web vous avez juste besoin d'inclure le Maillot des bocaux, par habitude. Le meilleur de la chance.
Je sais, il suffit de pointer, vous êtes probablement en utilisant un autre TomEE profil de Greg et moi. Je suis à l'aide de la webprofile afin que je puisse ajouter JAX-RS de mise en œuvre de mon choix, mais le Maillot n'est pas de travail (voir mon post ci-dessous). J'ai fini par utiliser Resteasy sur TomEE-webprofile et ça fonctionne très bien maintenant.
OriginalL'auteur grauwulf
Moi aussi j'ai ce problème avec la même exception, et, malheureusement, grauwulf la réponse n'a pas de travail pour moi.
Dans mon cas, j'ai Tomee+ 1.5.2, Maillot 1.1 x, et je suis également en utilisant le Printemps 3.x.
Le correctif était en fait assez simple:
system.properties
fichier ({tomee}/conf/system.properties
par défaut).com.sun.jersey.server.impl.cdi.lookupExtensionInBeanManager=true
À partir de là, il a juste travaillé pour moi. Pour donner du crédit où il est dû, je l'ai trouvé sur ce post de blog.
D'intérêt, je préfère aussi pour ne pas encombrer mon
{tomee}/lib
dossier avec mes de la guerre dépendances, donc, j'ai aussi trouvé que vous pouvez facilement ajouter une lib en modifiant{tomee}/conf/tomee.xml
, et en ajoutant le nœud suivant (à l'intérieur de la racine<tomee />
nœud):Avec qui
Service
, dont le nom est arbitraire, vous pouvez pas passer unpath
, à quel point il est par défaut"additional-lib"
. Le passé dans le chemin d'accès sera utilisé par défaut, mais si ce n'est pas un répertoire, puis il reviendra à un système de propriété, qui peut être ajouté à lasystem.properties
fichier. Le système de la propriété est:openejb.enricher.additional-lib
.Ce système de la propriété est activée uniquement si le chemin d'accès transmis à
Service
, ou sa valeur par défaut, ne fonctionne pas et que si unService
est placé dans letomee.xml
fichier. Sonid
n'est pas pertinent.Cela a fonctionné pour moi , merci
OriginalL'auteur pickypg
Viens de tomber sur ce problème: TomEE + Jersey... le problème c'est que j'ai été en utilisant TomEE dans Eclipse "Utilisation de l'espace de travail métadonnées"... et en quelque sorte, lorsqu'il est configuré comme ça les configurations de serveur manque plusieurs détails de la TomEE configs (à savoir la conf/système.propriétés - où nous déclarer: "com.soleil.jersey.serveur.impl.cdi.lookupExtensionInBeanManager=true"). Quand je l'ai changé pour "Utilisation installation de Tomcat", le problème a disparu. Vous pouvez configurer en double-cliquant sur le TomEE serveur dans Eclipse et sélectionnez "Utiliser l'installation de Tomcat", comme on le voit dans l'image suivante:
OriginalL'auteur emgsilva
Vous devez ajouter le package des classes de Fournisseur en tant que paramètre à la servlet:
Votre fournisseur de classes devrait ressembler à ceci:
OriginalL'auteur Eugenio Cuevas
J'ai tracé vers le bas et pickypg est correct. J'ai pu obtenir que cela fonctionne avec TomEE 1.5.2 avec le tomee-maven-plugin. Je n'ai pas compris exactement, mais ce problème se produit après que le maillot de chiffres là-bas est un haricot gestionnaire de java:comp/BeanManager et essaie de recherche le contexte.
Voici les excerts de jersey où il est en cours d'exécution dans la question.
...
OriginalL'auteur Chris Hinshaw
J'ai été en mesure de le faire et si quelqu'un est à la recherche de la solution que ce que j'ai fait
Ce que j'ai fait:
* je suis à l'aide de NetBeans 7.3.1
* J'ai ajouté les lignes suivantes dans Tomee\conf\system.propriétés
–>com.soleil.jersey.serveur.impl.cdi.lookupExtensionInBeanManager= true
* J'ai ajouté jersey bibliothèques de NetBeans c'est tout
* Notez que les bibliothèques sont dans WEB-INF\lib de mes applications
* Informations supplémentaires j'ai même été en mesure d'utiliser Mojarra JSF si quelqu'un est intéressé, je peux vous dire comment
OriginalL'auteur user1183033