私はStrutsやHibernateのようなフレームワークを使用するWebアプリケーションを持っています。現在私はQuartzを使ってこのアプリケーションのスケジューラーを開発しています。コーディング中に、私はHibernateセッションの使用がQuartzのスレッドでは不可能であることに気付きました。石英でのHibernateセッションの使用
誰もがクォーツジョブクラスからハイバネートセッションを使用するためのソリューションを持っていますか?
私はStrutsやHibernateのようなフレームワークを使用するWebアプリケーションを持っています。現在私はQuartzを使ってこのアプリケーションのスケジューラーを開発しています。コーディング中に、私はHibernateセッションの使用がQuartzのスレッドでは不可能であることに気付きました。石英でのHibernateセッションの使用
誰もがクォーツジョブクラスからハイバネートセッションを使用するためのソリューションを持っていますか?
一つのアプローチは、静的初期化子でSessionFactory
を構築し、public static
ゲッターを経由して、それを利用できるようにHibernateUtil
classを使用することです。あなたのQuartzジョブはSession
をHibernateUtil.getSessionFactory().getCurrentSession()
として作成して使用することができます。
以下のリンクを参照すると、それに従うべき方向があるかどうかを確認できます。あなたが春を使用していないので、それが適用するのは難しいかもしれません。この直接
私はStrutsのコードが非常に少ないので、この場合はspringを使用できます。 – Joe
これは古い質問ですが、私はすばらしいGoogle検索を行いました。これが最初のヒットです。石英仕事で
、メソッドの開始時に次の行を追加します。
public void execute(JobExecutionContext context) throws JobExecutionException
{
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this); //<-- this line
//...your code here...
}
これはあなたの特定の問題が解決しない場合、私は謝るが、私はそれが将来的に誰かをキャッチします疑います。
お返事ありがとうございます。私はここ数日からこの問題に直面していて、あなたの答えは私の問題を解決してくれました.... ありがとう – Luffy
"Quartz Hibernate"を検索するとこれが返されました。別の解決策(そしてTapestryを使用して)に来て、私はそれを共有すると思った。
ジョブをスケジュール:
…
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
JobDataMap myJobDataMap = new JobDataMap();
myJobDataMap.put("HibernateSessionManager", hibernateSessionManager);
myJobDataMap.put("PerthreadManager", perThreadManager);
JobDetail job = JobBuilder.newJob(SomeJob.class).withIdentity(
"SomeJob", "someGroup").setJobData(
myJobDataMap).build();
Trigger trigger = TriggerBuilder.newTrigger().withIdentity(
"Some Trigger", "someGroup").startNow().withSchedule(
SimpleScheduleBuilder.repeatSecondlyForever(30)).build();
scheduler.scheduleJob(job, trigger);
scheduler.start();
…
や仕事で
public void execute(JobExecutionContext context)
throws JobExecutionException
{
JobDataMap jdm = context.getMergedJobDataMap();
HibernateSessionManager hibernateSessionManager = (HibernateSessionManager) jdm.get("HibernateSessionManager");
PerthreadManager perThreadManager = (PerthreadManager) jdm.get("PerthreadManager");
Session session = hibernateSessionManager.getSession();
//do stuff with session …
//now clean up, otherwise I ended up with <IDLE> in transactions
perThreadManager.cleanUp();
}
ホープ誰かがこれを使用することができます。
私のquartzジョブクラスは、いくつかのリモートサーバーにFTPして、大量のコレクション(数百万)のXMLファイルをアップロードすることになっています。このシナリオに従うのは適切な方法ですか? – Joe
クォーツジョブからハイバネートを実行しているときに、私のコードで多くのエラーが発生しています。私が石英の外側から実行すると、正しく動作し、すべてのDB操作を行います。石英で動作させるために変更する必要があるもの。 – Joe
どのようなエラーがありますか? –