【问题标题】:When the conection to the Oracle DB is dropped, PooledConnection has already been closed is printed continuously当与 Oracle DB 的连接断开时,会连续打印 PooledConnection has already been closed
【发布时间】:2018-05-09 00:09:21
【问题描述】:

我已经安装了 wso2esb-4.9.0 并且主数据源被配置为一个 oracle 数据库。当与 Oracle 数据库的连接由于网络连接问题而中断时,即使连接再次恢复,也会不断打印以下错误。只有在重新启动后异常才会停止。

TID:[-1234] [] [2016-05-16 00:53:21,457] 错误 {org.wso2.carbon.registry.core.utils.RegistryUtils} - 无法构造 connectionId。 {org.wso2.carbon.registry.core.utils.RegistryUtils} java.sql.SQLRecoverableException:关闭连接 在 oracle.jdbc.driver.PhysicalConnection.getMetaData(PhysicalConnection.java:3131) 在 sun.reflect.GeneratedMethodAccessor28.invoke(未知来源) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:606) 在 org.apache.tomcat.jdbc.pool.ProxyConnection.invoke(ProxyConnection.java:126) 在 org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:109) 在 org.wso2.carbon.ndatasource.rdbms.ConnectionRollbackOnReturnInterceptor.invoke(ConnectionRollbackOnReturnInterceptor.java:51) 在 org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:109) 在 org.apache.tomcat.jdbc.pool.interceptor.AbstractCreateStatementInterceptor.invoke(AbstractCreateStatementInterceptor.java:71) 在 org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:109) 在 org.apache.tomcat.jdbc.pool.interceptor.ConnectionState.invoke(ConnectionState.java:153) 在 org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:109) 在 org.apache.tomcat.jdbc.pool.TrapException.invoke(TrapException.java:41) 在 org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:109) 在 org.apache.tomcat.jdbc.pool.DisposableConnectionFacade.invoke(DisposableConnectionFacade.java:80) 在 com.sun.proxy.$Proxy14.getMetaData(未知来源) 在 org.wso2.carbon.registry.core.utils.RegistryUtils.getConnectionId(RegistryUtils.java:194) 在 org.wso2.carbon.registry.core.jdbc.dataaccess.JDBCDatabaseTransaction$ManagedRegistryConnection.getConnectionId(JDBCDatabaseTransaction.java:1133) 在 org.wso2.carbon.registry.core.jdbc.dataaccess.JDBCDatabaseTransaction$ManagedRegistryConnection.rollback(JDBCDatabaseTransaction.java:1288) 在 org.wso2.carbon.registry.core.jdbc.dataaccess.JDBCTransactionManager.rollbackTransaction(JDBCTransactionManager.java:120) 在 org.wso2.carbon.registry.core.jdbc.dao.JDBCLogsDAO.rollbackTransaction(JDBCLogsDAO.java:335) 在 org.wso2.carbon.registry.core.jdbc.dao.JDBCLogsDAO.getLogList(JDBCLogsDAO.java:306) 在 org.wso2.carbon.registry.core.jdbc.EmbeddedRegistry.getLogs(EmbeddedRegistry.java:2332) 在 org.wso2.carbon.registry.core.caching.CacheBackedRegistry.getLogs(CacheBackedRegistry.java:402) 在 org.wso2.carbon.registry.core.session.UserRegistry.getLogsInternal(UserRegistry.java:1806) 在 org.wso2.carbon.registry.core.session.UserRegistry.access$3600(UserRegistry.java:60) 在 org.wso2.carbon.registry.core.session.UserRegistry$37.run(UserRegistry.java:1777) 在 org.wso2.carbon.registry.core.session.UserRegistry$37.run(UserRegistry.java:1774) 在 java.security.AccessController.doPrivileged(本机方法) 在 org.wso2.carbon.registry.core.session.UserRegistry.getLogs(UserRegistry.java:1774) 在 org.wso2.carbon.registry.indexing.ResourceSubmitter.submitResource(ResourceSubmitter.java:119) 在 org.wso2.carbon.registry.indexing.ResourceSubmitter.run(ResourceSubmitter.java:76) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 在 java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304) 在 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178) 在 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 java.lang.Thread.run(Thread.java:745)

