java - 超时后如何重新建立 JDBC 连接?

标签 java oracle jdbc toplink-essentials

我有一个长时间运行的方法,它通过 EntityManager (TopLink Essentials) 执行大量 native SQL 查询。每个查询只需要几毫秒即可运行,但查询数量却有数千个。这发生在单个 EJB 事务内。 15 分钟后,数据库关闭连接,导致以下错误:

Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.1 (Build b02-p04 (04/12/2010))): oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Closed Connection
Error Code: 17008
Call: select ...
Query: DataReadQuery()
at oracle.toplink.essentials.exceptions.DatabaseException.sqlException(DatabaseException.java:319)
.
.
.
RAR5031:System Exception.
javax.resource.ResourceException: This Managed Connection is not valid as the phyiscal connection is not usable
at com.sun.gjc.spi.ManagedConnection.checkIfValid(ManagedConnection.java:612)

在 JDBC 连接池中,我设置了 is-connection-validation-required="true"connection-validation-method="table" 但这没有帮助.

我认为 JDBC 连接验证就是为了处理这种错误。我还查看了 TopLink 扩展 (http://www.oracle.com/technetwork/middleware/ias/toplink-jpa-extensions-094393.html) 的某种超时设置,但什么也没找到。还有 TopLink session 配置文件(http://download.oracle.com/docs/cd/B14099_19/web.1012/b15901/sessions003.htm),但我认为那里也没有任何有用的东西。

我无权访问 Oracle DBA 表,但我认为 Oracle 会根据 CONNECT_TIME 配置文件变量中的设置在 15 分钟后关闭连接。

是否有其他方法可以使 TopLink 或 JDBC 池重新建立已关闭的连接?

数据库为Oracle 10g,应用服务器为Sun Glassfish 2.1.1。

最佳答案

所有 JPA 实现(在 Java EE 容器上运行)都使用具有关联连接池的数据源来管理与数据库的连接。

持久化上下文本身通过persistence.xml中的适当条目与数据源关联。如果您希望更改客户端的连接超时设置,则必须重新配置关联的连接池。

在 Glassfish 中,可以通过编辑池设置来重新配置与连接池关联的超时设置,如以下链接中所列:

在服务器端(其设置如果低于客户端设置,则更为重要),Oracle 数据库可以配置为具有与用户帐户关联的数据库配置文件。 session idle_time and connect_time parameters of a profile将构成客户端-服务器交互的这方面的重要超时设置。如果未设置配置文件,则默认情况下,超时时间是无限制的。

关于java - 超时后如何重新建立 JDBC 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6152643/

相关文章:

oracle - 使用XMLTABLE和xquery从xml中提取数据

java - 任何人都可以帮助我将我的应用程序连接到 Access

java - 使用 iText 创建有角度的列标题

python array to sql in 子句

sql - Oracle SQL 何时使用完整提示

mysql - 哪些特殊情况不应关闭语句?

mysql - Matlab中使用jdbc连接Mysql时附加dbname的Charset字符串

java - 使用 onOptionsItemSelected 从带有 PreferenceFragments 的 PreferenceActivity 上升

java - AS400 Java Java 程序已完成,退出代码为 1

java - 根据事件计算进度百分比