Jpa EJB会话bean/方法事务属性

Jpa EJB会话bean/方法事务属性,jpa,ejb-3.1,glassfish-4,Jpa,Ejb 3.1,Glassfish 4,我负责EJB3.1/JPA,这是我们在Glassfish 4.0上运行的项目的一部分。我对EJB非常陌生,因此对会话bean(和/或其方法)事务属性不是很有信心。我正在处理无状态会话bean。 我了解到,不支持、从不支持事务属性应该谨慎使用,因为它们的行为因应用服务器供应商而异。事实上,我在其他资料中找不到这样的说法。它们真的是特定于供应商的吗?另外,不注释方法或bean默认为它所需的事务属性是否正确 还有这里的情况。让我们来看事务T和两个无状态bean A和B,方法是mA和mB。马打电话给mB

我负责EJB3.1/JPA,这是我们在Glassfish 4.0上运行的项目的一部分。我对EJB非常陌生,因此对会话bean(和/或其方法)事务属性不是很有信心。我正在处理无状态会话bean。 我了解到,不支持、从不支持事务属性应该谨慎使用,因为它们的行为因应用服务器供应商而异。事实上,我在其他资料中找不到这样的说法。它们真的是特定于供应商的吗?另外,不注释方法或bean默认为它所需的事务属性是否正确

还有这里的情况。让我们来看事务T和两个无状态bean A和B,方法是mA和mB。马打电话给mB。这些方法的事务属性有哪些可能的组合,以使事务T成功进行?我知道如果mA有要求,而mB从未抛出异常。mB上的支持是否适用于任何类型的传入事务—例如确保任何事务都能通过此方法而不会出错的安全选项?
谢谢

GlassFish 4.0是JavaEE7的参考实现,根据it支持企业JavaBeans 3.2()


我了解到,不支持、从不支持事务属性应该谨慎使用,因为它们的行为因应用服务器供应商而异。我在其他来源中找不到警报,而不是我提到的来源。如果我对此感到担心,请告诉我

基本上,EJB规范说明了实现什么而不是如何实现,因此,由于我们不是生活在一个完美的世界中,所以仍然可能存在一些罕见的情况。我想这就是你被警告的原因。从另一方面来说,我并不担心这一点,因为GlassFish在世界各地被广泛使用,而且它肯定符合JSR规范


另外,不注释方法或bean默认为必需的事务属性是否正确

是的,这是正确的。根据EJB3.2规范,第8.3.7章Bean方法的事务属性规范:

默认情况下,方法的事务属性的值
需要具有容器管理的事务划分的bean
事务属性,事务属性不需要
在这种情况下,必须明确指定。

您能给我一个建议吗?我可以在一个给定事务的一个调用堆栈中找到不同EJB的不同方法上事务属性的正确或不正确组合

知识的最终来源是所提到的EJB规范(更具体地说是第8.6章),但是您会发现很多有用的文章。 一般来说,请仔细查看与事务传播和事务划分相关的主题


是否支持将属性adapt method/bean与具有任何事务属性的调用方法/bean相适应,以便不会发生错误


不是真的。我想说,支持传播调用方法/bean的事务上下文(如果有的话),因此,您可以在中安全地查询数据,但应避免更改持久性上下文的操作。

>它们的行为因应用程序服务器供应商而异-您在哪里看到了这一点?为了澄清这个问题,您应该向JSR-318规范说明什么是标准。第13.6.2节描述了事务划分模型-请仔细阅读。这是你应该信任的来源。