This discussion is archived
5 Replies Latest reply: Jan 8, 2013 8:12 AM by 983545 RSS

TransactionRolledbackLocalException using EJBs with Glassfish

983545 Newbie
Currently Being Moderated
I've got a problem on an application developed using Glassfish 3.1.2 + JPA + EclipseLink + MySQL, Immediately after i deploy the application (No tables on DB) it runs just fine and apparently executes the only query (Count entities in table) that i entered.
But if i reload the page, calling the servlet again causes an exception to be thrown:
TransactionRolledbackLocalException

Apparently on the same method used to count entities.

Then if i reload again, it runs just fine, then again exception, fine, exception and so on...

This is my servlet:

-----
@WebServlet(name="Controller", urlPatterns={"/Controller"})
public class Controller extends HttpServlet {
     private static final long serialVersionUID = 1L;

     @EJB WineDao _wines;

     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          
          _wines.countWines();
          
          RequestDispatcher view = request.getRequestDispatcher("ShowAll.jsp");
          view.forward(request, response);
     }
}
-----

This is WineDao:

-----
@Stateless
public class WineDao {
     @PersistenceContext private EntityManager em;
     
     public Long countWines() {
          CriteriaBuilder qb = em.getCriteriaBuilder();
          CriteriaQuery<Long> cq = qb.createQuery(Long.class);
          cq.select(qb.count(cq.from(Wine.class)));
          return em.createQuery(cq).getSingleResult();
     }

}
-----

persistence.xml:

-----
<?xml version="1.0" encoding="UTF-8"?>
     <persistence version="2.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_2_0.xsd">
     <persistence-unit name="myPU" transaction-type="JTA">
          <jta-data-source>jdbc/MySQLDataSource</jta-data-source>
          <properties>
               <!-- drop and create tables at deployment -->
     <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
     <!-- log sqls executed in server.log -->
     <property name="eclipselink.logging.level" value="FINE"/>
     <!-- Instruct EclipseLink to not log execeptions it throws. Lets the application decide about it-->
     <property name="eclipselink.logging.exceptions" value="true"/>
</properties>
     </persistence-unit>
</persistence>
-----

And finally the server log, when i get no errors:

-----
[#|2013-01-07T18:32:27.271+0100|FINE|glassfish3.1.2|org.eclipse.persistence.session.file:/opt/glassfish/glassfish/domains/domain1/applications/appname/WEB-INF/classes/_myPU.sql|_ThreadID=21;_ThreadName=Thread-2;ClassName=null;MethodName=null;|SELECT COUNT(ID) FROM Wine|#]
-----

And when i get the error:

-----
[#|2013-01-07T18:32:29.582+0100|WARNING|glassfish3.1.2|javax.enterprise.system.container.ejb.com.sun.ejb.containers|_ThreadID=20;_ThreadName=Thread-2;|EJB5184:A system exception occurred during an invocation on EJB WineDao, method: public java.lang.Long it.vitux.java.appname.dao.WineDao.countWines()|#]

[#|2013-01-07T18:32:29.583+0100|WARNING|glassfish3.1.2|javax.enterprise.system.container.ejb.com.sun.ejb.containers|_ThreadID=20;_ThreadName=Thread-2;|javax.ejb.TransactionRolledbackLocalException: Client's transaction aborted
     at com.sun.ejb.containers.BaseContainer.useClientTx(BaseContainer.java:4722)
     at com.sun.ejb.containers.BaseContainer.preInvokeTx(BaseContainer.java:4601)
     at com.sun.ejb.containers.BaseContainer.preInvoke(BaseContainer.java:1914)
     at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:212)
     at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88)
     at $Proxy516.countWines(Unknown Source)
     at it.vitux.java.appname.dao.__EJB31_Generated__WineDao__Intf____Bean__.countWines(Unknown Source)
     at it.vitux.java.appname.controllers.Controller.doGet(Controller.java:43)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
     at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1542)
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
     at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
     at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
     at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
     at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
     at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:849)
     at com.sun.grizzly.http.ajp.AjpProcessorTask.invokeAdapter(AjpProcessorTask.java:125)
     at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:746)
     at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1045)
     at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:228)
     at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
     at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
     at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
     at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
     at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
     at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
     at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
     at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
     at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
     at java.lang.Thread.run(Thread.java:679)
|#]

[#|2013-01-07T18:32:29.591+0100|WARNING|glassfish3.1.2|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=20;_ThreadName=Thread-2;|StandardWrapperValve[Controller]: PWC1406: Servlet.service() for servlet Controller threw exception
javax.ejb.EJBTransactionRolledbackException
     at com.sun.ejb.containers.BaseContainer.mapLocal3xException(BaseContainer.java:2314)
     at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2096)
     at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1994)
     at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:222)
     at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:88)
     at $Proxy516.countWines(Unknown Source)
     at it.vitux.java.appname.dao.__EJB31_Generated__WineDao__Intf____Bean__.countWines(Unknown Source)
     at it.vitux.java.appname.controllers.Controller.doGet(Controller.java:43)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
     at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1542)
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
     at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
     at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
     at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
     at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
     at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
     at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:849)
     at com.sun.grizzly.http.ajp.AjpProcessorTask.invokeAdapter(AjpProcessorTask.java:125)
     at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:746)
     at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1045)
     at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:228)
     at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
     at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
     at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
     at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
     at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
     at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
     at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
     at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
     at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
     at java.lang.Thread.run(Thread.java:679)
Caused by: javax.ejb.TransactionRolledbackLocalException: Client's transaction aborted
     at com.sun.ejb.containers.BaseContainer.useClientTx(BaseContainer.java:4722)
     at com.sun.ejb.containers.BaseContainer.preInvokeTx(BaseContainer.java:4601)
     at com.sun.ejb.containers.BaseContainer.preInvoke(BaseContainer.java:1914)
     at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:212)
     ... 31 more
|#]
-----

Forgot the Wine class:

-----
@Entity
public class Wine {
     public static final int UP_ADDED = 0;
     public static final int UP_REMOVED = 1;
     public static final int UP_PRICE = 2;
     public static final int UP_OFFER = 3;
     
     @Id Long id;
     private String name;
     private BigDecimal price;
     private BigDecimal offer;
     @Temporal(TemporalType.TIMESTAMP)
     private Date updateTime;
     private int updateStatus = 0;
     
     // Getters + Setters
}
-----

What's causing the transaction to roll back?

Edited by: 980542 on 8-gen-2013 6.01

Legend

  • Correct Answers - 10 points
  • Helpful Answers - 5 points