безопасность транзакций в спящем режиме (с JBoss, без) - PullRequest
0 голосов
/ 12 января 2011

В настоящее время я использую только Hibernate и tomcat (без JBoss), и у меня есть транзакции гибернации, которые мне не ясны, какой уровень безопасности транзакций я на самом деле использую, особенно для тех, которые читают и получают значения, а затем обновляют их) , Таким образом, я могу получить грязные чтения?

Итак, я собираюсь начать изучать мои транзакции, которые требуют нечистого чтения, и убедиться, что (1) hibernate правильно контролирует уровень безопасности транзакций этих транзакций, и (2) будет иметь возможность транзакции, где грязное чтение в порядке.

Нужно ли устанавливать Hibernate с JBoss для контроля уровня безопасности транзакций? Если это так, то как проще всего это сделать, не меняя приложения на API J2EE, так как в настоящее время я использую API Hibernate? Или лучше, я могу получить контроль JTA с Hibernate без использования JBoss?

Andy

Ответы [ 2 ]

0 голосов
/ 12 января 2011

Вы явно отмечаете свои транзакции с помощью em.getTransaction (). Begin () и commit ()? Если это так, Hibernate делегирует управление транзакциями драйверу JDBC, и это можно настроить с другими свойствами (как на уровне драйвера, так и на уровне Hibernate, например, на уровнях изоляции).

Если вы затем решите использовать сервер приложений, вы можете просто установить для свойства hibernate.transaction.factory_class значение org.hibernate.transaction.JTATransactionFactory, и Hibernate присоединится / создаст транзакцию на основе ваших инструкций (em.getTransaction () .begin () / commit ()).

JTA особенно полезен, если у вас есть два или более компонента с поддержкой транзакций, так как JTA управляет событиями и заказами фиксирует / откатывает в зависимости от общего результата. Например, если у вас есть одна транзакция EJB, которая что-то сохраняет в базе данных и отправляет электронное письмо, оба действия могут быть внутри транзакции, и ее можно откатить в случае сбоя любого из них. Но если вас интересуют только транзакции с базой данных, вам не нужен JTA.

И чтобы ответить на ваш последний вопрос: если вам нужен JTA, но вы не хотите использовать сервер приложений EE, вы можете найти автономных JTA-провайдеров, таких как JOTM. Но будьте осторожны: если вы обнаружите, что добавляете несколько «автономных» провайдеров для различных услуг, у вас может получиться «домашний EE-сервер», что не очень хорошо; -)

0 голосов
/ 12 января 2011

Это известно как уровни изоляции транзакций , и ниже представлен способ их настройки в hibernate

hibernate.connection.isolation - Установите уровень изоляции транзакции JDBC.Проверьте java.sql.Connection на предмет значимых значений, но обратите внимание, что большинство баз данных не поддерживают все уровни изоляции.например.1, 2, 4, 8

...