@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(){...}
}
正如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(){...}
这将删除访问序列化,希望能解决超时问题。
我对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