@PostConstruct вызывается дважды для простого @Singleton @Startup bean

моя проблема в том, что @PostConstruct вызывается дважды, хотя и не должен. Я много искал и обнаружил похожие проблемы с джерси https://java.net/jira/browse/JERSEY-1883?filter=-3. Однако я попытался сделать небольшой пример, который, по-видимому, все еще вызывает проблему, даже без каких-либо грохотов.

import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
import javax.ejb.Startup;

@Singleton
@Startup
public class TestSingleton {

  @PostConstruct
  public void init() {
    System.out.println("How many times am I being called?");
  }
}

Конфигурация

  • Application server: Glassfish 3.1.2
  • Java Version: JDK 1.7_17
  • Packaging: A war file within an ear

Любые идеи?


person Dr4gon    schedule 05.03.2015    source источник
comment
Эта ошибка (1883 г.) была исправлена ​​через 6 дней после того, как вы задали этот вопрос: jersey.java.net /release-notes/2.17.html   -  person Elrond_EGLDer    schedule 11.12.2015
comment
Спасибо за информацию. Не знал, что это настоящая проблема. Я думал, что это просто сбой при затмении, потому что в противном случае это означало бы общую проблему с синглтонами и пост-конструкциями.   -  person Dr4gon    schedule 11.12.2015


Ответы (2)


Я понял это с помощью @PreDestroy или публикации сервера приложений.

Проблема "нормальная". При использовании Eclipse в качестве IDE после запуска сервера приложение будет снова опубликовано. Следовательно, вы увидите только одно сообщение журнала @PreDestroy, но два @PostConstruct.

То же самое касается изменения чего-либо и последующей публикации. Здесь вы должны увидеть сообщение от @PostConstruct только один раз.

Тогда ты поймешь, что все в порядке.

person Dr4gon    schedule 06.03.2015
comment
Эта проблема отсутствует при использовании WebSphere Liberty, поэтому, вероятно, это проблема плагина Glassfish Eclipse. - person Gas; 07.03.2015

@PostConstruct - вызывается сразу после создания экземпляра компонента. Вы можете увидеть это: @Startup @Singleton дважды создается в WebLogic ( EJB 3.1)

person TINH CAO    schedule 05.03.2015
comment
Я прочитал пост. Однако это совершенно не помогает. Я не хочу, чтобы все, что находится в @PostConstruct, выполнялось дважды. Я хочу знать, как этого избежать? - person Dr4gon; 06.03.2015