Java EE @Singleton 和 @Startup:如果它可以因不活动而被垃圾收集,那有什么意义

问题描述 投票:0回答:2

我有一个 @Singleton Java EE bean,它需要花费大量时间来初始化其 JAXB 上下文。为了解决这个问题,添加了 @Startup 注释。然而,我注意到 bean 是否会定期被垃圾收集。这是基于登录其构造函数的。是否有一些配置设置可用于本质上使 Singleton Java EE bean 在容器启动 (JBoss) 时进行初始化并保留到 JBoss 停止为止?

@stdunbar 我只是猜测它由于不活动而被回收...单例被多个 @Stateless 引用 @奥列格 应用服务器是JBoss。在看到这种行为之前,我的期望是带有 @Singleton 注释的 bean 将被实例化并一直存在,直到应用程序服务器关闭(这不是基于任何读取等),但正如我上面提到的,我看到构造函数得到被多次调用,这让我相信 @Singleton 正在被回收

jakarta-ee garbage-collection singleton ejb startup
2个回答
0
投票

我想你可能错误地认为垃圾收集你的单例及其几个实例。因为否则,这将直接违反 EJB 规范

单例会话 Bean 是一个会话 Bean 组件,它是 每个应用程序实例化一次。如果容器是 分布在许多虚拟机上,每个应用程序都会有一个 每个 JVM 的 Singleton 的 bean 实例。

一旦实例化, 单例会话 bean 实例在以下时间段内存活 创建它的应用程序。它在之间保持其状态 客户端调用,但容器不需要该状态 关机或崩溃。

上面的引用取自版本 3.1,但这部分对于所有 3.x 都是相同的。

我想你可以在单例的 @PostConstruct 方法中尝试它,而不是登录构造函数,这会更具描述性。


0
投票

这是基于登录其构造函数的。

您看到的是正在创建的 CDI 上下文引用/客户端代理,而不是“实际”bean 实例。 查看有关 CDI 如何工作的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.