Transaction ProxyFactoryBean事務代理--Spring事務管理(1)
8814 ワード
springによる声明式事務は、そのAOPフレームワークによって実現される.springで声明的な事務を使うには、Transaction ProxFactoryBeanまでが必要ですが、ProxyFactoryBeanに似ています.しかし、その目的は事務文脈に方法をラッピングすることです.
自分のProxyFactoryBenを作って事務を処理しても同じ効果が得られますが、Transation ProxyFactoryBenは声明式事務のために設計されていますので、それを使うと簡単です.
Springを定義する事務管理
事務代理を定義する
説明:
target:事務を実行したいクラス
proxyInterfaces:代理インターフェースは事務を実行する種類のインターフェースを必要とします.
tractionAttributes:具体的に事務を追加する方法が必要です.
======配置が多い場合は継承式で設定できます.
1.親の設定を定義する
2.サブプロファイルを定義する
サブプロファイルは親の設定を書き換えることができます.
親の設定が設定ファイルだけであれば、abstractタイプと定義されます.このような容器初期化の際は、実際には初期化されません.
3.
自分のProxyFactoryBenを作って事務を処理しても同じ効果が得られますが、Transation ProxyFactoryBenは声明式事務のために設計されていますので、それを使うと簡単です.
Springを定義する事務管理
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dynamicDataSource" />
</bean>
事務代理を定義する
<bean id="knowledgeService"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="transactionManager" />
<property name="target" ref="myknowledgeServiceTarget"></property>
<property name="proxyInterfaces"
value="com.ultrapower.imp.server.service.myknowledge.IMyKnowledgeService">
</property>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED, -Exception</prop>
</props>
</property>
</bean>
<bean id="myknowledgeServiceTarget"
class="com.ultrapower.imp.server.service.myknowledge.impl.MyKnowledgeServiceImpl">
<!-- service API -->
<property name="knowledgeAPI" ref="knowledgeAPI"></property>
<property name="knowledgeOrderAPI" ref="knowledgeOrderAPI"></property>
<property name="knowledgeOperAPI" ref="knowledgeOperAPI"></property>
<property name="knowledgeFileAPI" ref="knowledgeFileAPI"></property>
<property name="moduleId" value="knowledge" />
</bean>
説明:
target:事務を実行したいクラス
proxyInterfaces:代理インターフェースは事務を実行する種類のインターフェースを必要とします.
tractionAttributes:具体的に事務を追加する方法が必要です.
======配置が多い場合は継承式で設定できます.
1.親の設定を定義する
<bean id="txProxyTemplate" abstract="true"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="transactionManager"/>
<property name="transactionAttributes">
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
2.サブプロファイルを定義する
<bean id="myService" parent="txProxyTemplate">
<property name="target">
<bean class="org.springframework.samples.MyServiceImpl">
</bean>
</property>
</bean>
サブプロファイルは親の設定を書き換えることができます.
<bean id="mySpecialService" parent="txProxyTemplate">
<property name="target">
<bean class="org.springframework.samples.MySpecialServiceImpl">
</bean>
</property>
<property name="transactionAttributes">
<props>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="load*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="store*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
親の設定が設定ファイルだけであれば、abstractタイプと定義されます.このような容器初期化の際は、実際には初期化されません.
3.