作者phstudy (study)
看板java
标题Re: [J2EE] JPA JTA
时间Wed Aug 5 23:31:05 2015
刚刚重新看了Spec, 发现我的回文也不太准确...
spec在这里:
https://jcp.org/en/jsr/detail?id=338
准确来说是这样
EM的部分
1. Container Managed(CM) EM必须是JTA EM
2. Application Managed(AM) EM可以是JTA EM或resource-local EM
Container的部分
1. JEE Container支援JTA EM与resource-local EM, 可以在JEE Container中使用CM与AM
2. 非JEE Container支援JTA EM与resource-local EM, 但只能使用AM
所以这种method结束後会自动commit的行为是JTA EM造成的 XD
※ 引述《cyclone350 (老子我最神)》之铭言:
: ※ 引述《luoqr (.....)》之铭言:
: 我在写某个专案也很奇怪
: 只要 entity 有异动到,就算不做 save or update 等方法
: transaction 结束後会把全部的异动 commit 到 DB 里面...
: 还有一个就是
: 若 entity constraint 设定若跟 DB 不符,
: save 当下不会出错,transaction 结束後才会出错
: 但是包在 transaction 外层的 code block 并不会接到 exception...
: 像这样
: try {
: test1();
: log.info("完成");
: } catch(Exception e) {
: log.error("出现错误")
: }
: 就算 test1 出错 (transaction 挂 test1),仍会 log 出 "完成"
: 这两个 case 我不能理解阿,有人能解释吗?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.195.55.170
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1438788669.A.978.html
1F:推 cyclone350: 感谢提供整理,我再看看 08/06 06:36
2F:→ cyclone350: 不过跟句你整理的话,是代表我用 tomcat (非tomEE) 08/06 06:37
3F:→ cyclone350: 在没特别用AOP的请况下是不会出现我文中的行为搂!? 08/06 06:38
4F:→ cyclone350: 因为全部 commit 是 CM 的行为 08/06 06:39
5F:推 cyclone350: 当我没说,我以为你是回答save那个问题 XD 08/06 07:44
6F:推 luoqr: Container还分为CMT/BMT BMT要自己下commit不会自动commit 08/08 09:50
7F:→ luoqr: 另外AM若在BMT tx.begin()之外建立 还得joinTransaction() 08/08 09:52