Как представить EJB как веб-сервис, который не является транзакционным? - PullRequest
1 голос
/ 03 декабря 2010

У меня есть 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

1 Ответ

0 голосов
/ 03 декабря 2010

Вы можете попробовать аннотировать метод:

@TransactionAttribute(TransactionAttributeType.NEVER)

или

@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)

Не знаю, поймет ли это веб-служба или нет, но стоит попробовать.

Редактировать для комментария:

Вы пробовали REQUIRES_NEW? Они вполне могут не распространяться обратно на веб-сервис.

В противном случае, да, вы застрянете, сталкивая транзакционную часть с не транзакционным веб-сервисом.

...