JavaE6 DAO: Devrait-il être @Stateless ou @ApplicationScoped?
Je suis actuellement à la création d'un EJB3 d'Accès aux Données de la Classe pour gérer toutes les opérations de base de données dans mon Java EE 6-application. Maintenant, depuis Java EE 6 de la nouvelle ApplicationScoped-Annotation, je me demande quel est l'état de mon EJB doit avoir, ou si elle doit être apatrides.
Devrait-il être mieux de laisser la DAO être un @Stateless Session Bean, ou un @ApplicationScoped Bean? Ce propos de @Singleton? Quelles sont les différences entre ces options liées à un DAO?
EDIT:
Je suis l'aide de Glassfish 3.0.1 avec la totalité de la plate-forme Java EE 6
source d'informationauteur ifischer
Vous devez vous connecter pour publier un commentaire.
Je ne voudrais PAS utiliser des Beans de Session sans état pour DAOs:
Les ejb sont mis en commun par le conteneur, donc si vous avez N instances par la piscine et des milliers de tables, vous êtes juste de gaspiller des ressources (même pas mentionner le coût à l'heure du déploiement).
La mise en œuvre de DAOs comme SLSB serait d'encourager les EJB chaînage qui n'est pas une bonne pratique de l'évolutivité de point de vue.
Je ne voudrais pas la cravate de la couche DAO à l'API EJB.
La
@Singleton
introduit dans EJB 3.1 pourrait rendre les choses un peu mieux, mais je voudrais quand même de ne pas mettre en œuvre DAOs comme les Ejb. Je préfère utiliser les CDI (et peut-être une coutume stéréotype, voir cet article par exemple).Ou je ne voudrais pas utiliser DAOs. JPA du gestionnaire d'entités est une mise en œuvre de la Domaine Magasin modèle et l'emballage de l'accès à un Domaine de Stocker dans un DAO n'a pas beaucoup de valeur ajoutée.
Après une certaine réflexion, il semble que DAO est en fait pas le bon nom pour ce que je voulais faire. Peut-être que c'est vraiment une Façade, comme l'a dit Pascal.
Je viens de trouver le Netbeans Petstore Exemple - un JavaEE6 exemple d'application, voir ici - où ils ont un ItemFacade qui est responsable de trouver/createing/suppression d'entités à partir de la base de données. C'est un Bean Session sans état. Ressemble à ceci:
Donc en conclusion, je ne l'appelez pas mon DAO DAO plus, mais au lieu de cela juste pour exemple PersonEJB (je pense que "PersonFacade" pourrait être mal compris) et de le rendre aussi @Apatrides, je pense que le Netbeans exemple peut être considéré comme bien conçu.
@Pascal:
À mon avis, mon DAO n'est pas "responsable" de la transaction ou de la sécurité, comme le conteneur de la gestion de ces services. Je suis juste en annotant les méthodes de mon DAO (seulement pour la sécurité, comme les transactions sont gérées automatiquement). Annotations, déjà, de la "responsabilité"?
Bon alors vous me faire re-penser à ma conception. Espérons que c'est bon et pas trop hors-sujet, mais peut-être cela vous aidera - c'est la façon dont je suis l'aide de JEE6 aujourd'hui:
la "logique d'entreprise"
Est quelque chose de mal avec cette approche?