Контекст транзакции дает доступ к специальным функциям, применяемым для указания критических точек в обработке транзакции. В зависимости от применяемого типа демаркации эти функции вызываются либо вручную разработчиком EJB, либо автоматически контейнером EJB. Обычно они называются разделителями или методами демаркации транзакции.
· begin — указывает, что транзакция начинает работу.
· commit: — указывает, что транзакция завершилась успешно и должна быть зафикси рована в базе данных.
· rollback — указывает, что транзакция по каким-то причинам потерпела неудачу и не должна быть зафиксирована. Хорошая функция отката (rollback) должна вернуть объект сеанса в состояние, в котором он был перед началом транзакции.
Контекст может использоваться в одном деловом методе либо в любом количестве обращений к сеансовому компоненту. Следует заметить, что транзакции не могут быть вложенными.
Транзакции, управляемые компонентами
Первая разновидность демаркации транзакций носит название демаркации с управлением от компонента. Такие транзакции также называются управляемыми клиентом или управляемыми компонентом. В любом случае, указание этой разновидности в описателе развертывания означает, что клиент сам создаст код обработки транзакции, возможно, с использованием интерфейса javax. transaction.User-Transaction, и выполнит демаркацию, вызвав в нужные моменты функции begin, commit или rollback.
Демаркация этого типа дает пользователю больше возможностей управлять ею, но во многих случаях, когда операции в транзакциях можно подвести под один стандарт, это потребовало бы от разработчика EJB лишней работы. В результате могло бы исчезнуть одно из основных преимуществ сеансовых компонентов.
Применение транзакций, управляемых компонентом, может быть оправданным, когда транзакция распространяется более чем на один деловой метод.
Транзакции, управляемые контейнером
В большинстве случаев для клиента удобнее поручить задачу демаркации контейнеру EJB. Если транзакция управляется контейнером, он сам знает, как и когда вызывать функции begin и commit и когда выполнять необходимые стандартные действия для отката транзакции.
Этот метод дает разработчику EJB меньше возможностей контролировать, что на самом деле происходит в разные моменты транзакции. Но появляется важное преимущество — все низкоуровневые операции выполняются автоматически, и само это обычно бывает достаточной причиной для использования этого режима.
В некоторых случаях разработчику EJB может понадобиться, чтобы непосредственно перед началом или сразу после завершения транзакции проводилась какая-то нестандартная обработка. В такой ситуации можно не уходить от режима управления от контейнера, но использовать в то же самое время специальные методы, вызываемые через интерфейс SessionSynchronization.
Интерфейс SessionSynchronization
В случае транзакций, управляемых контейнером, у разработчика EJB есть дополнительная возможность написать собственные методы для интерфейса SessionSynchronization. Этот вариант применим только для сеансовых компонентов. В этом случае контейнер EJB сам производит демаркацию транзакции, но также позволяет перезагрузить в классе компонента следующие три метода.
· af terBegin — вызывается сразу после вызова begin для транзакции, но до начала выполнения делового метода.
· beforeCompletion — вызывается сразу после вызова commit для транзакции, но до того, как commit фактически начинает работу над транзакцией. Это последний момент, когда сеанс может произвести откат транзакции.
· afterCompletion — вызывается после вызова commit для транзакции и сразу после окончания его работы над транзакцией. В этом методе возвращается параметр логического типа, который сообщает, была ли на самом деле фиксация транзакции успешной.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.