Мое Java-приложение, развернутое в jboss AS 7, запрашивает базу данных сервера MS SQL, используя данные Spring. Мне также нужно вызвать функцию DB2 в zOS, для которой я использую 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, которая возвращает следующее значение для порядкового номера.