2009-08-24 9 views
1

Ich muss eine einfache DAO-Bean implementieren, die auch aus der Datenbank gelesene Daten zwischenspeichert. Diese DAO-Bean wird von Staatenlosen Bohnen verwendet.Wie implementiert Singleton-like EJB3.0 Bean?

Da EJB3.0 Singleton-Beans nicht unterstützt, was wäre der richtige Weg, um eine solche DAO-Bean zu implementieren? Ist es in Ordnung, nur statische Variable zu verwenden, um den Cache zu behalten?

Wir verwenden Oracle AS und werden kein Clustering verwenden.

Antwort

4

Der "richtige" Weg, dies auf eine etwas cross-appserver Weise zu tun ist, eine jmx mbean für das Caching-Verhalten zu verwenden. Mbeans sind Singletons (per-App-Server) und können Dinge wie Threading und Sperren tun. Je nachdem, welchen AppServer Sie verwenden, kann mbeans in der Praxis natürlich mehr oder weniger schwierig sein.

2

Die meisten Anwendungsserver und JPA-Implementierungen bieten eine Art eingebauten Cache-Mechanismus, der vom Benutzer gesteuert werden kann. Es könnte sich lohnen, nach Wegen zu suchen, um das zu erreichen, was Sie wollen, ohne ein Singleton bauen zu müssen.

Eines der Hauptprobleme bei Singletons und J2EE ist, dass es keine einfache Möglichkeit gibt, sie in einer Clusterumgebung zu handhaben.

Das alles gesagt, ich habe eine article gefunden, die einige Vorschläge macht möglicherweise tun, was Sie wollen unter JBoss, und erwähnt eine neue @Singleton Annotation für EJB3.1, so dass eine Möglichkeit sein könnte. Wenn das für Sie funktioniert, sollten Sie aufschreiben, was Sie als weitere Antwort auf diese Frage getan haben.

+0

Wir verwenden bereits EclipseLink Caching, aber wir haben ein paar Fälle, wo es nicht ausreicht und wir müssen Caching manuell implementieren – tputkonen

0

Wenn Sie auf dem Weblogic-Server arbeiten, ist es tatsächlich möglich, eine Singleton-Bean zu implementieren, die auch clusterfähig ist. Ich glaube nicht, dass diese Funktion auf anderen Anwendungsservern existiert.