当前位置: 首页 > 知识库问答 >
问题:

Java EE@transactionmanagement.bean-它如何与容器管理bean结合?

訾渝
2023-03-14
@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
public class SessionBean1 {
    @Inject private SessionBean2 sessionBean2;

    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    public void callSessionBean2(){
        sessionBean2.doThingsThatMightCauseException();
    }
}

@Singleton
@TransactionManagement(TransactionManagementType.BEAN)
public class SessionBean2 {
    public void doThingsThatMightCauseException(){...}
}

共有1个答案

薛浩言
2023-03-14

正如EJB 3.1规范(§13.6.1)中所声明的,调用者的事务将被挂起:

如果客户端请求与事务T1相关联,而实例与事务不相关联,则容器将挂起客户端的事务关联,并使用未指定的事务上下文调用方法。当方法(连同任何关联的拦截器方法)完成时,容器恢复客户端的事务关联(T1)。

因此,与sessionbean1相关联的事务将被挂起,sessionbean2引发的异常将由调用bean以适当的语义处理(即由CMT会话处理)

您的代码是正确的,尽管我宁愿使用:

@TransactionManagement(TransactionManagementType.CONTAINER)
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public class SessionBean2 {
    public void doThingsThatMightCauseException(){...}
}

同样的效果。

您遇到的问题可能与@singleton注释有关,根据§4.8.5.3和§4.8.5.3将bean默认为:

@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
@Lock(LockType.WRITE)

把它包起来:

您需要(适当注意共享状态)更改dothingsthatmightcauseException上的访问锁:

@Lock(LockType.READ)
public void doThingsThatMightCauseException(){...}

这将删除访问序列化,希望能解决超时问题。

    null
 类似资料:
  • 我对javaee/EJB比较陌生,我已经读了很多关于javaee容器的书。我有使用web容器(JBoss中的WAR文件)的经验。我还知道JBoss也可以用作JavaEE容器。 JavaEE容器和Web容器之间的区别是什么? 我知道JavaEE也能够包含一个。战争档案。它们不同吗?它们的区别是什么?是否有特定于供应商的偏好,哪一个更好?

  • 主要内容:方式一,方式二 ,扫描并注册Service Bean,扫描并注册Reference Bean前言         本文由于涉及到Spring 框架内容比较多,看此篇文章的同学需要具备对Spring框架较深刻的理解。          前面提到Dubbo是一个分布式的RPC框架,我们学到了dubbo的rpc调用、网络框架netty、SPI等,这部分讲的是Dubbo是如何管理Dubbo里的Bean,Dubbo框架里主要有2种Bean,分别为: Service Bean 和Reference

  • 创建容器docker run 创建容器 # docker run --name rhel7.4 registry.access.redhat.com/rhel7-atomic:7.4-119docker run 创建容器并进入命令行 # docker run --name rhel7.4 -it registry.access.redhat.com/rhel7-atomic:7.4-119 /b

  • 主要内容:1、什么是注解,2、Spring 针对 Bean 管理中创建对象提供注解,3、基于注解方式实现对象创建,4、开启组件扫描细节配置,5、基于注解方式实现属性注入,6、完全注解开发1、什么是注解 (1)注解是代码特殊标记,格式:@注解名称(属性名称=属性值, 属性名称=属性值…) (2)使用注解,注解作用在类上面,方法上面,属性上面 (3)使用注解目的:简化 xml 配置 2、Spring 针对 Bean 管理中创建对象提供注解 下面四个注解功能是一样的,都可以用来创建 bean 实例 (

  • 1、IOC 操作 Bean 管理(FactoryBean) 1、Spring 有两种类型 bean,一种普通 bean,另外一种工厂 bean(FactoryBean) 2、普通 bean:在配置文件中定义 bean 类型就是返回类型 3、工厂 bean:在配置文件定义 bean 类型可以和返回类型不一样 第一步 创建类,让这个类作为工厂 bean,实现接口 FactoryBean 第二步 实现接

  • 了解如何配置WAS或OpenJPA,以便通过容器管理的实体管理器使用容器管理的身份验证。 试图通过在JNDI中注册为“JDBC/DB2”(指Oracle)的JDBC数据源访问Oracle数据库,该数据源在persistence.xml中定义。 persistence.xml 但是,当访问持久性单元的容器管理实体管理器时,会抛出ORA-01017无效的usrname/password。如果在pers