WebアプリケーションがTomcat 5.5コンテナにデプロイされています。私はSessionEventListener
のBeanを使用して、データベースにいくつかのアクティビティを記録します。以下れるに失敗したStandardXAConnectionHandle:EJBServerの外でprepareStatementを使用しないでください
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)
コード::私のSpring Beanの設定は次のようになります
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);
}
:
<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