EJJB Таймер транзакции -XA Исключение - PullRequest
2 голосов
/ 10 августа 2011

Я использую EJB 3.0 timer. Когда вызывается мой метод Timeout, я использую JPA для вставки записи в одну из таблиц. Я использую JPA для сохранения данных. Я определил постоянный код в компоненте сеанса без состояния и вызваллокальный интерфейс внутри моего метода timeout. Я получаю следующее исключение, когда поток выходит из метода timeout:

javax.transaction.xa.XAException: JDBC driver does not support XA, hence cannot be a participant in two-phase commit.
   To force this participation, set the GlobalTransactionsProtocol attribute to LoggingLastResource (recommended) or EmulateTwoPhaseCommit for the Data Source

Наша БД не поддерживает транзакцию XA. Мы используем WL 10.3.1. Воткод, который я делаю:

@EJB
private MyejbLocal myejbLocal 

@Timeout
public void callEjb(timer) {
    try {
     myejbLocal .store();

    } catch (EntityExistsException e) {
        e.getMessage();

    } catch (Exception ex) {
        ex.getCause();
    }
}

Вот моя реализация:

@Override  
public void Store() {
    try {
        Mytable mytable= new Mytable (new Date());
        persist(mytable);

    } catch (EntityExistsException e) {
        e.getMessage();

    } catch (Exception ex) {
        ex.getCause();
    }

}

Я не вызываю flush() метод.

Пожалуйста, дайте мне знать, если япропустили что-нибудь?

1 Ответ

1 голос
/ 14 января 2016

Я тоже сталкивался с такой же проблемой. Вам нужно сохранить операцию сущности JPA в отдельном сессионном компоненте, и она будет работать.

http://prasunejohn.blogspot.in/2014/02/understanding-ejb-timer-service-31.html

...