2011-07-04 4 views
1

私たちはスプリング+ JPA私たちのRESTfulウェブサービスアプリケーションを使用しています。これはトランザクション処理の高いアプリケーションであり、CRUD操作をたくさん実行します。春のパターンベーストランザクション

私はトランザクションを実行する方法に@Transactionアノテーションを使用していますが、すべて正常に動作しています。

トランザクション(すなわち 追加/更新/削除で始まるすべてのメソッドが自動的にトランザクションを有効にすることができ、 パターンマッチングに基づく 設定ファイルにクラス外で管理することができる場合、私はちょうど思っていた

@取引注釈を使用せずに)?

の可能性があるかどうか確認してください。

「はい」いくつかのウェブリンクまたは例を私に提供してください。

ありがとうございました。

答えて

5

もちろん!実際、これはJava 5および@Transactionalアノテーションの前の唯一の可能な解決策でした。 Springのドキュメントで10.5.2 Example of declarative transaction implementationを見てください。ここでは、XMLとAspectJのポイントカットを使ってトランザクションの境界設定の例を見ていきます。

これは、ドキュメントからの簡単な設定の抜粋は、上記の指摘である。

<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
    <property name="dataSource"> 
     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
      <!-- ... --> 
     </bean> 
    </property> 
</bean> 
<tx:advice id="txAdvice" transaction-manager="txManager"> 
    <tx:attributes> 
     <tx:method name="get*" read-only="true"/> 
     <tx:method name="*"/> 
    </tx:attributes> 
</tx:advice> 

<aop:config> 
    <aop:pointcut id="fooServiceOperation" expression="execution(* x.y.service.FooService.*(..))"/> 
    <aop:advisor advice-ref="txAdvice" pointcut-ref="fooServiceOperation"/> 
</aop:config> 

あなたが見ることができるように、getで始まる名前を持つすべてのメソッドは、読み取り専用としてマークされているFooServiceの他のすべてのメソッドながら、 (x.y.service.FooService.*(..)) pointcut)はトランザクションであり、読み取り専用ではありません。

より冗長なXML構文を使用するとわかるように、主にAspectJ構文(learn itを最初に確認してください)のおかげで、宣言的でより柔軟なトランザクション境界設定のような大きな利点が得られます。

+0

これは厳密には私が探していた答えではありませんでしたが、私は多くの反応を得ず、まだ私の選択肢を探っていませんでした。しかし、当分の間それを受け入れている。 – JSS