2013-11-27 32 views
1

我以前使用JBoss 5中的org.jboss.varia.scheduler.Scheduler安排了一個JMX調度的定期批量作業。在JBoss 7.1中刪除了這個支持。JBoss 7.1中的多線程調度作業

我發現的唯一選擇是EJB的@schedule註釋。但是,在EJB內運行的作業不允許啓動線程。在幾個並行線程中運行此批處理導入作業非常重要,可以更高效地使用硬件資源,從而節省處理時間。

如何在JBoss 7.1中調度可以從多個線程並行調用EJB的作業?

回答

2

當需要並行執行時,傳統上採用的方式是使用MDB。 (通過傳統我心目中的異步調用,但是這是一個新的EJB 3.1的功能,我想,這樣不會對JBoss的7.1)

設置的概要如下:

  1. 一個@Schedule 'd EJB觸發批處理。
  2. 隊列。
  3. 一個MDB正在監聽這個隊列。應該將MDB配置爲像在舊作業中那樣運行多個實例(有效的線程)。
  4. 將被插入到隊列中的消息對象,並表示要由MDB執行的作業。

當觸發@Schedule'd EJB時,它會將適當數量的作業消息推送到隊列中。這些將由容器並行傳遞並執行到MDB實例。

作爲一個(可能是無所謂的)獎金,代碼將成爲標準compilant並且不依賴於特定的應用程序服務器API。

+0

謝謝,你可能是正確的,但這似乎是嚴重矯枉過正的任務。 –

+0

我不確定這確實是,但你可能是對的。實質上,你將不得不重構現有的代碼來運行或被MDB調用(這應該不是很大)。添加隊列(應該有大量的文檔)。並且寫@ @ Schedule''d EJB(不是很大)。然後再次你的代碼,你知道更好... –

+0

在我的情況下,處理不能完全平行,所以我必須有代碼來管理隊列,可能通過有多個隊列(導入相互依賴的文件必須按順序,其他可能並行)。但是我的主要抱怨是,在操作和調優方面,安裝和維護隊列可能會非常複雜。無論如何,這可能是爲什麼容器比EJB更受歡迎的原因:)謝謝。 –