人気ブログランキング | 話題のタグを見る

日記
by white540
featuring
310のトゥー抜け
ユーキングマイウェイ☆
我之日々。
butterbumpの日記
☆mami&snow life☆
鳥になった雪んこの唄
☆missileman☆
気ままにHappy☆hour
有給消化11日目
今日は28日
28日だからって話だが28日はDQMの発売日。
ヨドバシのポイントたまってるんで秋葉行ってポイントで購入。
年末で混んでたけど大半はコートきた大人達。
営業ついでか何かしらんが仕事中これるなんてうらやましーな。
まあ俺はその上いってるけどね^^;
夜は予定があったのですきを見てS2のトランザクションの調査。
拉致があかないので自動登録ではなくサンプルクラスを直書きでdiconファイルに追加。
こんな感じ
---------------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
"http://www.seasar.org/dtd/components.dtd">
<components>
<include path="j2ee.dicon" />

<component class="sample.dao.SampleDao">
<aspect>
<component name="s2dao" class="org.seasar.dao.interceptors.S2DaoInterceptor" />
</aspect>
</component>

<component class="sample.service.impl.SampleServiceImpl">
<aspect pointcut=".*">j2ee.requiredTx</aspect>
</component>
</components>
----------------------------------------------------------------------
おっかかるじゃん!
直書きだと問題ないらしい。
このサンプルで動くって事はDaoの方のトランザクションをどうにかすればいいのでなく
Serviceで開始されたトランザクションをDaoが認識できればいいのかな。

でも自動バインディング時の設定方法がわからん。
うーん悩む。

ちょっと調べてみたら別のトランザクションをかけてるとこがあったので
そっちを参考にしてみる。
トランザクションがaspect指定ならサービスのアスペクト自動バインディング時に
指定してやればかかるんでないかい。
って感じでdaoのaspect自動バインディングを参考にserviceInterceptorChainというのを
作ってみた。
-----------------------------------------------------------------------
<?xml version="1.0" encoding="Utf-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
"http://www.seasar.org/dtd/components.dtd">
<components>
<include path="dao.dicon"/>
<include path="aop.dicon"/>
<include path="j2ee.dicon"/>

<component name="daoInterceptorChain" class="org.seasar.framework.aop.interceptors.InterceptorChain">
<initMethod name="add"><arg>dao.interceptor</arg></initMethod>
<initMethod name="add"><arg>aop.traceInterceptor</arg></initMethod>
<initMethod name="add"><arg>j2ee.requiredTx</arg></initMethod>
</component>

<component name="serviceInterceptorChain" class="org.seasar.framework.aop.interceptors.InterceptorChain">
<initMethod name="add"><arg>aop.traceInterceptor</arg></initMethod>
<initMethod name="add"><arg>j2ee.requiredTx</arg></initMethod>
</component>
<component name="traceInterceptor" class="org.seasar.framework.aop.interceptors.TraceInterceptor"/>

<!-- auto registration -->
<component class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRegister">
<property name="autoNaming">
<component class="org.seasar.framework.container.autoregister.DefaultAutoNaming"/>
</property>
<initMethod name="addClassPattern">
<arg>"sample.dao"</arg>
<arg>".*Dao"</arg>
</initMethod>
</component>

<component class="org.seasar.framework.container.autoregister.AspectAutoRegister">
<property name="interceptor">daoInterceptorChain</property>
<initMethod name="addClassPattern">
<arg>"sample.dao"</arg>
<arg>".*Dao"</arg>
</initMethod>
</component>

<component class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRegister">
<property name="autoNaming">
<component class="org.seasar.framework.container.autoregister.DefaultAutoNaming"/>
</property>
<initMethod name="addClassPattern">
<arg>"sample.service.impl"</arg>
<arg>".*ServiceImpl"</arg>
</initMethod>
<aspect pointcut=".*">j2ee.requiredTx</aspect>
</component>

<component class="org.seasar.framework.container.autoregister.AspectAutoRegister">
<property name="interceptor">serviceInterceptorChain</property>
<initMethod name="addClassPattern">
<arg>"sample.service.impl"</arg>
<arg>".*ServiceImpl"</arg>
</initMethod>
</component>

</components>
-----------------------------------------------------------------------------------
上のでdiconファイルで実行したらばっちりトランザクションかかりました。
コミットもロールバックも♪
後はかける範囲とかをもうちょっと動作確認していけば理解できるよーになるかなー。
seasarのサイトよく見れば似たようなのがのってたけど、サンプルないときは本当に理解しないと
つらいかなー。
springも時間があったら考えてみよう。
by white540 | 2006-12-29 22:38 | お仕事
<< 有給消化12日目 有給消化10日目 >>