Ejb3 без сохранения состояния с CMT - PullRequest
1 голос
/ 18 февраля 2011

Возможно ли иметь что-то подобное? Код клиента в потоке с псевдокодом:

transaction.begin();
ejb.method();
transaction.commit();

method() принадлежит сессионному компоненту EJB3 без состояния, помеченному TransactionAttributeType.REQUIRED. method() может установить setRollbackOnly().

Если метод ejb устанавливает setRollbackOnly (), должны ли быть некоторые проверки перед попыткой зафиксировать транзакцию?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 18 февраля 2011

Вы также можете установить атрибут транзакции в вызываемом компоненте (метод) равным TransactionAttributeType.REQUIRES_NEW, чтобы вызвать новую транзакцию для вашего метода.

Кстати: обязательно вызовите прокси методов, если вы указали атрибут транзакции для метода . То есть вызов метода ejb, для которого задан определенный атрибут транзакции из того же самого , не будет работать так, как вы ожидаете ...

0 голосов
/ 18 февраля 2011

настройкой SLSB по умолчанию является семантика Tx, которую вы описываете.

Откат вручную возможен, указав EjbContext.setRollbackOnly () - это говорит Contaner ('C' в CMT), что он не должен фиксировать, а отменять транзакцию.

Если вы хотите полностью настроить транзакцию самостоятельно, вы все равно можете пометить вызывающий метод SLSB как NotSupported, а затем вручную открыть Tx, который вы можете перенаправить на другие вызовы SLSB.

...