Je sais que je dois fusionner l'entité avant de le retirer, mais je n'ai jamais pensé que je dois le faire à l'intérieur de l'EJB. D'abord, j'ai ces éléments: dans mon haricot géré. Cela me donne cette erreur p> alors j'apporte ces deux lignes à l'intérieur de mon haricot de session et ça marche. N'importe quelle idée pourquoi? P> et p> Bean géré code> p>
myejb.java < / code> p>
3 Réponses :
Je sais que je dois fusionner l'entité avant de le retirer p>
Pas exactement. L'objet transmis à la suppression doit être une entité et ne doit pas être détaché. C'est différent. P>
Mais je n'ai jamais pensé que je dois le faire à l'intérieur de l'EJB. D'abord, j'ai ces (...) p> blockQuote>
Voyons ce que vous faites: p>
xxx pré> donc dans
1: code>, vous appelez un ejb (très probable avec un contexte de persistance de transaction-scopé) qui fusionne l'entité. Mais ensuite, la méthode se termine, la transaction s'engage, le contexte de persistance se fermue, rendant l'entité retournée
détachée forte> à nouveau. P> et dans
2: code>, vous Passez l'entité (toujours) détachée à un EJB et essaie de
Supprimer CODE> IT, ce qui n'est pas autorisé. Et kaboom! P>
Alors j'apporte ces deux lignes à l'intérieur de mon haricot de session et ça marche. Une idée pourquoi? P> blockQuote>
Cela fonctionne car vous travaillez maintenant dans le cadre du contexte de persistance associé à la transaction JTA et que vous passez donc vraiment une entité em> gérée em> à
supprimer < / code>. P> blockQuote>
Merveilleuse réponse. Merci beaucoup
... et vous pouvez même combiner ceux-ci:
Comme: p>
J'ai eu les mêmes problèmes de transaction lorsque cela a été utilisé dans un servlet. Lorsque vous utilisez l'EJB-Service-Bean d'un MDB, cela fonctionnait bien, car la transaction a été lancée avant l'appel de l'EJB, mais lorsque l'appel EJB est venu d'un servlet, il n'y avait pas de transaction en cours d'exécution. J'ai résolu cela dans ma webApp en créant un filtre qui démarre et commis une maîtrise utilisateur. Ensuite, chaque appel à la méthode EJB rejoint mon utilisateur d'utilisateur au lieu de commencer sa propre transaction. P>