In My Servlet, I am using JTA transaction which is not a CMT.
I am running this on Oracle XADatasource.
When I'm trying to perform the DB operation, I'm getting the
Exception saying "COMMIT is not allowed in a subordinate session "
My Servlet code is :
public class BatchServlet extends javax.servlet.http.HttpServlet implements
javax.servlet.Servlet {
PrintWriter out = null;
@PersistenceUnit(unitName="PERUNIT")
EntityManagerFactory emf;
EntityManager em;
@Resource
UserTransaction utx;
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
out = response.getWriter();
try {
initEM();
utx.begin();
updateDB();
utx.commit();
} catch (Exception ex) {
ex.printStackTrace(out);
utx.rollback();
} finally {
closeEM();
}
}
public void initEM() throws Exception {
em = emf.createEntityManager();
}
public void closeEM() {
if (em != null) {
em.close();
}
}
private void updateDB() throws Exception {
Address address = em.find(Address.class, 50030L);
out.println("County :: " + address.getCounty());
address.setBuildingNumber("Building # ABC");
em.persist(address);
out.println("Before Flush");
em.flush();
out.println("After Flush");
}
public BatchServlet() {
super();
}
}
My Persistence.xml is
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="PERUNIT" transaction-type="JTA">
<provider> org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>MYXADS</jta-data-source>
<class> com.test.Address</class>
<properties>
<property name="eclipselink.logging.level" value="CONFIG"/>
<property name="javax.persistence.jtaDataSource" value="jdbc/MYXADS"/>
<property name="eclipselink.logging.level" value="FINE"/>
</properties>
</persistence-unit>
</persistence>
Any inputs please