JBoss崩溃:数据源无法重用连接

时间:2014-02-28 15:29:45

标签: java hibernate jboss connection-pooling

我们在TOMCAT 5.25.26应用服务器上有JBOSS 4.0.3.SP1。

通常它工作正常,但大约每月一次我们有“No ManagedConnections available”

Caused by: org.jboss.util.NestedSQLException: No ManagedConnections available within configured blocking timeout ( 5000 [ms] ); - nested throwable: (javax.resource.ResourceException: No ManagedConnections available within configured blocking timeout ( 5000 [ms] ))
        at org.jboss.resource.adapter.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:79)
    at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:82)
    at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:423)
    ... 73 more
Caused by: javax.resource.ResourceException: No ManagedConnections available within configured blocking timeout ( 5000 [ms] )
    at org.jboss.resource.connectionmanager.InternalManagedConnectionPool.getConnection(InternalManagedConnectionPool.java:246)
    at org.jboss.resource.connectionmanager.JBossManagedConnectionPool$BasePool.getConnection(JBossManagedConnectionPool.java:529)
    at org.jboss.resource.connectionmanager.BaseConnectionManager2.getManagedConnection(BaseConnectionManager2.java:410)
    at org.jboss.resource.connectionmanager.TxConnectionManager.getManagedConnection(TxConnectionManager.java:342)
    at org.jboss.resource.connectionmanager.BaseConnectionManager2.allocateConnection(BaseConnectionManager2.java:462)
    at org.jboss.resource.connectionmanager.BaseConnectionManager2$ConnectionManagerProxy.allocateConnection(BaseConnectionManager2.java:894)
    at org.jboss.resource.adapter.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:73)

当我查看oracle会话表时,我可以看到,所有100个可用连接都是INACTIVE,最后一个sql是我们用来检查连接的那个(select sysdate from dual)。

连接池无法重用它们为什么会发生这种情况?

我们在oracle-ds.xml中定义了JNDI数据源,如下所示:

<datasources>
  <local-tx-datasource>
    <jndi-name>ROT</jndi-name>
    <connection-url>jdbc:oracle:thin:@ttt.tt.tt:1521:usr</connection-url>
        <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
        <user-name>usr</user-name>
        <password>usrpass</password>
        <min-pool-size>5</min-pool-size>
        <max-pool-size>100</max-pool-size>
        <idle-timeout-minutes>10</idle-timeout-minutes>
        <track-statements>true</track-statements>
        <blocking-timeout-millis>5000</blocking-timeout-millis>
    <!-- Uses the pingDatabase method to check a connection is still valid before handing it out from the pool -->
        <check-valid-connection-sql>select sysdate from dual</check-valid-connection-sql>

      <metadata>
         <type-mapping>Oracle9i</type-mapping>
      </metadata>
  </local-tx-datasource>

</datasources>

这是数据源的hibernate配置:

<bean id="rotSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.OracleDialec</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">false</prop>
            <prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
            <prop key="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</prop>
            <prop key="hibernate.jdbc.batch_size">20</prop>
            <prop key="hibernate.connection.release_mode">after_statement</prop>

            <prop key="hibernate.c3p0.min_size">5</prop>
            <prop key="hibernate.c3p0.max_size">20</prop>
            <prop key="hibernate.c3p0.timeout">300</prop>
            <prop key="hibernate.c3p0.max_statements">50</prop>
            <prop key="hibernate.c3p0.idle_test_period">3000</prop>
        </props>
    </property>
    <property name="dataSource" ref="dataSource"/>

hibernate中的数据源:     
                  

0 个答案:

没有答案