我有一個如下定義的EJB(使用Java EE 6註釋編碼):如何將EJB公開爲非事務性的Web服務?
@Stateless
@WebService
public class SecurityWebService {
public void registerUser(RegistrationRequest request) {
...
}
}
注意,此EJB也被暴露爲web服務。但是,我遇到了生成的Web服務的問題。由我的容器(GlassFish)生成的WSDL包含WS-Atomic事務策略,因爲默認情況下無狀態會話Bean是事務性的(請參閱詳細信息here)。不幸的是,我的.NET客戶端在WSDL上窒息,因爲它不理解WS-AT策略。
所以我真正想要的是一個非乾淨的Web服務,它不是事務性的,但關聯的EJB應該是事務性的(它必須在數據庫中插入記錄)。我該怎麼做呢?我能想到的唯一的方法是創建一個傳遞到像這樣的EJB所有的所謂的「正常」的Web服務 - 不優雅可言:
@WebService
public class SecurityWebService {
@Inject
private SecurityService securityService;
public void registerUser(RegistrationRequest request) {
securityService.registerUser(request);
}
}
@Stateless
public class SecurityService {
public void registerUser(RegistrationRequest request) {
...
}
}
有沒有更好的辦法?
謝謝。
納雷什
爲什麼你的解決方案不夠優雅?這是責任的完全分離。非事務性Web服務具有與事務性EJB不同的責任。它也可以讓你稍後改變事情。 – jhyot 2015-10-23 07:46:54