2011-07-14 3 views
1

Je crée une application de délégation de message simple. Les messages sont envoyés aux deux extrémités via JMS. J'utilise une MDB pour traiter les messages entrants, les transformer et les envoyer vers une file d'attente cible. Malheureusement, les mêmes messages peuvent être envoyés à la file d'attente entrante plus d'une fois, mais il n'est pas autorisé à transmettre les doublons.Valeurs de cache dans Java EE

Alors, quel est le meilleur moyen d'y parvenir? Comme il peut y avoir plusieurs MDB écoutant dans la file d'attente entrante, j'ai besoin d'un seul cache où je peux stocker les messages uniques des messages entrants pendant au moins une heure. Comment ce cache devrait-il être accessible? Via une classe singleton/static (je cours Java EE 5 et je n'ai donc pas l'annotation singleton)?

En outre, je pense que toutes les opérations doivent être synchronisées, non? Cela nuit-il trop aux performances?

Répondre

2

@Ingo: Êtes-vous OK avec la solution de base de données. Vous pouvez utiliser un serveur DB complet ou une simple solution apache derby pour cela .. Si oui, vous pouvez avoir une table simple où vous pouvez stocker un message unique UID et pouvez vérifier par rapport à l'unicité .... cette solution aura les avantages suivants:

  1. Code simple
  2. Pas besoin de temps cache lié (1 heure). Vous pouvez vérifier pour l'unicité d'un message pour toujours.
  3. Enregistrement persistant des messages entrés.
  4. Aucun besoin de coût élevé synchronisé, vous pouvez compter sur le niveau d'isolement DB pour avoir une cohérence.
  5. solution centralisée pour vos éventuels déploiements d'applications.
+0

Salut et merci pour la réponse rapide. Je suis d'accord pour la plupart de vos avantages, mais je pense que l'utilisation d'une solution DB est un peu exagéré pour "simplement" mettre en cache certaines chaînes. De plus, j'aurais encore besoin d'un travail supplémentaire pour expirer les clés et nettoyer la table car je n'ai pas besoin d'un protocole à long terme de messages entrants. En ce qui concerne la synchronisation: je pense que la DB ne fait que cacher cela. Mais néanmoins, je vais proposer votre suggestion. Après un peu plus de lecture, qu'en est-il de ehcache? – Ingo