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

Java Singleton bean creating multiple instances of a list

我对这里发生的事情一头雾水。我有一个包含列表的单例 bean。当我向列表中添加项目时,内容始终是一致的。但是,当我从另一个服务调用该列表上的 get 时,它 returns 一个具有不同 java id 的空列表。不知何故,单例 bean 有两个不同的包含列表实例,具体取决于调用者。

class 的定义如下:

@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);
        }
    }
}

两者的区别是:

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

在这两个 bean 中,我都将上面的 class 包含在以下行中:

@EJB
private SomeManager someManager;

另外两个class有如下注解:

这个 class 在列表中总是有正确的数据,并且不会在重复测试中被清除。

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

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

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

非常感谢任何关于正在发生的事情的提示。这一切都在一台本地机器上。

您可能想查看此资源。

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