我對這裏發生的事情感到不知所措。我有一個包含列表的單身bean。當我將項目添加到列表中時,內容始終保持一致。但是,當我從另一個服務調用get列表時,它將返回一個具有不同java id的空列表。不知怎的,單身bean根據誰在調用,有兩個不同的包含列表實例。創建列表的多個實例的Java Singleton 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);
}
}
}
兩者之間的區別是這樣的:
add方法是從偵聽新的消息,並調用相應的處理程序一個bean調用。 get是從事後處理數據的另一個bean調用的。當我從這兩個接一個打電話時,該列表具有不同的ID並且不是同一個對象。我無法弄清楚這是怎麼回事。
在這兩種豆類我有類以上包含以下行:
@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 ...
任何提示,以正在發生的事情是非常讚賞。這全部在一臺本地機器上。
如果在類名或註釋請忽略任何錯別字。這不是複製和粘貼代碼,因爲這不是我可以分享的內容。這只是類如何定義的複製品。 – JeremyK