2012-01-04 101 views
0

我目前正在編寫一個新的EJB應用程序,它基本上應該接收來自Web服務的消息並基於此消息內容啓動下載過程。這個應用程序將運行在Glassfish 3.1.1上。EJBs - 架構問題

我的第一個想法是創建一個singleton bean,它將從Web服務中讀取消息,並使用有狀態會話bean來啓動和處理下載本身。我需要使用有狀態bean,因爲我需要在我的單例狀態和有狀態bean之間有一個轉換狀態(下載狀態等)

「問題」是如果我從Web服務接收到幾條消息,我應該同時開始幾個下載,每個下載都有自己的上下文。我該如何實現這一點,就好像我從我的單例中調用有狀態會話bean一樣,我總是會得到相同的bean,對嗎?我看到的唯一解決方案是使用將從我的單例創建並啓動的線程,但這是EJB規範所不允許的...

感謝您的幫助!

回答

0

爲什麼你需要一個singleton bean在這裏?僅有狀態會話bean不夠好?你想同時下載,你想要有狀態,那麼爲什麼要使用單身?你能多解釋一下嗎?

+0

嗨馬克!單身人士將成爲應用程序的「入口點」,負責管理所有下載內容,即檢查每個bean的下載狀態,通過Web服務發送這些狀態,中斷/取消所有下載等。它是否回答您的問題?你看到另一種方式繼續?問候 – Mehdi 2012-01-04 09:25:42

+0

是的,我明白了,但它仍然不能說服我在這裏需要一個單身人士。我的意思是,讓SFSB管理單個客戶端的互連,下載/取消/獲取狀態等。你爲什麼需要「集中」這個? – 2012-01-04 09:27:58

+0

因爲(在我看來)我需要集中。因爲例如取消/中斷下載等命令來自WS。所以我需要能夠識別我需要中斷/取消哪個SFSB ...更清楚了嗎? – Mehdi 2012-01-04 09:46:37

1

我不認爲你想要一個有狀態的會話bean在這裏。有狀態bean的意義在於它保持了會話範圍內的狀態,這與特定的客戶端有關係。在你的情況下,每個客戶端沒有一個下載(是否有客戶?),這意味着這不是一個合適的範圍。

如果您只是想要多個線程,請使用無狀態bean和@Asynchronous方法。您可能必須使用回調到單例來處理狀態更新。