我的 java 应用程序部署在 jboss AS 7 中,使用 spring 数据查询 MS SQL 服务器数据库。我还需要在使用 Spring JdbcTemplate 的 zOS 上调用 DB2 函数。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 函数,它返回序列号的下一个值。