Примеры или случаи использования для объяснения атрибутов транзакции EJB - PullRequest
21 голосов
/ 19 ноября 2009

Есть несколько хороших объяснений атрибутов транзакций EJB (и аннотаций), например, OpenEJB's .

Но иногда, когда я пытаюсь объяснить это кому-то, кто не работал со многими транзакционными ресурсами, я вижу, как его глаза начинают мерцать.

Итак, мой вопрос - как бы вы объяснили атрибуты транзакции EJB своей бабушке?

  • Обязательно
  • RequiresNew
  • Обязательно
  • NotSupported
  • Поддержка
  • Никогда

Я думаю, что придуманный пример, аналогия или краткий пример из реальной жизни были бы полезны.

Ответы [ 2 ]

46 голосов
/ 19 ноября 2009

Вы можете думать о них с точки зрения Сотрудничество . Допустим, вы повар, и у вас есть дюжина печей для работы. Вам нужно испечь несколько тортов. В этом примере you - вызываемый метод, духовка - транзакция, а ваш boss - вызывающая сторона.

  • Обязательно : если ваш босс велит вам испечь несколько пирожных, не сообщая вам, какую духовку вы используете, вы просто выбираете одну. В конце вы закрываете духовку, убеждаясь, что никто другой не сможет ее использовать.
  • Требуется Новый : Вы всегда будете печь пироги в бесплатной духовке, которую выберете. Если вы находитесь в процессе выпечки некоторых тортов, и ваш босс говорит вам испечь другую партию, вы прерываете текущий процесс выпечки, идете и выпекаете несколько тортов в новой духовке, возобновите выпечку для старых.
  • Обязательно : Вы тупой повар. Ваш босс всегда должен сказать вам, какую духовку вы должны использовать. Если ваш босс не скажет вам, какую духовку использовать, вы кричите «глупо!».
  • NotSupported : Думайте об этом как о приготовлении десерта, который не нуждается в духовке. Если вы собираетесь выпекать пирожные в духовке, остановите их, создайте десерт и возобновите выпечку.
  • Поддержка : Это больше подходит для помощника повара. Вы помощник. Если главный повар просит вас испечь пирог в духовке X, вы просто делаете это. Если он просит вас сделать десерт, вы просто делаете это. Основное отличие от остальных заключается в том, что вы никогда не задаете вопросов и не решаете что-либо делать Вы просто выполняете приказы.
  • Никогда : Это еще один тупой повар. Если ваш начальник просит вас сделать десерт, пока вы готовите пирог, вы кричите в ответ и говорите: «Я ухожу!». Никакой пирог никогда не выпекается. Поэтому ваш босс должен быть осторожен и просить вас испечь несколько пирожных, когда вы не печете какие-нибудь пирожные.

Надеюсь, это поможет.

13 голосов
/ 04 июня 2010

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

См. на этой странице для хорошего описания / обзора атрибутов транзакции.

Обязательно (REQUIRED @TransactionAttribute)
Ночной клуб

Появись в клубе, для входа нужен билет. Если у вас его нет, он будет (куплен?) Передан вам у двери.

Транзакция - БИЛЕТ.
Контейнер БУНКЕР.

Требуется новый (REQUIRES_NEW @TransactionAttribute)
Comedy club, минимум 1 напиток, без повторного входа

Появляйтесь в клубе, никакой еды / питья на улице, вы должны оставить их у двери. Чтобы войти, вы должны купить минимум 1 напиток каждый раз, когда уходите, и снова входите.

Транзакция - это НАПИТОК.
Контейнер БОУНКЕР.
Приостановка сделки УХОД В ДВЕРЬ.

Поддержки (SUPPORTS @TransactionAttribute)
Домашняя вечеринка

Появиться на вечеринке, алкоголь разрешен. Мы впустим вас, если у вас есть собственный алкоголь, а если нет, мы вас тоже впустим.

Транзакция - АЛКОГОЛЬ.
Контейнер ХОЗЯИН.

Обязательно (ОБЯЗАТЕЛЬНО @TransactionAttribute)
Пригласительная вечеринка

Приходите на вечеринку, вам нужно приглашение, чтобы войти: Если у вас его нет и вы пытаетесь войти, вышибала звонит властям.

Транзакция - это ПРИГЛАШЕНИЕ.
Контейнер ХОЗЯИН.
Бросить исключение - ВЫЗОВ ВЛАСТЕЙ.

Не поддерживается (NOT_SUPPORTED @TransactionAttribute)
Концерт, камеры запрещены.

Появиться на концерте, камеры запрещены. Вы можете оставить его у двери и забрать, когда уходите.

Транзакция - это КАМЕРА.
Контейнер DOORMAN.
Приостановка сделки УХОД В ДВЕРЬ.

Никогда (НИКОГДА @TransactionAttribute)
Высшая школа танцев

Появляются на танцах, алкоголь запрещен. Если вы попытаетесь войти с ним и поймать, сопровождающий звонит властям.

Транзакция - АЛКОГОЛЬ.
Контейнер ШАПЕРОН. Бросить исключение - ВЫЗОВ ВЛАСТЕЙ.

...