Spring Transaction Management с использованием Hibernate и MySQL, глобального и локального - PullRequest
3 голосов
/ 19 апреля 2011

Я работаю над разработкой веб-приложения с MySQL Server 5.1, Spring 3.0.5 и Hibernate 3.6. Я использую управление транзакциями Springs. Я новичок, поэтому, пожалуйста, будьте терпеливы со мной, если я задам вопрос, на который легко ответить. : -)

1) Я читал о глобальных (xa) и локальных транзакциях. Верно ли, что глобальные транзакции означают транзакции, которые выполняют операции с данными на разных ресурсах (например, в разных базах данных). И что локальные транзакции выполняют операции с данными только на одном ресурсе (базе данных).?

2) Возможно ли иметь глобальные транзакции с Hibernate? В справочной документации Spring я прочитал это: "Вы также можете легко использовать локальные транзакции Hibernate, как показано в следующих примерах. В этом случае вам нужно определить Hibernate LocalSessionFactoryBean, который код вашего приложения будет использовать для получения Hibernate Экземпляры сеанса. " Вот почему я думаю, что транзакции Hibernate, возможно, всегда локальны, и я больше ничего не нашел об этом.

3) Почему возможно использование таблиц MyISAM с Hibernate? Они не поддерживают транзакции, и я думаю, что Hibernate требует транзакций? Я действительно не понимаю этого. Сначала я думал, что это невозможно, но почему тогда можно создавать таблицы MyISAM с помощью Hibernate и использовать MyISAM Dialect? Как это работает??? Hibernate требует транзакции или нет? Я думал, что для использования Hibernate вам нужно использовать InnoDB.

Спасибо, что ответили! : -)

1 Ответ

8 голосов
/ 20 апреля 2011
  1. Да, JTA, API для транзакций XA в Java, использует протокол двухфазной фиксации для выполнения глобальных транзакций.Если вам необходимо обеспечить согласованность транзакций для нескольких ресурсов, JTA является подходящим инструментом в Java.

  2. Hibernate работает с JTA .Настроить его немного сложнее, чем обычные локальные транзакции с обычными ресурсами, обычно он использует больше ресурсов из-за характера двухфазной фиксации, а качество реализации зависит от поставщика базы данных и драйверов, поэтому используйте его только при необходимости.(Например, JTA своего рода работает с MS SQL Server, но эта функциональность ограничивается только набором хранимых процедур. Другие ресурсы могут не поддерживать все стандарты, например, не позволяют приостанавливать транзакцию и позже возобновлять ее.Если вам это не нужно, избавьте себя от проблем.)

  3. Вы можете использовать MyISAM с Hibernate, но транзакции не будут работать.Hibernate будет запускать и фиксировать транзакции в обычном режиме, который механизм хранения MyISAM будет игнорировать в молчании, поэтому все будет идти прямо на диск.Используйте механизм хранения по умолчанию, InnoDB, если у вас нет причин не делать этого.

...