S2JDBCを単体で使用すると、トランザクション制御は自分で設定しないと駄目そうなのでメモ
補足:SAStrutsと組み合わせれば、デフォルトでAction単位でトランザクションを制御してくれます。
今回はserviceに対して、トランザクションをかけます。
とういのも、Batch処理でS2JDBCを使用し、logicで実際のDB更新処理をし、その上で、serviceが複数のlogicを制御し、logicが全て成功なら、commit、失敗ならrollbackとしています。
creator.diconにserviceパッケージをS2で管理するように以下を追加<component class="org.seasar.framework.container.creator.ServiceCreator"/>
customer.diconにトランザクション制御を追加<component name="serviceCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">
<initMethod name="addCustomizer">
<arg>
<component class="org.seasar.framework.container.customizer.TxAttributeCustomizer"/>
</arg>
</initMethod>
</component>
トランザクションの制御ファイルjta.diconを作成<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN""http://www.seasar.org/dtd/components24.dtd">
<components namespace="jta">
<component name="UserTransaction"
class="org.seasar.extension.jta.UserTransactionImpl"/>
<component name="TransactionManager"
class="org.seasar.extension.jta.TransactionManagerImpl"/>
<component name="TransactionSynchronizationRegistry"
class="org.seasar.extension.jta.TransactionSynchronizationRegistryImpl"/>
<component
class="org.seasar.extension.tx.adapter.JTATransactionManagerAdapter"/>
</components>
j2ee.diconからjta.diconを読み込む<include path="jta.dicon"/>:
以上で、serviceパッケージのクラスが呼ばれたときに、トランザクションが開始し、
クラスの実行が終わったときに、トランザクションが終了する設定が完成です。