【问题标题】:Does session timeout also kill datasource connection?会话超时是否也会终止数据源连接?
【发布时间】:2015-11-09 09:03:59
【问题描述】:

我有一个 java servlet 应用程序,在 web.xml 中会话超时设置为 35 分钟。但是有时应用程序会失败并出现以下错误:

java.sql.SQLException: ORA-00028: your session has been killed

同样在web.xml中,数据源设置如下:

<resource-ref>
     <res-ref-name>jdbc/RemittancePDFMappedDS</res-ref-name>
     <res-type>javax.sql.DataSource</res-type>
     <res-auth>Container</res-auth>
</resource-ref>   

DBA 已确认他们没有杀死任何东西。这是一个多线程应用程序,但是没有任何连接被编程终止。我的问题是:当应用程序在 35 分钟后超时时,这是否也会使数据源失效?为了解决这个问题,我们通常只是重新启动,它会正常工作一段时间,直到再次出现同样的错误。

【问题讨论】:

  • HTTP 会话与 DB 会话不同。您的问题是在其他地方引起的(可能是客户端的数据库会话超时太高?)

标签: java servlets datasource web.xml


【解决方案1】:

应该不相关。 SQL异常是由于提供的信息无法确定的另一个原因造成的。

但是,您可以使用jndi-resources 的功能来解决这个问题。检查您是否使用validationQuerytestOnBorrow 属性配置了数据源。

这样,您的连接池可以检查连接是否已关闭,然后重新打开它。由于您使用的是 Oracle DB,您可以使用此通用验证查询:

SELECT 1 FROM DUAL;

这不会解决导致数据库会话终止的问题,但它会根据需要重新连接。

【讨论】:

    猜你喜欢
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 2021-02-25
    相关资源
    最近更新 更多