【问题标题】:@PostConstruct called twice on simple @Singleton @Startup bean@PostConstruct 在简单的@Singleton @Startup bean 上调用了两次
【发布时间】:2015-03-05 17:06:04
【问题描述】:

我的问题是 @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?");
  }
}

配置

  • 应用服务器:Glassfish 3.1.2
  • Java 版本:JDK 1.7_17
  • 打包:耳中的战争文件

有什么想法吗?

【问题讨论】:

  • 该错误 (1883) 在您提出此问题 6 天后得到修复:jersey.java.net/release-notes/2.17.html
  • 感谢您的信息。不知道这是一个真正的问题。我认为这只是一个 Eclipse 打嗝,否则这将意味着单例和 post 构造存在普遍问题。

标签: java singleton ejb startup postconstruct


【解决方案1】:

我通过使用@PreDestroy 或应用程序服务器的发布解决了这个问题。

问题是“正常的”。在服务器启动后使用 Eclipse 作为 IDE,应用程序将再次发布。因此,您只会看到@PreDestroy 的一条日志消息,但@PostConstruct 的两条日志消息。

更改某些内容并随后发布也是如此。在这里,您应该只能看到来自@PostConstruct 的消息一次。

那你就知道一切都好了。

【讨论】:

  • 使用 WebSphere Liberty 时不存在此问题,因此可能是 Glassfish Eclipse 插件问题。
【解决方案2】:

@PostConstruct — 创建 bean 实例后立即调用它。 你可以看到这个: @Startup @Singleton instantiated twice in WebLogic (EJB 3.1)

【讨论】:

  • 我读了这篇文章。然而,这根本没有帮助。我不希望@PostConstruct 中的所有内容都被执行两次。我想知道如何避免这种情况?
猜你喜欢
  • 2014-02-03
  • 1970-01-01
  • 2012-10-19
  • 1970-01-01
  • 2012-01-24
  • 2013-05-29
  • 1970-01-01
  • 1970-01-01
  • 2013-07-14
相关资源
最近更新 更多