Usage de persist() en transaction ou sans ?
Je continue sur une autre question, liée cette fois-ci à l'utilisation des EJB Entity.
mon EJB Session (KeepAlive) sollicite un EJB Entity. Si je veux appeller em.persist, je prend une exception:
javax.persistence.TransactionRequiredException: EntityManager must be access within a transaction
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| @Stateless
public class KeepAliveBean extends Thread implements IKeepAlive {
@PersistenceContext(name="KeepAliveModule")
EntityManager em;
....
public void start(String moduleName, int period){
try{
em.persist(KA);
...... |
Et par contre, si j'utilise une transaction, j'ai une exception du type:
java.lang.IllegalStateException: Illegal to call this method from injected, managed EntityManager
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| @Stateless
public class KeepAliveBean extends Thread implements IKeepAlive {
@PersistenceContext(name="KeepAliveModule")
EntityManager em;
....
public void start(String moduleName, int period){
EntityTransaction tx = em.getTransaction();
tx.begin();
try{
em.persist(KA);
......
tx.commit(); |
Il m'avait semblé que les Transactions n'étaient pas nécessaires, et l'utilisation des Entity Bean plutot simples.
qu'en pensez vous ?
Merci,
Tiamat.