The code
I have a RecordDao stateless java bean :
@Stateless public class RecordDao { private EntityManagerFactory emf; private EntityManager em; public RecordDao() { } @PostConstruct public void init() { emf = Persistence.createEntityManagerFactory("recordPU"); em = emf.createEntityManager(); System.out.println("RecordDao Initialized."); } @PreDestroy public void release() { em.close(); emf.close(); } public void storeRecord(Record r) { em.getTransaction().begin(); em.persist(r); em.getTransaction().commit(); System.out.println("Entity persisted"); } }
Persistence unit looks like this :
<persistence-unit name="recordPU" transaction-type="JTA"> <provider>com.objectdb.jpa.Provider</provider> <properties> <property name="javax.persistence.jdbc.url" value="$objectdb/db/recs.odb"/> <property name="javax.persistence.jdbc.user" value="admin"/> <property name="javax.persistence.jdbc.password" value="admin"/> </properties> </persistence-unit>
From other beans I need concurrent access to the database in order to persist records.
For example :
@EJB RecordDao recordDao; recordDao.storeRecord(updatedRecord);
or
recordDao.storeRecord(newRecord);
Other concurrent operations that I execute is to retrieve records from database using :
Record r = em.find(Record.class, recordNo);
The issue (error is obtained at line em.persist(r); in storeRecord(Record r) function, RecordDAO class)
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: com.objectdb.o._PersistenceException: Attempt to begin a new transaction when a transaction is active
root cause
com.objectdb.o._PersistenceException: Attempt to begin a new transaction when a transaction is active
root cause
com.objectdb.o.UserException: Attempt to begin a new transaction when a transaction is active
I don't know why am I getting this..
Thank you very much!