У меня есть EJB (закодированный с использованием аннотаций Java EE 6), который определяется следующим образом:
@Stateless
@WebService
public class SecurityWebService {
public void registerUser(RegistrationRequest request) {
...
}
}
Обратите внимание, что этот EJB также отображается как веб-сервис. Однако у меня возникла проблема с созданным веб-сервисом. WSDL, сгенерированный моим контейнером (GlassFish), содержит политики WS-Atomic Transaction, поскольку сессионный компонент без сохранения состояния по умолчанию является транзакционным (см. Подробности здесь ). К сожалению, мой клиент .NET задыхается от WSDL, потому что он не понимает политики WS-AT.
Итак, что мне действительно нужно, так это приятный и чистый веб-сервис, который не является транзакционным, но связанный с ним EJB-компонент должен быть транзакционным (он должен вставлять записи в базу данных). Как мне это сделать? Единственный подход, который я могу придумать, - это создать «нормальный» веб-сервис, который передает все свои вызовы в EJB, как это - совсем не элегантно:
@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) {
...
}
}
Есть ли лучший способ?
Спасибо.
Naresh