웹 응용 프로그램을 Tomcat 5.5 컨테이너에 배포했습니다. 데이터베이스의 일부 활동을 기록하는 SessionEventListener
빈을 사용합니다. 다음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)
실패 코드는 다음과 같습니다 : 때때로이 오류 메시지가
내 스프링 빈의 설정은 다음과 같습니다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