Comment exposer un EJB 3.1 comme un Service Web REST?
J'ai découvert une nouvelle fonctionnalité de java reposant lors de l'utilisation d'EJB 3.1 lors de la lecture d'un article sur le Adam Bien de l' blog.
Le truc, c'est que les Apatrides et Singleton haricots peuvent être exposées comme des ressources à la racine. Mais comment?
J'ai essayé de faire de cette façon:
@Stateless
@LocalBean
@Path("Hybrid")
public class RESTEJBSample {
@GET
@Path("/demo")
@Produces(MediaType.TEXT_PLAIN)
public String something() {
return "I am a Hybrid!!!";
}
}
Lorsque j'appelle l'URL http://localhost:8080/HybridSample/resources/Hybrid/demo j'ai une erreur 404.
Appart de cela et juste pour s'assurer que JAXRS est de travailler dans mon projet, j'ai créé un simple pojo de ressources juste pour tester si cela fonctionne bien.
@Path("/genericresource")
public class GenericResource {
@GET
@Path("/samplemethod")
@Produces(MediaType.TEXT_PLAIN)
public String saySomething() {
return "Something!";
}
}
Ici lorsque j'appelle l'URL http://localhost:8080/HybridSample/resources/genericresource/samplemethod Il fonctionne très bien!
Donc mes questions sont:
- ce qui est manquant dans mon EJB de sorte qu'il peut fonctionner comme un service web de ressources telles que la classe GenericResource est en train de faire?
- Est-il une configuration supplémentaire est nécessaire?
- Quelles sont les limitations lors de l'utilisation d'EJB en tant que service web?
OriginalL'auteur sfrj | 2012-03-27
Vous devez vous connecter pour publier un commentaire.
Selon cette NetBeans tutoriel sur le Jersey des services web RESTFul, vous pouvez décider de
ou
J'ai toujours utilisé le deuxième choix, qui consiste à ajouter cette page à vos
web.xml
:D'exposer votre service Web REST comme un EJB est, à mon expérience, extrêmement utile. Vous pouvez insérer où vous le souhaitez, vous pouvez injecter dans votre EntityManager, et vous pouvez même l'utiliser comme un DAO dans certaines situations simples.
Concernant votre question /commentaire sur les caractéristiques et les limites: entreprise haricots exécuter dans le conteneur d'EJB, si elles sont déployées dans un fichier war ou pas. Vous pouvez injecter dans un JMS ConnectionFactory comme une ressource, comme expliqué dans cette section de Java EE 6 Tutoriel. Grâce à l'injection d'un ConnectionFactory, vous pouvez envoyer des messages JMS. Si vous souhaitez recevoir des messages JMS de manière asynchrone, vous devez définir un Message-Driven Bean comme expliqué dans cette section de l'mentionnés ci-dessus tutoriel.
Je n'ai jamais essayé d'étendre les EJB utilisé pour un Maillot de services web afin de mettre en œuvre l'interface MessageListener, mais je pense que cela devrait être possible (sinon, vous pouvez injecter un MDB dans votre Maillot de racine Stateless bean).
Enfin, vous pouvez utiliser Container-Managed transactions comme expliqué ici. En outre, à partir de ce tutoriel NetBeans:
New->Webservice
et un assistant, je coche une option qui dit créer des web service Stateless bean. Qui a inséré ajouté l'EJB dans le .la guerre de fichier et maintenant il fonctionne très bien. Mon exemple fonctionne très bien maintenant, mais je serais aussi intéressé de savoir ce qui se passe derrière la scène?, quels sont les fichiers en cours de modification par le montant Net des Haricots? Et aussi quelles sont les limites de ce bean? Oui, je pense que c'est vraiment un truc cool aussi.NetBeans est de ne pas ajouter quoi que ce soit: les seules choses que vous avez à faire pour créer les Apatrides de classe (RESTEJBSample dans votre exemple) et l'adaptateur dans la servlet web.xml. La servlet est en train de faire toute la magie derrière les coulisses. Concernant les limites, je pense que vous devriez essayer de clarifier un peu à votre question.
Quand je parle des limites, je veux dire. Sont ce les haricots va être capable de se comporter de la même manière que lorsqu'il est déployé dans l'EJB-Modules? Ce que je veux dire c'est est-il un besoin pour une sorte de manuel de gestion des transactions?Peuvent-ils interagir avec JMS?... Maintenant, ils ne sont pas dans le conteneur d'EJB, ils sont dans un .la guerre de fichier.
Salut Perissf, Merci de résoudre mon problème et me guide. J'ai un grand besoin pour cela. Merci de cette question. stackoverflow.com/questions/19706788/.... Je veux mettre en œuvre une communication asynchrone. S'il vous plaît aider et merci pour votre temps. S'il vous plaît.!!!
désolé de ne pas avoir de réponse de la zone à votre question.
OriginalL'auteur perissf