javax.ejb.TransactionRolledbackLocalException(Glassfish 3 + JPA + EclipseLink) [英] javax.ejb.TransactionRolledbackLocalException (Glassfish 3 + JPA + EclipseLink)

查看:125
本文介绍了javax.ejb.TransactionRolledbackLocalException(Glassfish 3 + JPA + EclipseLink)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在使用Glassfish 3.1.2 + JPA + EclipseLink + MySQL开发的应用程序上遇到问题,在我部署应用程序(数据库上没有表格)之后,它运行得很好并且显然执行唯一的查询(Count实体)在表中)我进入了。
但是如果我重新加载页面,再次调用servlet会导致抛出异常:
TransactionRolledbackLocalException

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...

这是我的servlet:

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);
    }
} 

这是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:

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|#]

当我收到错误时:

[#|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
|#]

忘记Wine类:

@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
}


推荐答案

我终于找到了一个解决方案:重新启动glassfish域 -.-在一天尝试后这是奇怪的。

I finally found a solution: restarting glassfish domain -.- that's odd after a day of tries.

这篇关于javax.ejb.TransactionRolledbackLocalException(Glassfish 3 + JPA + EclipseLink)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