2010-07-02 2 views
4

Im работает в WebSphere Application Server 7, JDK 1.6 и Oracle 11g.Ресурс DATASOURCE откат в очистке LocalTransactionContainment

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

[7/1/10 17: 12: 28: 770 СЭП] 00000013 LocalTranCoor Вт WLTC0033W: Ресурс JDBC/oraDS11 откат в очистке LocalTransactionContainment. [7/1/10 17: 12: 28: 773 СЭП] 00000013 LocalTranCoor Вт WLTC0032W: Один или более локальные ресурсы транзакций были откат во время очистки от в LocalTransactionContainment.

Вот как им получить соединение с источником данных в WAS.

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

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

ответ

5

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

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

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

  • Явное совершить локальную транзакцию

    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», а затем «Локальная транзакция» установила «Неразрешенные действия» на «Зафиксировать» от выпадающего меню.

я предлагаю совершить работу явно (и читать весь ответ).

+0

erm .. Я изменил неразрешенное действие, чтобы не откатывать назад (по умолчанию) ... а также, что делает im, это простой выбор ... Мне не нужно делать фиксацию после любого выбора. . Сообщение появляется после выбора .. –

+1

@Garis Вам необходимо зафиксировать после выбора (как указано в ссылке): * каждое открытое соединение должно быть объявлено (или отменено) явно перед закрытием. Даже если все, что вы сделали с этим соединением, - это запрос SELECT. * –

1

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

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