簡體   English   中英

如何協調部署到WebLogic群集中多個服務器的單個ejb計時器?

[英]How can I coordinate a single ejb timer deployed to multiple servers within my WebLogic cluster?

所以,我有一個Web客戶端和一個EJB計時器,單獨部署。

工作流程如下:

1)用戶訪問客戶端。 2)用戶請求發生已知長時間運行的操作,因此我們在數據庫表中編寫運行此進程的請求。 3)TimerOne每隔幾秒檢查一次該表以查看是否有任何等待任務,因此它找到用戶的請求並運行任務。

我的問題是,在我們的應用程序運行的某些環境中,我們正在利用服務器群集。 當我們這樣做時,客戶端和EJB計時器都部署到集群中的每個服務器。

將客戶端部署到多個服務器是可以的,因為它有助於工作負載; 但是,讓計時器在多個服務器上運行是一個問題。 當用戶請求運行長時間運行的任務時,兩個計時器同時從數據庫中獲取任務並開始運行它。 由於長時間運行的作業通常寫入數據庫,因此這種情況會導致沖突等問題。

我的目標是能夠將我的EJB計時器部署到兩個服務器,但是為了在整個集群中維護一些狀態,計時器可以使用它來決定是否應該接收任務或者其他實例之一是否有已經把它拿了起來。

我嘗試使用數據庫並嘗試文件存儲,但這些要么太慢,要么我無法提出防彈工作流程來進行同步。

有誰知道處理這個問題的好方法? 它甚至可能嗎?

該解決方案應該能夠在集群WebLogic域,非集群WebLogic域,集群Glassfish域和非集群Glassfish域上運行。

如果有另一種更加優雅的解決方案,我願意改變這種方式。

謝謝你的任何想法!

如果有另一種更加優雅的解決方案,我願意改變這種方式。

我知道您的問題是關於EJB Timer,但請注意以下幾點:在我看來,您需要具備異步處理的優勢。

在早期的Java EE版本中,實現此類要求的替代方法之一是使用JMS,它允許您發送稍后為業務層組件處理的消息。 其他可能性是您所描述的,需要使用EJB Timer。 我認為這兩種情況都是一種解決方案,填補了EE規范的空白。

從Java EE 6開始,您可以定義允許您進行異步調用的異步服務 ,避免使用被認為用於其他目的的功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM