使用jdbcTemplate在zOS上调用DB2函数时控制台中的警告消息

时间:2013-01-27 04:13:25

标签: spring db2 jboss7.x jdbctemplate db2-connect

我在jboss AS 7中部署的Java应用程序使用spring数据查询MS SQL服务器数据库。我还需要在zOS上调用DB2函数,我使用Spring JdbcTemplate。 SQL是:

public String getUniqueId()
{
    String sql = "SELECT " + schemaName + ".SGB_LON_ID_NEXT() FROM SYSIBM.SYSDUMMY1" ;
    return (jdbcTemplate.queryForLong(sql));
}

Eclipse中的单元测试工作正常。 当我在jboss服务器中部署时,第一个调用工作。 但是,从第二个事务开始,调用本身有效,但每次调用的server.log中都会出现一些警告。

我想知道JDBC调用是否不是JPA事务的一部分。 (请注意,jdbc调用很简单 - DB2函数只返回字段的下一个序列号)

以下是来自错误堆栈的警告消息:

        21:50:33,955 WARN  [org.jboss.jca.adapters.jdbc.local.LocalManagedConnectionFactory] (http-/127.0.0.1:8080-14) 
        Destroying connection that is not valid, due to the following exception: com.ibm.db2.jcc.t4.b@1167bd5: com.ibm.db2.jcc.am.SqlSyntaxErrorException: 
        DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=<END-OF-STATEMENT>;MICROSECONDS MICROSECOND SECONDS SECOND MINUTES MIN, DRIVER=3.63.123


        21:50:34,096 WARN  [org.jboss.jca.core.connectionmanager.listener.TxConnectionListener] (http-/127.0.0.1:8080-14) 
        IJ000305: Connection error occured:org.jboss.jca.core.connectionmanager.listener.TxConnectionListener@f79f0f[state=NORMAL managed connection=org.jboss.jca.adapters.jdbc.local.LocalManagedConnection@136e43e connection handles=0 lastUse=1359255001136 trackByTx=false 
        pool=org.jboss.jca.core.connectionmanager.pool.strategy.PoolByCri@c2c2de pool internal context=SemaphoreArrayListManagedConnectionPool@8793c7[pool=DB2_zOS_DS] 
        xaResource=LocalXAResourceImpl@f70194[connectionListener=f79f0f connectionManager=112dadb warned=false currentXid=null] txSync=null]: 
        com.ibm.db2.jcc.am.SqlSyntaxErrorException: 
        DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=<END-OF-STATEMENT>;MICROSECONDS MICROSECOND SECONDS SECOND MINUTES MIN, DRIVER=3.63.123


        21:50:34,196 WARN  [org.jboss.jca.core.connectionmanager.pool.strategy.PoolByCri] (http-/127.0.0.1:8080-14) 
        IJ000612: Destroying connection that could not be successfully matched: org.jboss.jca.core.connectionmanager.listener.TxConnectionListener@f79f0f[state=DESTROYED managed connection=
        org.jboss.jca.adapters.jdbc.local.LocalManagedConnection@136e43e connection handles=0 lastUse=1359255001136 trackByTx=false 
        pool=org.jboss.jca.core.connectionmanager.pool.strategy.PoolByCri@c2c2de pool internal context=SemaphoreArrayListManagedConnectionPool@8793c7[pool=DB2_zOS_DS] 
        xaResource=LocalXAResourceImpl@f70194[connectionListener=f79f0f connectionManager=112dadb warned=false currentXid=null] txSync=null]

有关如何修复的任何建议? 我不清楚如何将JDBC调用添加到当前事务(JPA)。或者它应该是一个单独的交易。如前所述,jdbc调用是一个db2函数,它返回序列号的下一个值。

1 个答案:

答案 0 :(得分:0)

问题原来是我在JBOSS_HOME / standalone / configuration / standalone.xml中的数据源设置。

在验证部分,我有这个不正确。

<validation>
    <check-valid-connection-sql>select 1</check-valid-connection-sql>
<validation>

以上内容不正确,DB2发出了验证错误。

我将其更改为以下内容:

      <validation>
          <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.db2.DB2ValidConnectionChecker"/>
          <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.db2.DB2StaleConnectionChecker"/>
          <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.db2.DB2ExceptionSorter"/>
      </validation>

以下是完整的数据源设置,以防其他任何人发现它有用。

    <datasource jndi-name="java:jboss/datasources/DB2_zOS_DS" pool-name="DB2_zOS_DS" enabled="true" use-java-context="true">
      <connection-url>jdbc:db2://MyHostName:MyPortNo/MyDBQA1:currentSchema=MySchemaQA1;</connection-url>
      <driver>db2zOS</driver>
      <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
      <pool>
          <min-pool-size>9</min-pool-size>
          <max-pool-size>50</max-pool-size>
          <prefill>true</prefill>
          <allow-multiple-users/>
      </pool>
      <security>
          <user-name>MY-APP-ID</user-name>
          <password>My-APP-ID-PASSWORD</password>
      </security>
      <validation>
          <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.db2.DB2ValidConnectionChecker"/>
          <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.db2.DB2StaleConnectionChecker"/>
          <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.db2.DB2ExceptionSorter"/>
      </validation>
      <timeout>
          <set-tx-query-timeout>true</set-tx-query-timeout>
          <blocking-timeout-millis>500</blocking-timeout-millis>
          <idle-timeout-minutes>15</idle-timeout-minutes>
      </timeout>
      <statement>
          <track-statements>false</track-statements>
          <prepared-statement-cache-size>32</prepared-statement-cache-size>
          <share-prepared-statements>true</share-prepared-statements>
      </statement>
    </datasource>
    <drivers>
      <driver name="db2zOS" module="com.ibm.db2">
          <driver-class>com.ibm.db2.jcc.DB2Driver</driver-class>
      </driver>
    </drivers>