2

好的,我遇到了对我没有任何意义的 SEAM (2.1.1.GA) 问题。

我有一个组件,它是会话范围并用@AutoCreate 注释的。

该组件有一个用@Create 注释的创建方法。

问题是在创建方法完成之前,接缝正在同一个组件实例上调用另一个方法。因为创建方法还没有完成,所以第二种方法会抛出错误。

这是预期的行为吗?当然,对组件的其他调用应该阻塞,直到创建完成执行?!

有谁知道这件事……我有点不知所措。在这一点上,我只是想解决这个问题,但似乎这首先不应该是一个问题。

4

2 回答 2

3

什么叫第二种方法?

如果它是另一个在启动时自动创建的 Bean,则将您的第一个 bean 作为依赖项放入。

@AutoCreate
@Startup(depends={"firstBean"})
@Name("secondBean")
public class SecondBean() {
...
}
于 2009-10-01T17:08:59.603 回答
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);
   }
}

所以事件的顺序是:

  1. 实例化你的组件
  2. 将您的组件放在 Session 范围内
  3. 调用@Create方法

@Create第 2 步意味着可以在方法完成之前从其他线程调用组件上的其他方法。

所以这就是问题所在。称其为 Seam 中的错误。就我而言,我可以通过使用构造函数而不是@Create.

于 2012-07-30T01:24:31.710 回答