2010-11-29 13 views
0

J'ai une méthode qui effectue plusieurs opérations dans une transaction. L'opération envoie un message à MDB. J'utilise hibernate avec un cadre de printemps.Les données mises à jour ne sont pas récupérées avec la session Hibernate et MDB dans une transaction

Pseudo code est:

@TransactionAttribute(TransactionAttributeType.REQUIRED) 
public someMethod{ 

dao.update(someObject); 

sendToMDB(someObjectID); << sending ID of above updated object 

dao.doSomeThingMore(); 
} 

Dans le MDB je suis juste aller chercher le updatedObject ci-dessus:

onMessage(){ 

....

dao.find(someObjectID); 

} 

Le problème que je suis confronté est lorsque je récupère someObject dans MDB récupère les anciennes valeurs de someObject et non celles mises à jour! !!

J'ai essayé d'enlever toutes les méthodes dans MDB et de mettre tous ensemble dans la méthode someMethod() et cela fonctionne très bien. J'ai même essayé d'utiliser flush() & clear() après dao.update() mais toujours le même problème.

Aidez-nous s'il vous plaît.

Merci d'avance.

+0

Quelqu'un peut-il suggérer. Ce problème me rend fou. – alex

Répondre

0

Vous avez probablement besoin de créer une session de file d'attente transactionnelle.

QueueSession createQueueSession(
     QueueConnection qu 
    ) throws JMSException { 
    return qu.createQueueSession(true, -1); 
} 

Notez ici vrai paramètre fera des transactions de session. Ici -1 juste un paramètre fictif quand vous voulez négliger les paramètres d'accusé de réception, vous pouvez utiliser des modes d'acception prédéfinis.

Vous pouvez également définir certaines configurations transactionnelles dans votre console de serveur d'applications si nécessaire pour effectuer des appels transactionnels.