@PostConstruct在简单的@Singleton @Startup bean上调用了两次

时间:2015-03-05 17:06:04

标签: java singleton ejb startup postconstruct

我的问题是@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
  • 包装:耳内的war文件

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

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

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

改变事物和事后出版也是如此。在这里,您应该只能看到来自@PostConstruct的消息。

然后你就知道一切都好了。

答案 1 :(得分:0)

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