我有一個部署在Tomcat 5.5容器中的Web應用程序。我使用了一個在數據庫中記錄一些活動的SessionEventListener
bean。有時候,我得到這個錯誤信息:StandardXAConnectionHandle:prepareStatement不應該在EJBServer之外使用
java.sql.SQLException: StandardXAConnectionHandle:prepareStatement should not be used outside an EJBServer
at org.enhydra.jdbc.standard.StandardXAConnectionHandle.prepareStatement(StandardXAConnectionHandle.java:310)
at org.enhydra.jdbc.standard.StandardXAConnectionHandle.prepareStatement(StandardXAConnectionHandle.java:255)
at org.springframework.jdbc.core.PreparedStatementCreatorFactory$PreparedStatementCreatorImpl.createPreparedStatement(PreparedStatementCreatorFactory.java:233)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:532)
at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:739)
at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:762)
at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.update(NamedParameterJdbcTemplate.java:213)
at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.update(NamedParameterJdbcTemplate.java:217)
at hu.rate.session.RateDBSessionRegistry$4.doInTransactionWithoutResult(RateDBSessionRegistry.java:124)
at org.springframework.transaction.support.TransactionCallbackWithoutResult.doInTransaction(TransactionCallbackWithoutResult.java:33)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:127)
at hu.rate.session.RateDBSessionRegistry.refreshLastRequest(RateDBSessionRegistry.java:120)
失敗的代碼如下:
txTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
public void doInTransactionWithoutResult(
TransactionStatus paramTransactionStatus) {
if(template.update(us, paramMap) == 0) {
logger.warn("No session in registry to be refreshed, sessionId = " + sessionId);
}
}
});
public void setTxManager(PlatformTransactionManager txManager) {
txTemplate = new TransactionTemplate(txManager);
}
我的Spring bean的配置是這樣的:
<bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean" />
<bean id="txManager"
class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="userTransaction">
<ref local="jotm" />
</property>
</bean>
我真的不明白這一點問題,你能解釋我什麼是錯的,以及如何解決它?
今天再次出現同樣的問題。現在開始賞金,看看有人能幫助我。 – jabal
您能否啓用調試日誌級別並查看它在StandardXAConnectionHandle中的走向有多遠?當你使用JDBC時,你自己是在破壞事務還是在某處處理連接?這可能會干擾交易和連接如何與JTA進行管理 - 實質上,JTA不應該處理這些問題。也許連接已經關閉,tx提交了,或者我不知道是什麼,這可能會產生時間相關的錯誤。 – ewernli