шов @create не завершается до того, как другие методы вызываются в компоненте

Хорошо, у меня проблема с SEAM (2.1.1.GA), которая не имеет для меня никакого смысла.

У меня есть компонент, который ограничен сеансом и аннотирован с помощью @AutoCreate.

Компонент имеет метод создания, аннотированный @Create.

Проблема в том, что ДО ЗАВЕРШЕНИЯ СОЗДАНИЯ МЕТОДА шов вызывает другой метод для того же экземпляра компонента. Поскольку метод создания не завершен, этот второй метод выдает ошибки.

Это ожидаемое поведение? Конечно, другие вызовы компонента должны блокироваться до завершения выполнения create ?!

Кто-нибудь знает что-нибудь об этом... Я что-то не в своем уме. На данный момент я просто пытаюсь обойти проблему, но кажется, что это вообще не должно быть проблемой.


person Community    schedule 01.10.2009    source источник


Ответы (2)


Что вызывает второй метод?

Если это другой компонент, который также автоматически создается при запуске, поместите свой первый компонент в качестве зависимости.

@AutoCreate
@Startup(depends={"firstBean"})
@Name("secondBean")
public class SecondBean() {
...
}
person Damo    schedule 01.10.2009

Старый вопрос, но поскольку я наткнулся на этот вопрос сегодня, возможно, это будет полезно кому-то еще.

Вот что делает 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. поместите свой компонент в область сеанса
  3. вызвать метод @Create

Шаг 2 означает, что другие методы компонента могут быть вызваны из других потоков до завершения метода @Create.

Вот в чем проблема. Назовите это ошибкой в ​​​​Шве. В моем случае я мог бы обойти это, используя конструктор вместо @Create.

person markl    schedule 30.07.2012