master-datasources.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?><datasources-configuration xmlns:svns="http://org.wso2.securevault/configuration">

<providers>
    <provider>org.wso2.carbon.ndatasource.rdbms.RDBMSDataSourceReader</provider>
</providers>

<datasources>

    <datasource>
        <name>WSO2_CARBON_DB</name>
        <description>The datasource used for registry and user manager</description>
        <jndiConfig>
            <name>jdbc/WSO2CarbonDB</name>
        </jndiConfig>
        <definition type="RDBMS">
            <configuration>
                <url>jdbc:oracle:thin:@xxx.xx.x.xxx:1528/dvdb</url>
        <username>esbuser</username>
                <password svns:secretAlias="Datasources.WSO2_CARBON_DB.Configuration.Password">password</password>
                <driverClassName>oracle.jdbc.driver.OracleDriver</driverClassName>
                <maxActive>80</maxActive>
                <maxWait>60000</maxWait>
                <minIdle>5</minIdle>
                <testOnBorrow>true</testOnBorrow>
                <validationQuery>SELECT 1 FROM DUAL</validationQuery>
                <validationInterval>30000</validationInterval>
            </configuration>
        </definition>
    </datasource>
<datasource>
        <name>WSO2_REG_DB</name>
        <description>The datasource used for registry and user manager</description>
        <jndiConfig>
            <name>jdbc/WSO2REG</name>
        </jndiConfig>
        <definition type="RDBMS">
            <configuration>
                <url>jdbc:oracle:thin:@xxx.xx.x.xxx:1528/dvdb</url>
                <username>reguser</username>
                <password svns:secretAlias="Datasources.WSO2_REG_DB.Configuration.Password">password</password>
                <driverClassName>oracle.jdbc.driver.OracleDriver</driverClassName>
                <maxActive>50</maxActive>
                <maxWait>60000</maxWait>
                <minIdle>5</minIdle>
                <validationQuery>SELECT 1 FROM DUAL</validationQuery>
                <testWhileIdle>true</testWhileIdle>
        <timeBetweenEvictionRunsMillis>1800000</timeBetweenEvictionRunsMillis>
        <numTestsPerEvictionRun>5</numTestsPerEvictionRun>
        <minEvictableIdleTimeMillis>3600000</minEvictableIdleTimeMillis>
            </configuration>
        </definition>
    </datasource>
    <!-- For an explanation of the properties, see: http://people.apache.org/~fhanik/jdbc-pool/jdbc-pool.html -->
    <!--datasource>
        <name>SAMPLE_DATA_SOURCE</name>
        <jndiConfig>
            <name></name>
            <environment>
                <property name="java.naming.factory.initial"></property>
                <property name="java.naming.provider.url"></property>
            </environment>
        </jndiConfig>
        <definition type="RDBMS">
            <configuration>

                <defaultAutoCommit></defaultAutoCommit>
                <defaultReadOnly></defaultReadOnly>
                <defaultTransactionIsolation>NONE|READ_COMMITTED|READ_UNCOMMITTED|REPEATABLE_READ|SERIALIZABLE</defaultTransactionIsolation>
                <defaultCatalog></defaultCatalog>
                <username></username>
                <password svns:secretAlias="WSO2.DB.Password"></password>
                <maxActive></maxActive>
                <maxIdle></maxIdle>
                <initialSize></initialSize>
                <maxWait></maxWait>

                <dataSourceClassName>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</dataSourceClassName>
                <dataSourceProps>
                    <property name="url">jdbc:mysql://localhost:3306/Test1</property>
                    <property name="user">root</property>
                    <property name="password">123</property>
                </dataSourceProps>

            </configuration>
        </definition>
    </datasource-->

</datasources>

repository/conf/registry.xml

<currentDBConfig>wso2registry</currentDBConfig>
<readOnly>false</readOnly>
<enableCache>true</enableCache>
<registryRoot>/</registryRoot>

<dbConfig name="wso2registry">
    <dataSource>jdbc/WSO2CarbonDB</dataSource>
</dbConfig>

<dbConfig name="remoteRegistry">
    <dataSource>jdbc/WSO2REG</dataSource>
</dbConfig>

<remoteInstance url="https://registryhost:9453/registry">
    <id>9453</id>
    <dbConfig>remoteRegistry</dbConfig>
    <readOnly>false</readOnly>
    <registryRoot>/</registryRoot>
