Caching
 

キャッシング - Spring2.0のアノテーションを使用してトランザクション管理を実装(する)

Spring2.0トランザクションフレームワークでは、主に2つのカテゴリがあります:
gbvy[W
1エンコーディングのトランザクションは、これがないと述べた。
2宣言的なトランザクションは、こんなことを言う。
宣言的なトランザクションの3つのアプローチがあります:
図1(a)は最初のメソッド、TransactionProxyFactoryBean、彼は、AOPプロキシ機能をFactoryBeanです。彼は、オブジェクトが事務を、返される。
しかし、春のXML構成ファイルにおいても、ないの詳細をより多くの問題を設定してください。





<bean id="go_TestPOAO" class="pic.dao.transaction_test.TestPOAOImpl" parent="go_POAOBase"></bean>

<bean id="go_TestPOAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="proxyInterfaces">
<list>
<value>pic.dao.transaction_test.TestPOAO</value>
</list>
</property>
<property name="target" ref="go_TestPOAO"/>
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>

<bean id="go_TestPOAO" class="pic.dao.transaction_test.TestPOAOImpl" parent="go_POAOBase"></bean>

<bean id="go_TestPOAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="proxyInterfaces">
<list>
<value>pic.dao.transaction_test.TestPOAO</value>
</list>
</property>
<property name="target" ref="go_TestPOAO"/>
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributes">
<props>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
</props>
</property>
(第2)を使用して春のXML構成ファイルには、設定するには、より多くの問題ではなく、詳細だけでなく、の宣言的トランザクションを実現する。
XMLコード
<tx:advice id="">
.....
</tx:advice>
<aop:config>
.....
</aop:config>
<tx:advice id="">
.....
</tx:advice>
<aop:config>
.....
3(3番目の)このメソッドは便利ですが、アノテーションを使用すると、宣言的なトランザクションを実装するために、次のように、このメソッドを詳しく説明:
最初のステップ:導入名前空間、春の構成ファイルの変更では、ルート要素の豆つ以上の行として
XMLコード
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns=""
xmlns:xsi=""
xmlns:tx=""
xsi:schemaLocation="
">
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns=""
xmlns:xsi=""
xmlns:tx=""
xsi:schemaLocation="
">
ステップ2:春の構成ファイルの変更では、@ Transactionalアノテーションを持つすべてのBeanが自動的に宣言的なトランザクションをサポートするように構成されている





<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref local="dataSource"/>
</property>
</bean>

<tx:annotation-driven transaction-manager="transactionManager"/>

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref local="dataSource"/>
</property>
</bean>

<tx:annotation-driven transaction-manager="transactionManager"/>
第三段階は:インターフェイスまたはクラスのステートメントでは、@トランザクションを書いてみませんか?インターフェイスを記述するのみの場合、インターフェイスの実装クラスが継承されます。
インターフェイスの実装クラス固有のメソッドは、また、クラスの宣言時の設定をカバーすることができます。
Javaコード
@Transactional
public class TestPOAOImpl extends POAOBase implements TestPOAO
{
@Transactional(isolation = Isolation.READ_COMMITTED)
public void test1()
{
文字列のSQL ="のINSERT INTOはsy_test(名前、年齢)のVALUES(30'趙コメント')を";
execute(sql);
のSQL ="のINSERT INTOはsy_test(名前、年齢)のVALUES(26'飛コメント')を";
execute(sql);
/ /例外を; = 9 / 0 int型

execute(sql);

}
/ / Execute()メソッドを少し...
}
@Transactional
public class TestPOAOImpl extends POAOBase implements TestPOAO
{
@Transactional(isolation = Isolation.READ_COMMITTED)
public void test1()
{
文字列のSQL ="のINSERT INTOはsy_test(名前、年齢)のVALUES(30'趙コメント')を";
execute(sql);
のSQL ="のINSERT INTOはsy_test(名前、年齢)のVALUES(26'飛コメント')を";
execute(sql);
/ /例外を; = 9 / 0 int型
のSQL ="のINSERT INTOはsy_test(名前、年齢)のVALUES('コメントして関羽'、33)";
execute(sql);
System.out.println("終了");
}
/ / Execute()メソッドを少し...
}は、その点に注意してください:
1 @トランザクションメソッドは、一般に適用することができ、他の非パブリックメソッドのではなく、@トランザクションエラーをマークした場合は、しかし、メソッドは、トランザクション機能を持っていません。


物件タイプデフォルト説明
(指示を受けて)トランザクションの伝播は伝播の伝播列挙属性は必須
分離分離列挙デフォルトのトランザクション分離レベル(特に記載のない限り)
readOnlyの真偽値falseかどうかを読み取り専用
タイムアウトのint -1タイムアウト(秒)
rollbackForクラス[] {}は例外クラスをロールバックする必要がある
rollbackForClassName String []は{}例外クラス名をロールバックする必要がある
noRollbackForクラス[] {}例外クラスは、ロールバックする必要はありません。
noRollbackForClassName String []は{}例外クラス名をロールバックする必要はありません。


私の"分離レベル"の関連記事には行くことができますし、参照してください、理解していない。
データベースを使用して、デフォルトのデフォルトの分離レベル
"分離レベル"の記事を参照してくださいREAD_UNCOMMITTED
"分離レベル"の記事を参照してくださいREAD_COMMITTED
"分離レベル"の記事を参照してくださいREPEATABLE_READ
SERIALIZABLEの"分離レベル"の記事を参照してください
資産取引の普及は、オプションの次の
あなたは春のソースを見ることができます:org.springframework.transaction.annotation.Propagationを
必要なビジネス方法は、操作の方法は、トランザクションにされている場合にして、トランザクション内で実行してトランザクションに参加、または自分自身に新しいトランザクションを作成する必要があります。これは、春のデフォルト伝播されます。


メソッドは、トランザクション内で実行されている場合REQUIRES_NEWビジネスメソッドは常に、それ自体が新しいトランザクションを起動するためになり、元のトランザクションが中断され、新しいトランザクションは、メソッド、終わりの前に新しいトランザクションが終了するまで作成され、トランザクションは最初に再開された。
メソッドは、トランザクションと、コンテナは、それが重要開くことが関連付けられていない場合NOT_SUPPORTEDメソッドは、トランザクションのステートメントが必要です。メソッドは、トランザクション内で呼び出されている場合、トランザクションは、メソッド呼び出しの後、トランザクションは元の実装を復元する、中断されています。
絶対にトランザクションのコンテキスト内で実行する方法は、コンテナは例外をスローする場合、このメソッドは、トランザクション内で実装されていない必要があります宣言します。普通の実行前に掲げる事項に関連していない。
ネストされたトランザクション内で実行するアクティブなトランザクションがある場合、ネストされています。必須の属性の実装により、アクティブなトランザクションがある場合。これは、別のトランザクションを使用して、トランザクションは、複数のポイントで保証をロールバックすることができます。ロールバックの内政は、発症DataSourceTransactionManagerトランザクションマネージャだけでは、対外には影響しません。