我对这里发生的事情感到茫然。我有一个包含列表的单例bean。当我向列表中添加项目时,内容始终是一致的。但是,当我从另一个服务调用get列表时,它返回一个具有不同java id的空列表。不知何故,单例bean根据谁正在调用,有两个不同的包含列表实例。
以下是该类的定义方式:
@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方法,该bean侦听新消息并调用适当的处理程序。从另一个bean调用get来处理事后的数据。当我从两个接一个调用时,列表具有不同的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 ...
非常感谢有关正在发生的事情的任何提示。这都在一台本地机器上。
答案 0 :(得分:1)