好的,我遇到了SEAM(2.1.1.GA)的问题,这对我没有任何意义。
我有一个会话作用域的组件,并使用@AutoCreate进行注释。
该组件具有使用@Create注释的创建方法。
问题在于,在创建方法完成之前,seam正在调用同一组件实例上的另一个方法。因为创建方法还没有完成,所以第二种方法就是抛出错误。
这是预期的行为吗?当然,在创建完成执行之前,对组件的其他调用应该会阻塞吗?!
有没有人知道这件事......我有点像我的智慧。在这一点上,我只是试图解决这个问题,但这似乎首先不应该是一个问题。
答案 0 :(得分:3)
什么叫第二种方法?
如果是另一个也在启动时自动创建的Bean,那么将第一个bean作为依赖项。
@AutoCreate
@Startup(depends={"firstBean"})
@Name("secondBean")
public class SecondBean() {
...
}
答案 1 :(得分:2)
老问题,但是因为我今天偶然发现了这个问题,也许这对其他人有帮助。
这是Component.newInstance()的作用:
instance = instantiate();
if (getScope()!=STATELESS) {
//put it in the context _before_ calling postconstuct or create
getScope().getContext().set(name, instance);
}
postConstruct(instance);
if (getScope()!=STATELESS) {
callCreateMethod(instance);
if (Events.exists()) {
Events.instance().raiseEvent("org.jboss.seam.postCreate." + name, instance);
}
}
所以事件的顺序是:
@Create
方法步骤2意味着在@Create
方法完成之前,可以从其他线程调用组件上的其他方法。
这就是问题所在。把它称为Seam中的一个错误。就我而言,我可以使用构造函数而不是@Create
来解决它。