2011-01-20 64 views
2

我在Seam中注入組件時遇到了很多麻煩。component.getInstance()在Seam中返回新實例

當某個用戶在我的應用程序中執行某些操作時,我希望將一個事件傳播給當前登錄的其他許多用戶(接收該事件的用戶將由導致事件觸發的用戶決定)。

我接觸到這個的方法是在Application範圍內創建一個對象,其中的HashMap故事是針對用戶標識的有狀態會話bean。

當事件被觸發時,應用程序作用域對象中的觀察者方法運行並調用hashmap中的每個bean的方法(作爲參數傳遞一個實體bean)。

在每個bean調用的方法中,我需要訪問一些注入的方法來驗證「bean的用戶」是否應該對該事件作出反應(通過顯示實體bean中的一些數據)。爲了做到這一點,我需要訪問一些注入的bean(SFSB和無狀態bean),但是現在它們都是空的。

我的理解是Component.getInstance()(包裝在Lifecycle.beginCall()/ .endCall()塊)或其中一個類似的方法可以用於檢索對象,但這不起作用。

如果我要做類似(StoryManagerAction)的Component.getInstance(「storyManagerAction」),其中storyManagerAction是一個有狀態會話bean,我期望StoryManagerAction的一個名爲storyManagerAction的實例當前駐留在會話中。但是,我得到了一個StoryManagerAction的實例,其所有基元成員都設置爲0,並且其所有對象成員都設置爲空。

任何想法爲什麼發生這種情況,我需要做什麼才能正常工作?

+0

是否每個用戶都在其會話上下文中始終有一個`StoryManagerAction`組件,或者它們是否在特定的時間點創建? – kraftan 2011-01-21 12:08:31

回答

1

當您迭代Map並調用每個StoryManagerAction上的方法時,注入的內容與引發該事件的會話範圍有關,而不是該bean所屬的會話範圍。

避免注入StoryManagerAction並解決@Create帶註釋的方法中所有需要的bean,您將在其中將值保存在常規實例變量中。