Bonjour à tous,
j'ai un petit probleme de mise en pratique des EJB CMP.
le probleme est assez simple, j'ai deux EJB Stateless (EJB1 et EJB2) qui accèdent à un EJB Session Facade d'un EJB CMP.
EJB1 (qui est lancé comme un Thread) crée un objet CMP mais le em.persist() ne le crée que dans le cache (pas d'écriture dans la base, juste en mémoire), un em.find confirme bien que l'enregistrement a été effectué. l'EJB1 continue son traitement.
lorsque l'EJB2 est lancé alors que l'EJB1 est toujours en exécution et accède à la base, il ne voit pas l'enregistrement précédemment créé par l'EJB1...
donc ma question est:
- comment commiter l'écriture de mon EJB1 en base afin que l'EJB2 puisse voir ce nouvel enregistrement ?
J'ai tenté d'utiliser une transaction dans mon EJB1 mais j'ai une erreur au lancement:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 EntityTransaction tx = em.getTransaction(); tx.begin(); em.persist(Object); tx.commit();Si je fais :java.lang.IllegalStateException: Illegal to call this method
l'objet est bien dans le cache mais je ne peux pas commiter l'écriture.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 em.persist(Object); display();
Qu'en pensez vous ?
Merci,
Tiamat.
Partager