我在jboss eap 6.3上部署了java应用程序,redhat 6连接到oracle 11g。 我正在使用这样的jdbc连接:
<datasource jta="true" jndi-name="java:/jdbc/myjdbc" pool-name="myConfigDS" enabled="true" use-java-context="true" use-ccm="false" statistics-enabled="true">
<connection-url>jdbc:oracle:thin:@(DESCRIPTION=(enable=broken)(ADDRESS=(PROTOCOL=TCP)(HOST=myhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=MYSERVICENAME)))</connection-url>
<connection-property name="oracle.net.CONNECT_TIMEOUT">10000</connection-property>
<driver>oracle</driver>
<pool>
<min-pool-size>1</min-pool-size>
<max-pool-size>30</max-pool-size>
<prefill>true</prefill>
</pool>
<security>
<user-name>myusername</user-name>
<password>mypassword</password>
</security>
<validation>
<check-valid-connection-sql>SELECT 1 FROM DUAL</check-valid-connection-sql>
<background-validation>true</background-validation>
<background-validation-millis>60000</background-validation-millis>
<stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker"/>
<exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"/>
</validation>
<timeout>
<blocking-timeout-millis>5000</blocking-timeout-millis>
<idle-timeout-minutes>15</idle-timeout-minutes>
</timeout>
</datasource>
如果该应用程序在几个小时内空闲并且我们尝试查询int数据库,则会发生数据库IO连接超时。
在我的调查中,我假设如果内部没有流量,网络防火墙会阻止此连接。 我的问题是如何处理网络防火墙?在jboss xml配置中是否有任何参数可以在jndi连接中添加?
答案 0 :(得分:0)
嗨@squallbayu不是100%确定这是否有帮助,而且您可能已经解决了问题但是根据我们的DBA enable=broken
只有在数据库服务器上启用DCD Dead Connection Detection
时才有效,我们的服务器是Oracle ODA。来自Oracle Dead Connection Detection的此PDF可能会帮助您或您的DBA进行设置,还有一个描述它的Oracle注释1641167.1
。
执行概览是:
死连接检测(DCD)是Oracle Net的一项功能,可帮助恢复为不再可用的连接分配的资源。 Oracle Database 12c中增强了DCD,大大缩短了检测时间,从大约15分钟缩短到2-3分钟。本文[PDF链接]概述了12c和12c之前的DCD机制,配置细节和12c机制的好处
简而言之,它基本上将SQLNET.EXPIRE_TIME设置为数据库SQLNET.ORA文件中的10分钟。