Je cherche comment implémenter Open EntityManager In View dans JPA. Cependant, tout ce que je peux trouver est pour Hibernate (Open Session In View) ou Spring. Pourriez-vous donner un exemple (avec du code si possible) sur la façon de mettre en œuvre le modèle Open EntityManager In View pour JPA et Java EE?Ouvrir EntityManager dans View dans JPA pour Java EE
Répondre
Il y a une bonne explication d'une telle implémentation dans le très recommandable Pro JPA 2 Book, chapitre 6, rubrique 'Éviter le détachement'.
Je vais essayer de vous donner quelques indices, mais lisez-le - le livre présente plusieurs approches alternatives et discute de leurs avantages et inconvénients respectifs.
Avec JPA, il existe deux façons d'aborder le problème. Le premier est de travailler avec des entités détachées dans la vue et un contexte de persistance étendue (PC) dans le backend. La seconde consiste à conserver une seule transaction en vie tant que la vue est active. Je suppose que nous parlons de la deuxième stratégie ici - il est appelé «Transaction View» dans le livre.
Un point important est que le deuxième scénario ne fonctionne pas pour les clients distants. Une fois que vous devez sérialiser vos entités, la représentation sérialisée (et désérialisée) n'est en aucun cas attachée à un PC.
L'interrogation et le rendu doivent avoir lieu au cours de la même transaction afin d'utiliser un PC de portée TX. Vous devrez utiliser un UserTransaction
au lieu de vous appuyer sur CMT (vous pouvez toujours utiliser CMT dans les beans backend).
L'essentiel:
public class MyServlet extends HttpServlet {
@Resource UserTransaction tx;
@EJB MyService bean;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// ...
try {
tx.begin();
List entities = bean.findAll();
request.setAttribute("entities", entities);
getServletContext().getRequestDispatcher("/listEntities.jsp")
.forward(request, response);
} finally {
tx.commit();
}
// ...
}
}
Le livre illustre l'utilisation de ce modèle pour une page JPS. Je ne suis pas sûr de savoir comment vous feriez correspondre cette approche à d'autres cadres comme JSF ou Wicket.
- 1. EntityManager vide dans Java EE EE sur JBoss 5.1
- 2. Comment concevoir pour JPA dans un serveur Web non EE Java (par exemple Tomcat)
- 3. JPA EntityManager question
- 4. Glassfish JPA: Problèmes d'injection EntityManager
- 5. Cloud Foundry + JPA + Spring + EntityManager
- 6. Garder JPA EntityManager ouvert?
- 7. JPA EntityManager Merge Exception
- 8. problème avec JPA EntityManager
- 9. comment @FilterJoinTable avec EntityManager dans Hibernate JPA?
- 10. JPA entityManager est null dans Pointcut
- 11. Java EE JPA 2 Entité Mappages
- 12. Application Web Java EE Tests JPA EJB3
- 13. Programmation Java-ee; Confusion avec JPA pour 2 tables
- 14. Application Java EE dans Eclipse
- 15. jpa 2.0 n'injecte pas EntityManager
- 16. @Cacheable dans Java EE
- 17. Obtenir les métadonnées de JPA EntityManager
- 18. Autorisation pour les objets dans Java EE
- 19. Hibernate - Gestion EntityManager
- 20. JPA EntityManager createQuery ne renvoie aucun résultat
- 21. Force 'reload' de JPA EntityManager dans le test d'intégration
- 22. Service Web Java EE
- 23. Authentification dans l'application Java EE
- 24. Authentification unique dans Java EE
- 25. Problème avec EntityManager avec Tapestry et JPA
- 26. autorisation déclarative dans Java EE
- 27. Ressources pour Java EE 6
- 28. modèle mvc dans ee java et la migration du printemps java ee 7
- 29. Comment gérer les transactions java ee?
- 30. Modèles de conception pour l'application Java EE