当前位置: 首页 > 知识库问答 >
问题:

Java单例bean创建列表的多个实例

宰父霖
2023-03-14

我不知道这里发生了什么事。我有一个包含列表的单例bean。当我向列表中添加项目时,内容总是一致的。然而,当我从另一个服务调用该列表上的get时,它返回一个具有不同java id的空列表。

下面是类的定义方式:

@Startup
@LocalBean
@DependsOn({ "classnameremoved" })
@Dependent
@Singleton
public class SomeManager
{
    private List<someType> aList = new ArrayList<someType>();

    public List<someType> getListData()
    {
         List<someType> returnList = new ArrayList<someType>();
         synchronized (aList)
         {
             returnList.addAll(aList);
         }

         return returnList;
    }

    public void handleCreatedEvent(Data someData)
    {
        synchronized (aList)
        {
             aList.add(someData);
        }
    }
}

两者的区别是:

add方法是从侦听新消息并调用相应处理程序的bean调用的。get是从另一个bean调用的,该bean在事件发生后处理数据。当我一个接一个地调用这两个对象时,列表具有不同的ID,并且不是同一个对象。我不知道这是怎么回事。

在这两个bean中,我有上面的类包含以下行:

@EJB
private SomeManager someManager;

其他两个类具有以下注释:

此类总是在列表中具有适当的数据,并且不会在重复测试中清除。

@Singleton
@Startup
@LocalBean
@DependsOn("some class")
public class MessageListener ...

这个类总是返回一个空列表

@Stateless
@LocalBean
@javax.ejb.TransactionManagement(javax.ejb.TransactionManagementType.BEAN)
public class GetClass ...

任何关于正在发生什么的暗示都非常感谢。这都在一台本地机器上。

共有1个答案

夏兴平
2023-03-14

您可能想查看此资源。

http://www.oracle.com/technetwork/articles/java/singleton-1577166.html

 类似资料:
  • 当使用Spring Framework时,我怀疑在下面提到的场景中会创建多少实例: bean配置如下 默认情况下,bean“a”具有。因此,有一个单例bean引用了一个具有会话范围或原型范围的bean。 在这种情况下,如果有2个对应用程序的同时请求,那么将创建多少个A实例和多少个B实例? 如果有人能解释这是如何工作的,那将是非常有帮助的。 谢了达薇亚

  • 问题内容: 我有一个自动相互连接的Spring bean图。大大简化了图示: 所有这些bean都没有指定范围,这暗示它们是单例(使它们成为显式单例不会改变任何东西,我已经尝试过)。 问题在于,在实例化 单个应用程序上下文之后 ,的实例和包含的 不同 实例。怎么会这样 我试图为它创建public no args构造函数,并且调试已确认创建了多次。所有这些创建的堆栈跟踪都在这里。 我还尝试过为Spri

  • 我有一张相互自动连线的Spring豆图。高度简化的插图: 所有这些bean都没有指定作用域,这意味着它们是单例(我已经尝试过了,让它们显式单例不会改变任何东西)。 问题是,在实例化单个应用程序上下文之后,Bar和Baz的实例包含不同的Foo实例。这怎么会发生? 我尝试为创建公共no args构造函数,并且调试已确认已多次创建。所有这些创建的堆栈跟踪都在这里。 我还尝试为Spring启用调试日志记录

  • 问题内容: 我在使用此软件包的脚本中遇到问题: 我找不到错误后写了这个小小的testscript,结果是执行cronjobs的次数是预期的两倍: 运行它给我这个输出: 有谁知道我如何能在不重复的情况下创建大量的Gocron作业? 谢谢 :) 问题答案: 还可以吧 将开始已经重新开始的作业,因此要解决我的问题,我不得不将脚本更改为此: 我希望这对遇到相同问题的任何人有所帮助!

  • 本文向大家介绍创建一个类Person的简单实例,包括了创建一个类Person的简单实例的使用技巧和注意事项,需要的朋友参考一下 创建一个类Person,包含以下属性:姓名(name)、年龄(age)、朋友(friends数组)、问候(sayhi方法,输出问候语,例如:“你好!”)、交朋友(addFriend方法,向friends里添加一个值),然后创建两个此类的实例:“小张“,22,[“小李”,”

  • 问题内容: 例如,我有DBManager.java Singleton类,必须将其部署在集群环境中。这是一个基于Web的应用程序,具有以下部署策略 Apache负载平衡器-> Tomcat 6(群集中有3个服务器)。 我必须为3个tomcat实例维护一个DBManager实例。 我的代码是 我一直在寻找解决此问题的方法,并发现类似JGroups API的东西。可以使用JGroups实现吗?任何想法