0

Webアプリで、長いプロセスに対して非同期スレッドを実行し、クライアントに進行状況を知らせたいと思います。このために、私はこの抽象クラスを使用することを考えました:

public abstract class ThreadProvider implements Runnable{

    protected Thread thread;

    public boolean create() throws SystemException{
        if(thread!=null && thread.isAlive()) throw new SystemException("Il processo è già in esecuzione");
        thread = new Thread(this);
        thread.start();
        return true;
    }
}

そしてこれは私の実装です:

@Service @Transactional
public class ChiusuraProvider extends ThreadProvider {

    private static Logger gdf = Logger.getLogger("gdf");
    private static Logger log = Logger.getLogger(ChiusuraProvider.class);

    protected Dao dao;
    protected CinetelProvider cinetelProvider;

    @Override
    public void run() {...}
}

すべてが機能します:スレッドが開始し、自動配線が機能しているようです...しかし、Hibernatはセッションを見つけられませんでした(おそらくスレッドを変更したため)...これを解決するにはどうすればよいですか?

ありがとう

4

1 に答える 1

1

@Transactionalこの場合は機能しません。10.5.1SpringFrameworkの宣言型トランザクション実装についてを参照してください。

メソッド内でプログラムによるトランザクション管理(TransactionTemplate)を使用するrunか、トランザクションロジックを別のBeanに抽出して作成することができ@Transactionalます。

于 2012-07-05T09:14:42.530 に答える