2012-05-29 24 views
1

我在WebSphere 7上有一個Java EE應用程序。適合執行定時「cron作業」的Java EE技術是什麼?

我的應用程序將需要發送的電子郵件放在數據庫的通知表中。

我想寫一個觸發間隔爲5分鐘或10分鐘,並掃描與狀態條目通知表「待定」,發送電子郵件的代碼,然後更新狀態爲「已發送」。

什麼是適當的Java EE技術,使這種情況每5或10分鐘發生一次? Java EE中是否有一些「定時器進程」?

任何信息都是有用的,謝謝! 羅布

回答

0

Quartz非常出色,但是Java EE規範現在包含了可以滿足您需求的EJB計時器。

0

如果你什麼都不需要很花哨,你可以安排任務,java.util.concurrent.Executors

public class Foo implements Runnable(){ 

    public void run(){ 
    //do stuff 
    } 

} 

,並安排運行每毫秒d延遲秒

Executors.newScheduledThreadPool(10).scheduleAtFixedRate(new Foo(), d, t, TimeUnit.MILLISECONDS); 
3

你可以將@Schedule註釋用於此目的。

的JavaEE 6有這個

http://docs.oracle.com/javaee/6/tutorial/doc/bnboy.html

@ManagedBean 
@Stateless(name="MyScheduledTaskClass") 
public class MyScheduledTaskClass implements Serializable{ 
private Logger _log = Logger.getLogger(this.getClass()); 

    @Schedule(minute="*/5")  //minute="*/10" if you want every 10 minutes 
    public void executeTask(){ 
     _log.info("Scheduled task started"); 
     //Do some stuff here 
     _log.info("Scheduled task finished"); 
    } 

} 
+0

謝謝,你知道這是否可用於Java EE 5嗎? –

+0

你使用哪個服務器版本/實現? – rkosegi

+0

基於http://www.ibm.com/developerworks/websphere/library/techarticles/0707_barcia/0707_barcia.html和http://jcp.org/en/jsr/detail?id = 244你的服務器需要能夠使用JSR-236,這是JavaEE6規範的一部分。那麼爲什麼要使用JavaEE5呢? – rkosegi

1

的WebSphere 7定時服務運行的Java EE 5(我認爲),那麼你的選擇是在這方面有點受限。

您可以使用圖書館像Quartz Scheduler,但你必須要小心,把它掛到由容器管理的線程池。我相信默認情況下,它只是自己創建線程,這在EJB中是完全禁止的(並且在Web容器中非常不鼓勵)。

我找到了一個不錯的博客文章引導您完成設置在WebSphere工作管理池的配置:http://sanjsuya.wordpress.com/2012/01/19/asynchronousbean-was-spring-integration/

如果你使用Spring,你就可以勾了Quartz調度這個線程池相當容易使用WorkManagerTaskExecutor。這裏有一些關於這方面的Spring文檔(注意,它來自Spring 2,但我相信你或多或少會爲Spring 3做類似的事情):http://static.springsource.org/spring/docs/2.0.x/reference/scheduling.html

編輯:我的建築師略微(雖然也許你有這樣做的好方法)。你爲什麼要寫電子郵件給數據庫而不是隊列?這樣,它們就可以在接收系統的閒置時進行處理,並且不會將大量後臺工作重載到WebSphere上。