Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Eclipse Projects » EclipseLink » COMMIT is not allowed in a subordinate session
COMMIT is not allowed in a subordinate session [message #529214] Fri, 23 April 2010 13:23 Go to next message
njrfrens  is currently offline njrfrens
Messages: 2
Registered: April 2010
Junior Member
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
Re: COMMIT is not allowed in a subordinate session [message #529621 is a reply to message #529214] Mon, 26 April 2010 14:50 Go to previous message
James Sutherland is currently offline James Sutherland
Messages: 1939
Registered: July 2009
Location: Ottawa, Canada
Senior Member

The issue is probably related to you acquiring your EntityManager outside of the JTA transaction. Unless you use a managed (injected) EntityManager, it will be bound to only the JTA transaction that it was acquired in. You can use joinTransaction() to join a new JTA transaction.

So either move your initEM after the begin, or call joinTransaction, or inject the EM.

See,
http://en.wikibooks.org/wiki/Java_Persistence/Transactions#J oin_Transaction


James : Wiki : Book : Blog : Twitter
Previous Topic:Reading entity beans from Glassfish too slow
Next Topic:Persistence.xml problem
Goto Forum:
  


Current Time: Thu Oct 23 20:11:52 GMT 2014

Powered by FUDForum. Page generated in 0.01726 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software