component.getInstance()在Seam中返回新实例

时间:2011-01-20 00:52:59

标签: seam

我在Seam中注入组件时遇到了很多麻烦。

当某个用户在我的应用程序中执行某些操作时,我希望将一个事件传播给当前记录的许多其他用户(接收该事件的用户将由导致该事件触发的用户决定。)< / p>

我接近这个的方法是在Application范围中创建一个对象,其中HashMap故事是针对用户id的有状态会话bean。

当触发事件时,Application-scoped对象中的observer方法运行并在hashmap中的每个bean上调用一个方法(作为参数传递一个实体bean)。

在每个bean上调用的方法中,我需要访问一些注入的方法来验证“bean的用户”是否应该对该事件做出反应(通过显示来自实体bean的一些数据)。为此,我需要访问一些注入的bean(SFSB和无状态bean),但此时它们都是null。

我的理解是这里可以使用Component.getInstance()(包装在Lifecycle.beginCall()/ .endCall()块中)或其中一个类似的方法来检索对象,但是这不起作用。 / p>

如果我要做类似(StoryManagerAction)Component.getInstance(“storyManagerAction”)的事情,其中​​storyManagerAction是一个有状态会话bean,我希望返回当前驻留在会话中的名为storyManagerAction的StoryManager实例。相反,我得到一个StoryManagerAction实例,其所有原始成员都设置为0,其所有对象成员都设置为null。

知道为什么会发生这种情况以及我需要做些什么才能使其正常工作?

1 个答案:

答案 0 :(得分:1)

迭代Map并在每个StoryManagerAction上调用方法时,注入的内容是相对于引发事件的会话的范围,而不是StoryManagerAction bean所属的会话范围

避免在StoryManagerAction中注入并在@Create带注释的方法中解析所有需要的bean,您将在常规实例变量中保存该值。