2010-12-15 16 views
5

私はStrutsやHibernateのようなフレームワークを使用するWebアプリケーションを持っています。現在私はQuartzを使ってこのアプリケーションのスケジューラーを開発しています。コーディング中に、私はHibernateセッションの使用がQuartzのスレッドでは不可能であることに気付きました。石英でのHibernateセッションの使用

誰もがクォーツジョブクラスからハイバネートセッションを使用するためのソリューションを持っていますか?

答えて

3

一つのアプローチは、静的初期化子でSessionFactoryを構築し、public staticゲッターを経由して、それを利用できるようにHibernateUtil classを使用することです。あなたのQuartzジョブはSessionHibernateUtil.getSessionFactory().getCurrentSession()として作成して使用することができます。

+0

私のquartzジョブクラスは、いくつかのリモートサーバーにFTPして、大量のコレクション(数百万)のXMLファイルをアップロードすることになっています。このシナリオに従うのは適切な方法ですか? – Joe

+0

クォーツジョブからハイバネートを実行しているときに、私のコードで多くのエラーが発生しています。私が石英の外側から実行すると、正しく動作し、すべてのDB操作を行います。石英で動作させるために変更する必要があるもの。 – Joe

+0

どのようなエラーがありますか? –

1

以下のリンクを参照すると、それに従うべき方向があるかどうかを確認できます。あなたが春を使用していないので、それが適用するのは難しいかもしれません。この直接

http://forum.springsource.org/showthread.php?t=12117

+0

私はStrutsのコードが非常に少ないので、この場合はspringを使用できます。 – Joe

3

これは古い質問ですが、私はすばらしいGoogle検索を行いました。これが最初のヒットです。石英仕事で

、メソッドの開始時に次の行を追加します。

public void execute(JobExecutionContext context) throws JobExecutionException 
{ 
    SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this); //<-- this line 

    //...your code here... 
} 

これはあなたの特定の問題が解決しない場合、私は謝るが、私はそれが将来的に誰かをキャッチします疑います。

+0

お返事ありがとうございます。私はここ数日からこの問題に直面していて、あなたの答えは私の問題を解決してくれました.... ありがとう – Luffy

1

"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(); 
} 

ホープ誰かがこれを使用することができます。

関連する問題