Ресурс DATASOURCE откатился при очистке LocalTransactionContainment - PullRequest
4 голосов
/ 02 июля 2010

Я работаю в WebSphere Application Server 7, JDK 1.6 и Oracle 11g.

Я всегда получаю эту ошибку при использовании ejb.

[01.07.10 17: 12: 28: 770 BOT] 00000013 LocalTranCoor W WLTC0033W: Ресурс jdbc / oraDS11 откатился в очистку LocalTransactionContainment. [7/1/10 17: 12: 28: 773 БОТ] 00000013 LocalTranCoor W WLTC0032W: один или больше локальных ресурсов транзакций откатился во время очистки LocalTransactionContainment.

Вот как я получаю соединение из источника данных в WAS.

javax.sql.DataSource ds = (javax.sql.DataSource) naming.lookup("DataSource");
conn= ds.getConnection();

Любая помощь будет оценена ...

Ответы [ 2 ]

6 голосов
/ 05 июля 2010

Из сообщения об ошибке вы выполняете некоторую работу внутри локальной транзакции и не фиксируете ее . Неподтвержденная работа откатывается контейнером в конце метода (по умолчанию).

Этот ответ на Откат источника данных в WAS6.0 обобщает все это довольно хорошо, и, поскольку нет смысла перефразировать его, я цитирую его ниже.

A LocalTransactionContainment это что вы получаете в отсутствие глобального (XA) транзакция. Сообщение указывает на то, что вы выполнили локальная транзакция работа как часть этого область содержания (метод или деятельность сеанс), а затем не совершил . поведение по умолчанию (контролируется unresolved-action) откатить любой безудержная работа в конце объем. У вас есть несколько вариантов:

  • Явная фиксация локальной транзакции

    connection.commit(); // after the work has been performed
    
  • Изменить источник данных для использования автоматической фиксации

    connection.setAutoCommit(true); //
    

    до использования соединения

  • Поместить работу в глобальную транзакцию

    Context ic = new InitialContext();
    UserTransaction ut =
    (UserTransaction) ic.lookup("java:comp/UserTransaction");
    ut.begin();
    // use connection here
    ut.commit();
    
  • Изменить нерешенное действие для принятия
    Выберите вкладку «Сервлеты» на редактор дескриптора развертывания и затем выберите нужный сервлет. В разделе «Расширения WebSphere», а затем «Локальная транзакция» установить «Неразрешенное действие» - «совершить» из раскрывающееся меню.

Я бы предложил зафиксировать работу явно (и прочитать весь ответ).

1 голос
/ 29 декабря 2011

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

...