Тайм-аут транзакции установлен в Websphere - PullRequest
0 голосов
/ 29 мая 2020

Я работаю на сервере приложений Websphere, как показано в приведенном ниже коде, это простой бин шлюза, я вызываю метод dispatcherRequest из другого метода с поиском, но транзакция запускается каждый раз, когда я вызываю, но время ожидания транзакции установлено по умолчанию значение на веб-сфере. Я хочу изменить тайм-аут с помощью кода, я хотел бы упомянуть, что мы должны использовать управление транзакциями контейнера.

@Stateless(name = "EJBGatewayServiceCMT")
public class EJBGatewayServiceBean implements EJBGatewayService {

@Resource
private SessionContext ctx;


@Override
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void dispachRequestObject(Object inputData, Object outputData, Dispacher dispacher) {
    try {
        dispacher.doDispach(inputData, outputData);
    } catch (Throwable t) {
        ctx.setRollbackOnly();
    }
}

1 Ответ

0 голосов
/ 05 июня 2020

К сожалению, два ваших требования (установка тайм-аута транзакции в коде и использование транзакций, управляемых контейнером) несовместимы, поэтому это невозможно. Чтобы ваш код установил тайм-аут транзакции, вам необходимо использовать транзакцию, управляемую bean-компонентом, и в этом случае вы можете использовать ejbContext.getUserTransaction().setTransactionTimeout(seconds) до начала транзакции. В случае транзакций, управляемых контейнером, транзакция уже запущена контейнером к тому моменту, когда он вводит ваш метод, и уже слишком поздно изменять для нее тайм-аут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...