65 votes

Conseils pratiques sur l'utilisation de Jersey et Guice pour un service RESTful

De ce que je peux trouver en ligne, l'état de l'art pour Guice + Maillot intégration a stagné depuis 2008, lorsqu'il apparaît que les deux équipes dans une impasse. Le nœud de la question est que JAX-RS annotations effectuer le champ et la méthode d'injection et cela ne joue pas bien avec Guice propres de l'injection de dépendance.

Quelques exemples que j'ai trouvé ne vont pas assez loin pour élucider:

  • Iqbalyusuf post sur Maillot + Guice sur Google App Engine Java souffre de beaucoup de passe-partout (manuellement l'obtention et l'appel de l'injecteur). Je veux la liaison et l'injection doit se passer en coulisses par Guice annotations.

  • Jonathan Curran l'article de la Création d'un service RESTful avec Jersey, Guice, et JSR-250 m'a donné de l'espoir car il est beaucoup plus récente (2010), mais est allé plus loin que de montrer comment démarrer un Maillot de service à l'intérieur d'un Guice ServletModule. Cependant, il n'existe aucun exemple de faire tout réel de l'injection de dépendances. Je suppose que cela a été laissée comme exercice pour le lecteur. Curran post peut en fait être la bonne première étape vers de câblage Guice et de Jersey et donc j'ai l'intention de départ.

  • terriblement James Strachan écrit:

    JAX-RS fonctionne bien avec dépendance l'injection des frameworks tels que Spring, Guice, GuiceyFruit ou JBossMC - vous pouvez en principe choisir celui qui vous préfèrent.

    Mais je ne vois aucune preuve que c'est vrai à partir d'un praticien de point de vue.

Ce que je trouve qui manque sont des exemples pratiques et des explications sur la façon de combiner JAX-RS et Guice annotations. Par exemple:

  • Je crois que je ne peux pas utiliser le constructeur d'injection avec toutes les ressources de Jersey veut contrôler cette
  • Je ne suis pas certain si je peux combiner @Inject avec @PathParam, @QueryParam, et al.
  • Comment utiliser l'injection dans un MessageBodyWriter mise en œuvre

Quelqu'un aurait-il des exemples, de préférence avec de la source, de la non-trivial application qui combine Jersey et Guice, sans sacrifier l'une ou l'autre dans le processus? Je suis rester sur cette route, peu importe, mais le pièces et de morceaux sur le Maillot et Guice listes me fait penser que je suis de répéter le travail de ceux qui sont venus avant moi.

53voto

Nehc Points 644

Guice l'intégration avec le Maillot n'a pas stagné. Le contraire est vrai. Merci à Paul et ses sbires derrière Jersey, la dernière version 1.7 contient un JerseyServletModule classe pour travailler avec Guice à base de servlets. Guice à base de constructeur injection de JAX-RS ressource travaille! La question est à l'aide de JAX-RS annotations telles que @QueryParam dans le constructeur de JAX-RS ressource. Vous n'en avez pas besoin! Vous utilisez Guice pour POJO injection tous les le chemin, y compris les singletons. Puis JAX-RS est juste la cerise sur le gâteau pour l'analyse RESTful HTTP Api comme chemin d'accès d'URL, les paramètres de la requête, le type de contenu et etc. Vous n'avez pas besoin d'une "force industrielle" exemple soit. Les deux Guice et Jersey sont déjà de bataille testés. Vous avez juste besoin d'un travail complet exemple pour voir comment il fonctionne. Ensuite, vous pouvez expérimenter les fonctionnalités avancées sur votre propre. Consultez le lien suivant pour un exemple complet d'utilisation de Guice 3.0 et Jersey 1.7, qui sont toutes dernières versions:
http://randomizedsort.blogspot.com/2011/05/using-guice-ified-jersey-in-embedded.html

21voto

Sunny Gleason Points 201

J'ai créé un exemple d'application Guice / Jersey / Jetty / Jackson ici:

http://github.com/sunnygleason/j4-minimal

Si vous avez des questions ou des suggestions pour améliorer cet exemple, n'hésitez pas à m'envoyer un message via github. L'objectif est d'en faire une introduction très accessible à REST sur la pile Java.

J'espère que cela vous aidera - passez une bonne journée!

-Ensoleillé

9voto

Daniel Bimschas Points 101

Inspiré par l'exemple d'application Sunnys, j'ai créé un exemple de projet similaire qui utilise des fichiers WAR standard pour le déploiement, par exemple dans Apache Tomcat. Vous pouvez trouver le projet ici:

https://github.com/danbim/template-guice-jersey-tomcat

S'amuser! Daniel

3voto

Scott Points 31

J'ai eu des problèmes similaires d'abord essayer d'utiliser Guice faire du constructeur d'injection sur mon Maillot annoté classes, mais finalement obtenu de travailler, mais avec un assez banale application.

J'ai suivi les instructions ici: jersey-guice javadoc

Le truc, dans mon cas, j'avais besoin de retirer le Maillot de configuration de mon web.xml (comme le Jersey ServletContainer) et de ne garder que les Guice auditeur et Guice filtre. Une fois que je n'ai que Guice a été appelé à créer mon JAX-RS annoté de l'objet, et de Jersey a été l'injection de mon JAX-RS annoté méthodes (comme @GET, etc.) comme prévu.

3voto

Jonas Points 1054

Je crois que je ne peux pas utiliser l'injection de constructeur avec aucune ressource car Jersey veut contrôler cette

Vous ne pouvez pas utiliser l'injection de constructeur de guice car la création de la ressource est gérée par jersey. Dans ce cas, vous pouvez utiliser les annotations @Inject du jersey avant le paramètre de constructeur que vous souhaitez faire injecter:

 public NewsResource(@Inject NewsService service)
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X