JNDI DataSource транзакцииJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 JNDI DataSource транзакции

Сообщение Anonymous »

У нас есть веб -приложение, работающее на дикой стадии, используя данные JNDI для обработки операций, связанных с базой данных. Во время операции по модернизации мы в настоящее время меняем EJBS на пружину в качестве первого шага, чтобы сделать приложение, способное работать на более простом контейнере сервлета, таким как Tomcat. /code> to @service и, очевидно, изменение аннотаций @TransActionAl из Annotations Jakarta на Annotations Spring , наше поведение транзакции внезапно нарушается. br /> Как часть теста, у нас есть испытательный приход, который примерно делает следующие < /p>

Код: Выделить всё

// Within a @Transactional(REQUIRED) block
Connection con = getConnection(...) (1)
// do some sql updates (2)

try {
// Start @Transactional(REQUIRES_NEW) block
Connection con2 = getConnection(...) (3)
// do some more sql updates (4)
throw new Exception();
// End REQUIRES_NEW block
} catch (Exception ignored) {
}

// End Required block
< /code>
Ожидается, что наш тестовый пример заканчивается тем, что обновления SQL из (2) были видны в базе данных, обновления SQL из (4) не видно, как соединение Con2 следует выполнять в рамках другой транзакции, которая должна была быть откатана обратно на исключение. Нет откатов. Судя по всему, CON и CON2 являются одним и тем же объектом или, по крайней мере, ссылкой на ту же основную транзакцию Wildfly. И только для ссылки: если все бобы и транзакции переключены на аннотации Джакарты, это работает. Блок представляет собой обратный вызов, выполненный в отдельном весеннем бобе, аннотированном с @transactional 
. Мы видим, что это приводит к тому, что пружина, построенная вокруг сервиса, и мы можем видеть, что после завершения/прерывания кода коммит/откат выполняется на JbosswrappedDatasource.
Итак Наше предположение состоит в том, что (3) не знает о вновь начальной транзакции и дает нам внешний транзакцию. Итак, мы посмотрели на код, получающий транзакцию. Первоначально это был какой -то поиск с помощью javax.initialContext . Мы предположили, что поиск, связанный с пружиной, может сделать трюк и переключиться на jndidatasourcelookup из Spring, и когда это не сделало трюк, мы также поместили полученный DataSource через DataSourceUtils Класс с весны. < /p>
Что мы сделали неправильно? Как мы можем получить второе соединение, связанное с контекстом внутренней транзакции?

Подробнее здесь: https://stackoverflow.com/questions/794 ... ansactions
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»