[Java] JTA 1.2 - It's not your Grandfather's Transactions anymore!

原文はこちら。
https://blogs.oracle.com/theaquarium/entry/jta_1_2_it_s

Java EE 7に含まれているJava Transaction API 1.2はJSR 907 (*)としても知られており、これには、重要な2個の新機能(@Transactional @TransactionScoped)が追加されています。
JSR 907: JavaTM Transaction API (JTA)
https://www.jcp.org/en/jsr/detail?id=907
JTA 1.2以前では、トランザクションをEJBに委譲することで、開発者は低レベルのJTA/JTSトランザクション処理を避け、EJBコンテナに透過的に処理させていました。CMT(コンテナ管理のトランザクション、Container-managed transaction)を使うと、デフォルトの挙動では、EJBコンテナが呼び出しを捕捉し、必要なトランザクションの設定を挟むことができます。基本的にトランザクションを透過的に管理するため、CMTは非常に手軽というメリットがある一方、やはりEJBを使う必要がありました。
Container-managed transaction (Java EE 7 Tutorial)
http://docs.oracle.com/javaee/7/tutorial/doc/transactions003.htm#BNCIJ
新しい @Transactional アノテーションでは、基本的にEJBコンテナに依存せずManaged BeansのEJBトランザクション属性のセマンティクスを持ち込むことで、この課題を解決しています。そのため、この @Transactional アノテーションを使うと、Managed Beanのトランザクション境界を宣言的に管理することができます。内部的には、必要なトランザクションの設定(停止、再開、コミットなど)を処理するCDIインターセプタがこの機能を提供しています。一言で言うと、 @Transactional はEJBを使わずに、CMTの簡便性を様々なJava EEコンポーネント(Servlet、JAX-RSなど)にもたらします。

新しい @TransactionScoped アノテーションは、標準のCDIスコープを指定して、現在アクティブなJTAトランザクションをライフサイクルの有効範囲とするBeanインスタンスを定義することができます。このシンプルなエントリで実際の挙動を説明しています。
Java EE CDI TransactionScoped example (byres lounge)
http://www.byteslounge.com/tutorials/java-ee-cdi-transactionscoped-example
(*) 900番台のJSRを不思議に思う人がいるかもしれないので説明しておきますと、これらの仕様は、元々JCPではない場で作られたため、JCPの用語では"Grandfathered JSR"と呼ばれています。
Spec Lead Guide: Maintenance Review (MR)
https://www.jcp.org/en/resources/guide-maintenance

0 件のコメント:

コメントを投稿