2012-10-23 61 views
1

基本上我有我的web應用程序中長時間運行的任務的問題。目前,這個任務由一個EJB執行,該任務在執行任務時被阻塞(任務是一個外部程序並且EJB只是等待結果)。消息驅動的bean是否適用於此要求?

現在根據這個post,我想到了使用消息驅動Bean和JMS隊列。

我的問題:這種方法的優點是什麼?如果我註釋EJB的調用方法爲@Asychnronous不會具有與MDB相同的功能嗎? JMS/MDB方法的唯一優點是,掛起的作業不會丟失嗎?在資源管理方面,讓EJB等待任務或MDB的結果會更好嗎?

+0

也許閱讀[Java EE教程](http://docs.oracle.com/javaee/6/tutorial/doc/bncdr.html)的相關章節。 – 2012-10-23 06:46:13

+0

也許不一樣,但答案的某些部分適用。 stackoverflow.com/questions/2096734/why-choosing-jms-for-asynchronous-solution-why-is-it-better-than-a-simple-enti –

回答

1

我對這種模式使用了JMS很多,原因是在EJB 3.1之前,根本無法對Session Beans進行異步調用。這就是爲什麼你可能經常在現有的應用程序中找到這樣的代碼。

在EJB上使用異步調用的好處是易於設置(使用JMS並不複雜,但需要創建資源等)。使用JMS有幾個好處,如果你是在可用性和可擴展性是重要的課題的環境中運行:

  • 有JMS消息持久有時是有趣的,如果你仔細想想你的應用服務器崩潰。
  • 更重要的是,在我看來,使用JMS可以在JMS隊列後面添加多個「處理」節點,如果處理時間長且負載增加,則可以輕鬆地添加容量(請注意,這也可以是如果您使用遠程會話bean,則通過一些應用程序服務器實現,但並不那麼簡單)。