2016-06-22 4 views
2

Я работаю над проектом с использованием следующих технологий: Java 1.8, EJB 3, JSF (Primefaces), Oracle, Weblogic 12.2.1Прервать EJB сделка с JSF UI

У меня есть кнопка, которая запускает "Сохранить" долговременная транзакция EJB (чтение, обновление, запись в Oracle).

В то время как метод запускается, пользователь видит модальный диалог «Подождите» с кнопкой «Отмена». Как я могу отменить (явный откат) мою транзакцию EJB, когда пользователь нажимает кнопку «Отмена» без разблокировки моего (Primefaces) интерфейса?

В сущности, как откат уже запущенной транзакции с помощью другого метода? Сделки - транзакции, управляемые контейнером.

Фрагмент моего кода:

@Named 
@ViewScoped 
public class MyBean implements Serializable { 

    @Inject 
    private IFacade facade; 

    public String save() { 
     facade.save(); 
    } 

    public void abortSave() { 
     // Cancel save transaction. 
    } 

} 

@Stateless 
public class FacadeImpl implements IFacade { 

    @Override 
    public String save() { 
     // Transaction here, read, write, update DB. 
    } 

} 
+0

Как об использовании http://docs.oracle.com/javaee/6/api/ javax/ejb/EJBContext.html # setRollbackOnly() – Amit

ответ

0

Я могу себе представить только одно решение: У вас есть какой-то разделяемый объект (поле в управляемом JSF фасоли) с летучим флагом "isCancelled" (или этот общий объект может быть AtomicBoolean).

Этот объект передается с параметром IFacade.save(). В методе сохранения вы можете проверить отмененный статус там, где хотите, и выполнить транзакцию с откатом через EJBContext.setRollbackOnly().

-1

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

+0

Это будет означать создание собственного журнала транзакций, диспетчера транзакций и т. д. Я бы этого не пробовал. И это все равно не приведет к откату/остановке транзакции на полпути. Если вы хотите отреагировать в конце транзакции, как вы предлагаете, проще явно откатить транзакцию транзакцией вместо фиксации – Kukeltje

+0

Не забудьте создать журнал транзакций. и невозможно (или легко) вмешаться в транзакцию CMT или BMT, поскольку EJB является потокобезопасным –

Смежные вопросы