</remoteInstance>

<mount path="/_system/config" overwrite="false">
    <instanceId>9453</instanceId>
    <targetPath>/_system/nodes</targetPath>
</mount>

<mount path="/_system/governance" overwrite="false">
    <instanceId>9453</instanceId>
    <targetPath>/_system/governance</targetPath>
</mount>

【问题讨论】:

    标签: wso2esb


    【解决方案1】:

    在我的情况下,问题是由文件 repository/config/registry.xml 中删除的错误行引起的。

    我删除了这段代码:

    <dbConfig name="wso2registry">
        <dataSource>jdbc/WSO2CarbonDB</dataSource>
    </dbConfig>
    

    而不是添加另一个 dbConfig 标记。

    对我来说,更正是重新添加该标签。像这样:

    <wso2registry>
    
    <!-- These are used to define the DB configuration and the basic parameters to be used for the registry -->
    
    <currentDBConfig>wso2registry</currentDBConfig>
    <readOnly>false</readOnly>
    <enableCache>true</enableCache>
    <registryRoot>/</registryRoot>
    
    <!-- This defines the default database and its configuration of the registry -->
    
    <dbConfig name="wso2registry">
        <dataSource>jdbc/WSO2CarbonDB</dataSource>
    </dbConfig>
    
    <dbConfig name="sharedregistry">
        <dataSource>jdbc/WSO2RegistryDB</dataSource>
    </dbConfig>
    ...
    ...
    </wso2registry>
    

    希望这篇文章对你有所帮助...

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题。

      在 master-datasources.xml 1-将数据源名称设置为与 jndiConfig 名称相同 2- 为注册表和用户管理设置 2 个不同名称的不同数据源。 这里是我的 master-datasources.xml

      <datasource>
              <name>WSO2REG_DB</name>
              <description>The datasource used for registry</description>
              <jndiConfig>
                  <name>jdbc/WSO2REG_DB</name>
              </jndiConfig>
              <definition type="RDBMS">
                  <configuration>
                      <url>jdbc:mysql://localhost:3306/registry?autoReconnect=true&amp;relaxAutoCommit=true&amp;</url>
                      <username>apiuser</username>
                      <password>apimanager</password>
                      <driverClassName>com.mysql.jdbc.Driver</driverClassName>
                      <maxActive>50</maxActive>
                      <maxWait>60000</maxWait>
                      <testOnBorrow>true</testOnBorrow>
                      <validationQuery>SELECT 1</validationQuery>
                      <validationInterval>30000</validationInterval>
                  </configuration>
              </definition>
          </datasource>
      
          <datasource>
              <name>WSO2UM_DB</name>
              <description>The datasource used for user management</description>
              <jndiConfig>
                  <name>jdbc/WSO2UM_DB</name>
              </jndiConfig>
              <definition type="RDBMS">
                  <configuration>
                      <url>jdbc:mysql://localhost:3306/userstore?autoReconnect=true&amp;relaxAutoCommit=true&amp;
                      </url>
                      <username>apiuser</username>
                      <password>apimanager</password>
                      <driverClassName>com.mysql.jdbc.Driver</driverClassName>
                      <maxActive>50</maxActive>
                      <maxWait>60000</maxWait>
                      <testOnBorrow>true</testOnBorrow>
                      <validationQuery>SELECT 1</validationQuery>
                      <validationInterval>30000</validationInterval>
                  </configuration>
              </definition>
          </datasource>
      

      在registry.xml中 1-使用用户管理数据源设置 wso2registry dbConfig 2- 使用注册表数据源设置 govregistry dbConfig

      这里是我的 registry.xml

      <dbConfig name="wso2registry">
          <dataSource>jdbc/WSO2UM_DB</dataSource>
      </dbConfig>
      
      <dbConfig name="govregistry">
          <dataSource>jdbc/WSO2REG_DB</dataSource>
      </dbConfig>
      

      它对我有用,我的 IS-Server 可以正常启动。当问题尚未解决时,希望它也对您有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-27
        • 2018-09-21
        • 2021-10-31
        • 2019-07-23
        • 2020-03-13
        • 2015-09-08
        • 2016-03-04
        相关资源
        最近更新 更多