java 容器事务_java – 了解EJB3/JPA容器级事务和隔离级别

博客作者遇到一个ejb交易问题,即使在同一个MANDATORY事务中,SecondEjbType的数据库写入对ThirdEjbType的后续读取不可见。他们确认了没有异常、错误或回滚,并提供了persistence.xml配置。问题可能涉及事务隔离级别或数据源配置。
摘要由CSDN通过智能技术生成

考虑一下我正在使用的一些代码的简化视图:

@Stateless(...)

@Remote(...)

@TransactionAttribute(TransactionAttributeType.MANDATORY)

public class FirstEjbType {

@EJB(...)

private SecondEjbType secondEjb;

@EJB(...)

private ThirdEjbType thirdEjb;

public void doSomething() {

secondEjb.doSomething(); // WRITES SOMETHING TO THE DATABASE

thirdEjb.doSomething(); // CAN'T SEE THAT SOMETHING IN THE DATABASE!

}

我已经在类级别将TransactionAttribute注释设置为MANDATORY.我理解这意味着必须在提供的事务中调用所有方法,如doSomething().在这种情况下,我们使用容器管理的事务.

在SecondEjbType或ThirdEjbType中根本不使用TransactionAttribute ……在类和方法级别都没有.我理解这意味着secondEjb.doSomething()和thirdEjb.doSomething()都将在为firstEjb.doSomething()提供的事务中运行.

但是,我真的错过了什么!如代码注释所示… secondEjb将数据写入数据库,thirdEjb将该数据作为其操作的一部分进行读取.由于所有这些都在同一个事务中运行,我不希望隔离级别存在任何问题.但是,无论出于何种原因,secondEjb数据库写入对thirdEjb不可见.

我已经将跟踪一直转到最大值,并且显然没有异常或错误或回滚问题……初始写入对后续读取不可见.我并不认为自己是交易管理方面世界上最伟大的大师…我是否错过了一些明显的东西,或者我的概念理解基本正确,问题可能在其他地方?

更新 – 约翰斯托克要求的其他信息如下:

>我在GlassFish中运行

>我不确定你的意思是“非标准冲洗模式”,所以我认为答案是否定的.

>我的persistence.xml文件如下所示:

< persistence xmlns =“http://java.sun.com/xml/ns/persistence”version =“1.0”>

< persistence-unit name =“pu”transaction-type =“JTA”>

&LT; JTA-数据源&GT; JDBC /数据源&LT; / JTA-数据源&GT;

&LT;排除-不公开的类&GT假LT; /排除-不公开的类&GT;

&LT;性状>

< property name =“toplink.cache.shared.default”value =“false”/>

&LT; /性状>

&LT; /持久性单元>

&LT; /持久&GT;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值