2010-11-16 21 views
1

Je dispose d'un bean géré par message qui reçoit les messages d'audit. Ces messages contiennent également des informations sur le système audité. Lorsqu'un message est reçu, la MDB peut créer le système s'il n'existe pas ou réutiliser un système existant. Mon défi est que lorsqu'un grand nombre de messages d'un nouveau système sont reçus simultanément, plusieurs instances MDB sont créées et peuvent créer des systèmes dupliqués. Ajouter une contrainte à la base de données est une façon de le résoudre. Y at-il un moyen d'éviter ces doublons dans l'application, MDB dans ce cas?Synchronisation de l'accès à une méthode MDB entre instances

Répondre

-1

Vous pouvez essayer quelque chose comme ceci:

private Object LOCK; 
public void onMessage() { 
    code… 
    synchronized(LOCK) { 
     check if system exists, create if necessary 
    } 
    more code… 
} 
+0

ce code ne se synchronisera que sur une seule instance, ce qui rendra LOCK static synchronisé sur toutes les instances de classe, merci – n002213f

+0

Vous avez raison, bien sûr. Bonne prise. –

+0

-1: vous ne devez pas utiliser de variables statiques non finales dans les beans. –

1

Assurez-vous d'avoir qu'un seul thread traitement de tous les messages. Cela peut être configuré sur la spécification d'activation, pool de connexions.