Java 如果JPA查询耗时过长,则关闭db会话

Java 如果JPA查询耗时过长,则关闭db会话,java,oracle,jpa,eclipselink,Java,Oracle,Jpa,Eclipselink,我们正在glassfish v3.0.1上运行的应用程序中使用JPA将实体持久化并合并到Oracle 11g数据库中 我们一直试图在查询完成或提交时间过长时关闭会话。但该会话仍在数据库中打开 这是执行查询并尝试关闭所有内容的线程 private class PRunnable implements Runnable { MyEntity myEntity; public PRunnable(MyEntity myEntity) { this.myEntity

我们正在glassfish v3.0.1上运行的应用程序中使用JPA将实体持久化并合并到Oracle 11g数据库中

我们一直试图在查询完成或提交时间过长时关闭会话。但该会话仍在数据库中打开

这是执行查询并尝试关闭所有内容的线程

private class PRunnable implements Runnable {

    MyEntity myEntity;

    public PRunnable(MyEntity myEntity) {
        this.myEntity = myEntity;
    }

    @Override
    public void run() {

        final EntityManager em = factory.createEntityManager();
        em.getTransaction().begin();

        Runnable r = new Runnable() {

            @Override
            public void run() {

                try {

                    //It can get stuck in the merge or committing
                    em.merge(myEntity);
                    em.flush();

                    em.getTransaction().commit();

                } catch (Exception e) {

                    em.getTransaction().rollback();
                } finally {

                    em.clear();
                    em.close();
                }
            }
        };
        Thread t = new Thread(r);

        t.start();
        try {
            t.join(500);
        } catch (Exception e) {
            //It's never getting here
        }

        if (t.isAlive()) {
            //If the query takes to long it successfully closes the em
            em.clear();
            em.close();
        }
    }
}
我们还尝试: (em.unwrap(JpaEntityManager.class).getServerSession()).disconnect(); (em.unwrap(java.sql.Connection.class)).close()

但是db会话始终处于活动状态


您知道如何成功关闭数据库上的会话吗?

在JPA 1中,您应该在
数据源
配置中指定连接超时


在JPA2(您正在使用的)中有一个标准属性:
javax.persistence.query.timeout

您好,谢谢您的回答。我试过:
eclipseelink.jdbc.timeout
javax.persistence.query.timeout
javax.persistence.lock.timeout
,但这些似乎都不起作用。我还有别的地方可以试试吗?@olgadg发生了什么事?查询只是继续而没有超时?我错了,时间是秒,不是毫秒。成功了。非常感谢。