2010-12-14 6 views
1

Je suis à la recherche d'un motif/méthode ne résout proprement le problème suivant:Comment mélanger l'état persistant et transitoire d'un objet de domaine?

Dans une application d'affichage à l'écran (différentes informations sont affichées sur les écrans LCD dans les lieux publics), je Hibernate POJO persistants, qui peut être créé et mis à jour dans la partie administration de mon application.

Dans la partie "affichage", qui est en lecture seule, j'utilise ces objets. Ils doivent toujours être à jour avec l'état persistant, mais ils ont aussi un état transitoire (qui n'est jamais stocké dans la base de données) pour lequel la durée de vie est la session entière (HTTP) (peut durer une journée entière ou plus).) et qui est spécifique à chaque session/utilisateur (ici un "utilisateur" est un écran). Comment combiner (proprement) les deux états afin de maintenir l'état transitoire en mémoire (dans la session HTTP), tout en rafraîchissant régulièrement l'état persistant de la base de données? Utilisez la même classe et faites Hibernate session.refresh() si nécessaire? Stockez les deux états dans différentes classes et reliez-les par ex. avec l'identifiant? Motif de décorateur?

Répondre

1

Je ne suis pas certain de comprendre. Si l'objet est en lecture seule, quel type d'information est transitoire? Si l'objet est en lecture seule, il sera toujours le même pour toutes les sessions. Peut-être que vous voulez dire que l'objet n'est pas en lecture seule, mais qu'il ne sera pas conservé au serveur?

+0

Certains champs sont persistants et en lecture seule dans cette partie de l'application. Certains autres ne sont pas persistants (donc transitoires) mais représentent un état (changeant constamment) qui s'étend sur la session d'un utilisateur et est différent pour chaque session. J'espère que c'est plus clair! –

+0

Si les champs "transitoires" ne sont pas persistants, mais spécifiques à une session, vous devriez envisager d'utiliser les EJB (Stateful Session Beans). De cette façon, le serveur prend soin de livrer la SFSB spécifique au client, et ils peuvent être effacés lorsque la session expire (ou est fermée). Le seul "gotcha" ici est qu'il semble que vous ayez ces deux informations dans la même instance. Je dirais que ce n'est pas idéal, car vous mélangez probablement des préoccupations. Mais je ne peux pas le dire sans connaître les détails de votre problème. – jpkrohling

+0

Merci! Mais je ne change pas pour EJB maintenant :) Ma solution pour l'instant: Stockez le POJO Hibernate dans la session HTTP. Cela maintient l'état "transitoire" à travers la session de l'utilisateur. Ensuite, j'appellerai session.refresh d'hibernate quand j'ai besoin de relire l'état persistant. Comme j'utilise une session de mise en veille prolongée différente pour chaque requête HTTP, je peux avoir plusieurs instances du même objet persistant, car un objet persistant n'est unique que dans la portée de la session de mise en veille prolongée. Je vais changer votre réponse, mais je ne peux pas vraiment l'accepter, désolé ... –

Questions connexes