私は既存のシステムで作業しています。私のスプリングトランザクションマネージャーにスレッドにアタッチさせる必要があります。私は、トランザクションの注釈と考えることができると私はまだカントは、このエラーがクリアするために取得する注釈付きのすべてをアイブこの例外spawn offスレッドのスプリングトランザクション
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
まあ、トランザクションを開始するコードはありません。トランザクションの注釈が私の春の豆の中で何をするのでしょうか。私の問題は、何らかの理由でBeanが新しいスレッドに生成されたときに、そのスレッドが新しいスレッドで新しいトランザクションを開始できることを認識していないことが原因です。 – scphantm
私はあなたが '@ Transactional'を使うことを期待しました。しかし、この注釈付きメソッドを呼び出すコードを投稿してください。 – Ralph