用例解释EJB事务属性的示例

时间:2009-11-18 22:18:42

标签: java transactions java-ee ejb-3.0

对EJB事务属性(和注释)有一些很好的解释,例如OpenEJB's

但有时当我试图用一些没有使用过很多交易资源的人来掩盖这一点时,我看到他们的眼睛开始茫然。

所以我的问题 - 您如何向祖母解释EJB交易属性?

  • 必需
  • RequiresNew
  • 强制性
  • notsupported时
  • 支架
  • 从不

我认为一个人为的例子,类比或简洁的现实用例会有所帮助。

2 个答案:

答案 0 :(得分:46)

您可以根据协作来考虑它们。假设你是一名厨师,你可以和十几个烤箱一起工作。你需要烤一些蛋糕。对于此示例,是被调用的方法,烤箱是交易,而你的老板是来电者。

  • 必填:如果你的老板告诉你在不告诉你使用什么烤箱的情况下烤一些蛋糕,你只需要选择一个。最后,关闭烤箱,确保没有其他人可以使用它。
  • 需要新的:您总是在自己选择的免费烤箱上烤蛋糕。如果你正在烘烤一些蛋糕的过程中,而你的老板告诉你再烤一批,你就会打断当前的烘焙过程,去新烤箱烤一些蛋糕,然后继续烘焙旧蛋糕。
  • 强制性:你是一个愚蠢的厨师。你的老板总是必须告诉你你必须使用什么烤箱。如果你的老板不告诉你使用什么烤箱,你会大喊“愚蠢!”。
  • NotSupported :将此视为做一个不需要烤箱的甜点。如果你正在烤箱里烘烤一些蛋糕,你可以停下来,制作甜点,然后把蛋糕烘烤的简历。
  • 支持:这更适合厨师的助手。你是帮助者。如果主厨要你用烤箱X烤蛋糕,你就是这么做的。如果他要你做甜点,你就是这么做的。与其他问题的主要区别在于,您从不提出任何问题,也不会选择做任何事情。你只需遵守命令。
  • 从不:这是另一个愚蠢的厨师。如果你的老板在你正在烘烤蛋糕的过程中要求你做一个甜点,你会大喊“我退出了!”。没有蛋糕烤过。因此,你的老板必须要小心,只要你在没有烘烤任何蛋糕时烤一些蛋糕。

希望有所帮助。

答案 1 :(得分:13)

我认为根据容器与调用者与EJB方法的交互作为真正的监视器来考虑这一点是有道理的...所以我想使用保镖隐喻在各种不同的场景中。

有关交易属性的详细说明/概述,请参阅this page

必填(必需@TransactionAttribute)
夜总会

出现在俱乐部,需要一张入场券。如果你没有,它将在门口送给你(购买?)。

  

交易是TICKET   容器是BOUNCER。

需要新功能(REQUIRES_NEW @TransactionAttribute)
喜剧俱乐部,最少1杯饮料,无需重新入场

出现在俱乐部,没有外面的食物/饮料,你必须把它们留在门口。要进入,每次离开并重新进入时,必须至少购买1杯饮料。

  

交易是DRINK   容器是BOUNCER   暂停交易是在门口离开。

支持(SUPPORTS @TransactionAttribute)
众议院派对

出现在派对上,允许饮酒。如果你有自己的酒,我们会让你进去,如果你不这样做,我们也会让你进去。

  

交易是ALCOHOL   容器是主机。

强制性(强制性@TransactionAttribute)
仅限邀请方

出现在派对上,需要一个邀请才能进入:如果你没有,并试图进入,保镖会打电话给当局。

  

交易是邀请   容器是主机   抛出异常就是要求当局。

不支持(NOT_SUPPORTED @TransactionAttribute)
音乐会,禁止使用相机。

在音乐会上出现,禁止使用相机。你可以把它留在门口,当你离开时把它捡起来。

  

交易是CAMERA   容器是DOORMAN   暂停交易是在门口离开。

从不(从不@TransactionAttribute)
高中舞蹈

出现在舞会上,禁止饮酒。如果你试图接受它并被抓住,那么监护人就会打电话给当局。

  

交易是ALCOHOL   容器是CHAPERONE。   抛出异常就是要求当局。