2009-08-24 7 views
1

J'ai besoin d'implémenter un simple bean DAO, qui met également en cache les données lues dans la base de données. Ce bean DAO est utilisé par les beans apatrides.Comment implémenter un bean EJB3.0 de type singleton?

Étant donné que EJB3.0 ne prend pas en charge les beans singleton, quelle serait la bonne façon d'implémenter un tel bean DAO? Est-il acceptable d'utiliser simplement une variable statique pour conserver le cache? Nous utilisons Oracle AS et ne pas utiliser le clustering.

Répondre

4

La méthode "correcte" pour faire cela d'une manière un peu cross-appserver est d'utiliser un mbean jmx pour le comportement de mise en cache. Les mbeans sont des singletons (serveur par app) et peuvent faire des choses comme le threading et le verrouillage. en fonction du serveur d'applications que vous utilisez, bien sûr, mbeans peut être plus ou moins difficile à utiliser en pratique.

2

La plupart des serveurs d'applications et des implémentations JPA offrent un certain type de mécanisme de mise en cache intégré qui peut être contrôlé par l'utilisateur. Il pourrait être intéressant d'étudier les moyens d'accomplir ce que vous voulez sans avoir à construire un singleton. L'un des principaux problèmes avec les singletons et J2EE est qu'il n'y a pas de moyen facile de les gérer dans un environnement en cluster. Cela dit, j'ai trouvé un article qui fait quelques suggestions pour éventuellement faire ce que vous voulez sous JBoss, et mentionne une nouvelle annotation @Singleton pour EJB3.1, ce qui peut être une possibilité. Si cela fonctionne pour vous, vous devriez écrire ce que vous avez fait comme une autre réponse à cette question.

+0

Nous utilisons déjà la mise en cache EclipseLink, mais nous avons quelques cas où ce n'est pas suffisant et nous devons implémenter manuellement la mise en cache – tputkonen

0

Si vous utilisez le serveur Weblogic, il est réellement possible d'implémenter un bean singleton qui est également compatible avec les clusters. Je ne crois pas que cette fonctionnalité existe sur d'autres serveurs d'applications.

Questions connexes