我寫的jboss-AS-7的應用程序服務器上的Java EE 6的應用程序。我想要一個「Singleton Session Bean」來將應用程序範圍信息存儲在列表「mediaDataList」中。「辛格爾頓會話Bean」存儲應用廣泛信息的Java EE 6
一個statless會話Bean「ClassA的」寫一些對象清單和web服務的「mediaDataList」列表讀取信息。
@Singleton
@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
@Lock(LockType.WRITE)
public class MediaDataSafe {
private final List<MediaData> mediaDataList = new ArrayList<MediaData>();
@Inject
Logger log;
@PostConstruct
void init() {
// read from HD and store in mediaDataList
}
// just read the list...
public List<MediaData> getMediaDataList() {
return mediaDataList;
}
// write to list
public void writeMediaDataSafe(...) {
mediaDataList.add(auraMediaData);
}
}
@Stateless
public class ClassA {
@Inject
MediaDataSafe mediaDataSafe;
//write in list of singleton
public void write(...) {
mediaDataSafe.writeMediaDataSafe(...);
}
}
@WebService(serviceName = "MyWebService", endpointInterface = "com.WebService")
public class MyWebService implements com.bla.WebService {
//...
@Inject
transient MediaDataSafe mediaDataSafe;
//read from list in singleton
public MediaList getMediaList(...){
mediaDataSafe.getMediaDataList(...);
}
}
我的問題是,似乎在我的系統中存在兩個「signleton bean」!如果「ClassA」向列表中寫入一些新值,則無法使用web服務讀取這些新值。 Web服務始終返回相同的列表。 (它包含了初始化狀態!)
什麼我錯了嗎?我在這裏誤解「Singleton Session Bean」嗎?
根據應用程序的具體情況,你可能想看看插入到應用程序作用域bean中,而不是嘗試使會話bean應用程序作用域。應用程序範圍Bean被標記在您的描述符文件中,並且服務器上只會存在一個。 –
是的,我知道應用程序範圍的bean是如何工作的。但是,我想要的是,在我的業務層上處理這個不在web層上...因此我更喜歡單身人士。但是,爲什麼不工作....? – Gatschet