gpt4 book ai didi

java - Glassfish 初始化 Singleton bean 两次

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:41:54 24 4
gpt4 key购买 nike

我有一个被初始化两次的单例 ejb。我不知道为什么,据我所知,它完全捍卫了拥有单例 bean 的意义。任何帮助将不胜感激。如您所见,我试图放入一个静态 boolean 值以防止多次初始化(不是必需的),但没有任何区别。

bean 类:

@Singleton 
@Startup
public class DataModelBean implements DataModelBeanLocal {

private static Logger log = Logger.getLogger(DataModelBean.class.getName());

@PostConstruct
public void init(){
log.info(this);
}
}

日志输出片段:

2010-02-17 16:06:13,670 INFO  [AutoDeployer        :DataModelBean       ] com.xxx.xxx.datamodel.DataModelBean@117843d
2010-02-17 16:06:14,233 INFO [AutoDeployer :DataModelBean ] com.xxx.xxx.datamodel.DataModelBean@62b9d3

它是否正在创建 2 个 bean!!还是部署应用程序两次?

顺便说一句,我使用的是 glassfish v3,它是否足够成熟?我应该使用 v2 还是其他?想法?

最佳答案

以下单例:

@Singleton
public class MasterDataCache
{
private final static Logger logger = LoggerFactory.getLogger(MasterDataCache.class);

private Map cache;

@PostConstruct
public void initCache() {
logger.debug("initCache()");
this.cache = new HashMap();
}

public Object get(String key){
return this.cache.get(key);
}

public void store(String key,Object value){
this.cache.put(key, value);
}
}

以及以下 servlet:

@WebServlet(name="SingletonTester", urlPatterns={"/SingletonTester"})
public class SingletonTester extends HttpServlet {

@EJB
MasterDataCache masterDataCache;

@Override
public void init(){
masterDataCache.store("startup", new Date());
}

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
try {
out.println("Startup time: " + masterDataCache.get("startup") );
} finally {
out.close();
}
}
}

打包为一场 war 在 GFv3 下“手动”部署时按预期工作。它还可以很好地部署并在 NetBeans 下按预期工作(initCache 仅调用一次)。 我唯一的问题是在 Eclipse 下部署失败(GFv3 提示 eclipseApps/$projectName 不包含任何 EJB 模块,但是在 eclipseApps/$projectName/WEB-INF/类)。遗憾的是,这似乎是 GlassFish Eclipse 插件(至少是我使用的版本)的错误。虽然我在问题跟踪器中没有看到很多问题......很奇怪,因为这看起来像一个大阻塞问题。 但是在 Eclipse 之外,GFv3 表现正常,我无法重现你的问题。

更新:我终于在 Eclipse 和 GlassFish v3 下工作了。我不会提供所有细节,但问题是我无法将我的项目直接识别为“动态 Web 模块”2.5,该版本最初设置为 2.3,我认为这与部署错误有关在 GFv3 上。正确设置我的项目后(将 facet 设置为 2.5),部署它工作正常。所以我把自己搞砸了。

关于java - Glassfish 初始化 Singleton bean 两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2282252/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com