users@glassfish.java.net

Re: TransactionRolledbackLocalException using JPA And Glassfish 3.1.2

From: Marina Vatkina <marina.vatkina_at_oracle.com>
Date: Tue, 08 Jan 2013 16:41:10 -0800

How do you manage transactions in your servlet? The exceptions say that
you are trying (over and over again) to invoke an EJB in a transaction
that was marked for rollback.

-marina

On 1/8/13 6:11 AM, forums_at_java.net wrote:
> 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 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"?> jdbc/MySQLDataSource 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?
>
> --
>
> [Message sent by forum member 'oslinux']
>
> View Post: http://forums.java.net/node/893688
>
>