webserviceに情報を抽出してデータベースに保存するプロセスを作成する必要があります。しかし、このプロセスは非常に時間がかかるため、バックグラウンドで実行したいと考えています。バックグラウンドスレッドスローHibernateException - "スレッドにバインドされているHibernateセッションがありません"
現在のところ、UIのボタンによって呼び出されるProcessHandler
があります。このハンドラは、バックグラウンドでプロセスを実行するThread
を作成します。ただし、メッセージNo Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
でHibernateException
を取得しています。私は設定xmlファイルのいずれかでProcessHandler
を定義した
は、次のように(これは非常に一般的な定義である)(いくつかある):ProcessHandler
インサイド
<bean class="com.project.ProcessHandler" parent="parentHandler" />
は、このプロセスを呼び出すためのコードも非常にありますジェネリック:
Thread t = new Thread(new WorkerThread(alphaManager, bravoManager, charlieManager));
t.start();
これはWorkerThread
の現在の実装である:
public class WorkerThread implements Runnable {
private Manager alphaManager;
private Manager bravoManager;
private Manager charlieManager;
public WorkerThread() {
this.alphaManager = null;
this.bravoManager = null;
this.charlieManager= null;
}
public WorkerThread(Manager alphaManager, Manager bravoManager, Manager charlieManager) {
this.alphaManager = alphaManager;
this.bravoManager = bravoManager;
this.charlieManager= charlieManager;
}
@Override
public void run() {
// code to query webservice and extract data...
saveToDbMethod(data);
}
@Transactional(propagation = Propagation.REQUIRED)
private void saveToDbMethod(String data) {
// code to process data...
alphaManager.save(entityA);
bravoManager.save(entityB);
charlieManager.save(entityC);
}
}
デフォルトのコンストラクタは、WorkerThread
を(私のconfig xmlファイルの1つの)Beanとして定義しようとしたときから残っています。
誰でも私にこのトラブルシューティングのヒントを教えてもらえますか?
configにはどのように 'service'を定義する必要がありますか? – ohseekay
私は 'ProcessHandler'の定義のすぐ下に次のように定義しました:' 'しかし、' org.springframework.beans.factory.NoSuchBeanDefinitionException: 「service」という名前のBeanは定義されていません。 –
ohseekay
私はこの解決方法に従うことで問題を解決しました。後のコメントでトラブルシューティングのプロセスを詳しく説明します。 – ohseekay