Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
RE: [eclipselink-users] COMMIT is not allowed in a subordinate session [message #529214]

Looks like you are joining a preexisting transaction. I have not used it but I feel there would be a way to start a fresh transaction in EL.
________________________________________
From: eclipselink-users-bounces@xxxxxxxxxxx [eclipselink-users-bounces@xxxxxxxxxxx] On Behalf Of janardhan n [njrfrens@xxxxxxxxx]
Sent: Sunday, April 25, 2010 1:35 PM
To: eclipselink-users@xxxxxxxxxxx
Subject: [eclipselink-users] COMMIT is not allowed in a subordinate session     [message #529214]

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





Back to the top