0
我有以下代碼:辛格爾頓與JBoss SEAM
@Name("myService")
@Scope(ScopeType.APPLICATION)
@Stateless
public class MyService {
private Service service;
private Service getService() {
if (service == null) {
service = Service.create(url, new QName("URL",
"Envelope"));
}
return service;
}
public synchronized Port getPort() {
return getService().getPort();
}
}
而getPort方法從不同的線程調用。 「Service.create」需要很多時間,我發現它實際上被調用了多次。所以它看起來像創建MyService類的多個實例,這就是爲什麼同步沒有幫助。
我已經改變註釋:
@AutoCreate
@Startup
@Name("myService")
@Scope(ScopeType.APPLICATION)
而現在它似乎很好地工作:只創建一個實例,並訪問的getPort()方法是同步的。
任何人都可以解釋爲什麼第一個案件不符合預期?綁定到一個應用範圍