메신저는 기존 시스템에서 작업 중이며 스프링 트랜잭션 관리자를 마스터 작업 스레드에서 생성되는 스레드에 연결해야합니다. 내가 트랜잭션 주석을 생각할 수있는 그리고 난 아직 캔트이 오류가 취소 얻을 주석이 모든 것을 필자이 예외스프링 트랜잭션이 스폰 된 스레드에서 처리되었습니다.
org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
at org.springframework.orm.hibernate3.SpringSessionContext.currentSession(SpringSessionContext.java:63)
at org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:687)
at parity.model.datamapping.RefreshTask.execute(RefreshTask.java:95)
at com.paritysys.tasks.ASyncTask$1.run(ASyncTask.java:48)
at java.lang.Thread.run(Thread.java:662)
가 계속.
내가
내 방법
@TransactionAS400
@TransactionScores
public void refresh() {
ASyncTaskWorker worker = new ASyncTaskWorker() {
public void progress(double percentage, String message) {
logger.debug(String.format("%.2f - %s", percentage, message));
}
public void handleException(Throwable e) {
try {
status.allowUpdating(property.getSchema());
} catch (Exception b) {
// consume
}
logger.error("Failed to complete the refresh task", e);
}
public void done(boolean success) {
status.allowUpdating(property.getSchema());
logger.debug(String.format(
"Reset updating status to default for %s",
property.getSchema()));
}
};
RefreshTask refTask = ServiceProviderContext.find(RefreshTask.class);
refTask.init(property, worker);
ASyncTaskHandler.getInstance().add(refTask);
ASyncTaskHandler.getInstance().process();
}
트랜잭션을 시작하는 코드와이를 호출하는 코드를 게시해야합니다. – Ralph
글쎄, 트랜잭션을 시작하는 코드가 없습니다. 트랜잭션 주석이 내 봄 콩 내부에서 무엇을하는지. 내 문제는 콩이 어떤 이유로 새로운 스레드로 스폰 될 때 봄이 새로운 스레드에서 새로운 트랜잭션을 시작할 수 있다는 것을 인식하지 못하는 것 같습니다. – scphantm
'@ Transactional'을 사용할 것으로 예상했습니다. 그러나이 주석 메소드를 호출하는 코드를 게시하십시오. – Ralph