Transactions EJB3.0事务边界从一个本地EJB调用另一个本地EJB
设想以下两个ejb3.0无状态会话bean,每个bean实现一个本地接口,并部署到同一容器中:Transactions EJB3.0事务边界从一个本地EJB调用另一个本地EJB,transactions,jakarta-ee,ejb-3.0,Transactions,Jakarta Ee,Ejb 3.0,设想以下两个ejb3.0无状态会话bean,每个bean实现一个本地接口,并部署到同一容器中: public class EjbA { @EJB private ejbB; public void methodA() { for (int i=0; i<100; i++) { ejbB.methodB(); } } } public class EjbB { public void
public class EjbA {
@EJB
private ejbB;
public void methodA() {
for (int i=0; i<100; i++) {
ejbB.methodB();
}
}
}
public class EjbB {
public void methodB() {
...
}
}
公共类EjbA{
@EJB
私人ejbB;
公开无效方法a(){
对于(int i=0;i,这取决于您的事务属性-您可以使用@TransactionaAttribute注释将其设置为以下属性之一:
- 必需的
- 需要新的
- 支持
- 强制性的
- 不支持
- 从来没有
REQUIRED是默认值,如果没有事务,则将启动新事务,否则容器将使用现有事务
REQUIRES_NEW告诉容器始终启动新事务
根据我的经验,其他选项不太常用,但它们都是在EJB规范中定义的
例如:
@Stateless
public class EjbA {
@EJB
private ejbB;
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void methodA() {
for (int i=0; i<100; i++) {
ejbB.methodB();
}
}
}
@无状态
公共类EjbA{
@EJB
私人ejbB;
@TransactionAttribute(TransactionAttributeType.REQUIRES\u NEW)
公开无效方法a(){
对于(inti=0;i,这取决于您如何为每个方法定义事务策略
如果在方法B和A中需要:它将对这两种方法使用相同的事务
如果A需要新事务,B需要新事务:它将为方法B创建新事务