powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JavaEE Управление транзакциями в запутанном случае
6 сообщений из 6, страница 1 из 1
JavaEE Управление транзакциями в запутанном случае
    #37800253
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Есть JBoss 6.1, в нём JEE-6 приложение.
Есть _НЕ_ JTA источник данных. Используется в логин-модуле
Код: sql
1.
2.
3.
4.
5.
<persistence-unit name="Common.auth" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <non-jta-data-source>java:/jdbc/Common</non-jta-data-source>
    <class>....</class>
  </persistence-unit>



Надо прочитать объект из БД. Использую код
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
    EntityManagerFactory emf =
      Persistence.createEntityManagerFactory("Common.auth");
    EntityManager em = emf.createEntityManager();
    em.getTransaction().begin();
    final Query qu = em.createQuery(
        "select t from AdmOper t where ...");
    oper = (AdmOper) qu.getSingleResult();
    em.getTransaction().commit();



Если в этот код попадаем из EJB-вызова с клиента- всё хорошо. А если
попадаем сюда из @Timeout, потом через получение контекста
аутентификации попадаю в мой код, то сначала на commit() получаю ругань

ERROR [JDBCTransaction ] JDBC commit failed:
java.sql.SQLException: You cannot commit during a managed transaction!

а потом на то, что не закрыл транзакцию

INFO [CachedConnectionManager ] Closing a connection
for you. Please close them yourself:
org.jboss.resource.adapter.jdbc.jdk6.WrappedConnectionJDK6@1fe63bb:
java.lang.Throwable: STACKTRACE

Объясните мне, как такое может быть- сначала ругают, что закрываю
транзакцию, а потом- что не закрываю :)

Причём если удаляю em.getTransaction().begin(); и
em.getTransaction().commit(); то остаётся только ошибка "не закрыл..."

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
JavaEE Управление транзакциями в запутанном случае
    #37801791
marx_freedom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как в jboss датасорс настроен, тот, что в java:/jdbc/Common?
Если пишет "You cannot commit during a managed transaction!", то похоже что транзакцию уже начал контейнер, то работы с em. Я jboss давно не видел, но в доке написано что датасорсы бывают no-tx-, local-tx- и xa-. Для описанного случая я бы no-tx- выбрал.
...
Рейтинг: 0 / 0
JavaEE Управление транзакциями в запутанном случае
    #37803222
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, marx_freedom!

> А как в jboss датасорс настроен, тот, что в java:/jdbc/Common?

Да обычный- он у меня везде.

> Если пишет "You cannot commit during a managed transaction!", то похоже
> что транзакцию уже начал контейнер, то работы с em.

Так вот интересно, что если не завершать- то ошибка "что ж ты транзакции
кидаешь" :)

> Я jboss давно не
> видел, но в доке написано что датасорсы бывают no-tx-, local-tx- и xa-.
> Для описанного случая я бы no-tx- выбрал.

transaction-type="RESOURCE_LOCAL" - это оно и есть.

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
JavaEE Управление транзакциями в запутанном случае
    #37803428
marx_freedom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GKS_Samara> А как в jboss датасорс настроен, тот, что в java:/jdbc/Common?

Да обычный- он у меня везде.

Ну вот "обычный" - это какой? =) Попробуй no-tx-datasource, именно датасорс, а не настройки persistence unit.
Мне кажется что ошибки "не закрыл" мониторятся на другом уровне - их кидает CachedConnectionManager и ему все равно, кто (какой код) закрывает коннекшен.
...
Рейтинг: 0 / 0
JavaEE Управление транзакциями в запутанном случае
    #37803503
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, marx_freedom!
>>> А как в jboss датасорс настроен, тот, что в java:/jdbc/Common?
>> Да обычный- он у меня везде.
> Ну вот "обычный" - это какой? =) Попробуй no-tx-datasource, именно
> датасорс, а не настройки persistence unit.

Помогло, спасибо!

> Мне кажется что ошибки "не закрыл" мониторятся на другом уровне - их
> кидает CachedConnectionManager и ему все равно, кто (какой код)
> закрывает коннекшен.

Не то, чтобы понятно, но проясняется. Спасибо!

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
JavaEE Управление транзакциями в запутанном случае
    #37804443
marx_freedom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо, что помогло =)

GKS_Samara> Мне кажется что ошибки "не закрыл" мониторятся на другом уровне - их
> кидает CachedConnectionManager и ему все равно, кто (какой код)
> закрывает коннекшен.

Не то, чтобы понятно, но проясняется. Спасибо!

Слово CachedConnectionManager я взял прям из текста ошибки в первом посте, в деталях реализацию jboss не копал =) Смысл в том, что в современных контейнерах управления транзакциями - одна служба, а мониторинг коннекшенов - другая.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / JavaEE Управление транзакциями в запутанном случае
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]