我有一个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分钟后超时时,这是否也使数据源无效?要解决此问题,我们通常只需重新启动它,它会正常工作一段时间,直到再次出现相同的错误。
答案 0 :(得分:0)
它不应该相关。 SQL异常是由于无法使用提供的信息确定的另一个原因引起的。
但是,您可以使用jndi-resources
的功能来管理该问题。使用validationQuery
和testOnBorrow
属性检查您是否配置了数据源。
这样,您的连接池可以检查连接是否已关闭,然后重新打开它。由于您使用的是Oracle DB,因此可以使用此通用验证查询:
SELECT 1 FROM DUAL;
这不会解决导致数据库会话终止的问题,但会根据需要重新连接。