Java Транзакции API и.NET System.Transactions
Я анализирую различные варианты поведения между JTA (API транзакций Java) и аналогом.NET System.Transactions: подход между ними совершенно различен. На самом деле, версия Транзакции на Java выглядит скорее как спецификация, оставляя разработчикам обязательство реализовывать либо Transactions
, TransactionManager
и другие интерфейсы определены.
.NET имеет более конкретную реализацию, которая не позволяет разработчикам определять свои собственные Transaction
объект, но предоставляя интерфейсы для обработки ресурсов, управляемых в течение времени жизни транзакций (в то время как Java предоставляет некоторые интерфейсы XTA* для той же цели)
Мне интересно, был ли когда-нибудь когда-нибудь повод портировать Java-код, использующий JTA, на.NET, и какие основные отличия он заметил.
Кроме того, кто-нибудь может объяснить мне поведение
TransactionManager.setRollbackOnly
противTransactionManager.rollback
(в JTA)? .NET версия имеет толькоTransaction.Rollback
метод, который является более обязательным.
1 ответ
rollback() отправляет фактическую команду отката базовым ресурсам. setRollbackOnly() помещает маркер в текущую транзакцию, которая читается, когда пришло время принять решение о коммите или откате. После вызова setRollbackOnly () единственным возможным результатом является откат, но вызов отката фактически не выполняется при вызове setRollbackOnly ().
Это идея обоих методов. Я не уверен в том, насколько разные реализации делают это различие, и даже если setRollbackOnly () будет выполнять откат при вызове, это не будет иметь практического значения.