[Seasar-user:19974] Re: 複数個所にインジェクションされたコンポーネントに対してアスペクトが効かない現象
石川雅之 - エクスマート
[E-MAIL ADDRESS DELETED]
2010年 7月 15日 (木) 20:56:22 JST
石川です。お世話になっております。
ご返信ありがとうございます。
>> 【現象】
>> 上記のような状態でABからXを呼び出したときに、Xに対するアスペクトが動かない
>> 現象が起きています。
>> ComponentXが1つのコンポーネントに対してインジェクションされているときは、
>> アスペクトが動いています。2つのコンポーネントに対してインジェクションされて
>> いるときに上記のような現象が発生するようです。
>
> これは全く同じ dicon ファイルを使っていて,
> ComponentA クラスだけが存在する場合は
> アスペクトが適用されるのに,ComponentB クラスも
> 存在するとアスペクトが適用されないということ
> でしょうか?
> それとも dicon を変更しているのでしょうか?
diconは変更せずに、両コンポーネントが存在する場合にアスペクトが適用
されておりません。ComponentBを削除するとアスペクトが適用されます。
> また,ComponentA,B,X は同じ AutoRegister で
> (あるいは同じ dicon で) 自動登録されますか?
> それとも別の AutoRegister (dicon) で登録されますか?
>
> いずれにせよ,AutoRegister を定義した dicon を
> 見せてもらった方がよさそうです.
> できれば再現する最低限のサンプルを作成して,
> その dicon を見せてください.
サンプルを作成する時間が今ございませんので、使用しているdiconファイルの
抜粋を以下に記載させて頂きます。
(下記は全て同一のdiconファイルに記載しております。)
******************************ここから************************************
<components namespace="******">
<include path="convention.dicon"/>
<include path="s2jdbc.dicon"/>
<include path="dxo.dicon"/>
<include path="j2ee.dicon"/>
<!-- コンポーネントX -->
<component class="org.seasar.framework.container.autoregister.ComponentAutoRegister">
<initMethod name="addReferenceClass">
<arg>@***********@class</arg>
</initMethod>
<initMethod name="addClassPattern">
<arg>"コンポーネントXのパッケージ"</arg>
<arg>".*Dao"</arg>
</initMethod>
</component>
<!-- コンポーネントA、B -->
<component class="org.seasar.framework.container.autoregister.ComponentAutoRegister">
<initMethod name="addReferenceClass">
<arg>@***************@class</arg>
</initMethod>
<initMethod name="addClassPattern">
<arg>"コンポーネントABのパッケージ"</arg>
<arg>".*ManagerImpl"</arg>
</initMethod>
</component>
<!-- 自前アスペクトX -->
<component name="originalAspectX" class="********">
</component>
<!-- コンポーネントXのインターセプターチェーン -->
<component name="daoIntercept" class="org.seasar.framework.aop.interceptors.InterceptorChain">
<initMethod name="add"><arg>j2ee.requiredTx</arg></initMethod>
<initMethod name="add"><arg>originalAspectX</arg></initMethod>
</component>
<!-- コンポーネントXのアスペクト登録 -->
<component class="org.seasar.framework.container.autoregister.AspectAutoRegister">
<property name="interceptor">daoIntercept</property>
<initMethod name="addClassPattern">
<arg>"コンポーネントXのパッケージ"</arg>
<arg>".*Dao"</arg>
</initMethod>
</component>
</components>
******************************ここまで************************************
宜しくお願い致します。
Koichi Kobayashi さんは書きました:
> 小林 (koichik) です.
>
> Date: Thu, 15 Jul 2010 15:41:02 +0900
> From: 石川雅之 - エクスマート <[E-MAIL ADDRESS DELETED]>
> To: [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:19972] 複数個所にインジェクションされたコンポーネントに対してアスペクトが効かない現象
>
>> 【現象】
>> 上記のような状態でABからXを呼び出したときに、Xに対するアスペクトが動かない
>> 現象が起きています。
>> ComponentXが1つのコンポーネントに対してインジェクションされているときは、
>> アスペクトが動いています。2つのコンポーネントに対してインジェクションされて
>> いるときに上記のような現象が発生するようです。
>
> これは全く同じ dicon ファイルを使っていて,
> ComponentA クラスだけが存在する場合は
> アスペクトが適用されるのに,ComponentB クラスも
> 存在するとアスペクトが適用されないということ
> でしょうか?
> それとも dicon を変更しているのでしょうか?
>
> また,ComponentA,B,X は同じ AutoRegister で
> (あるいは同じ dicon で) 自動登録されますか?
> それとも別の AutoRegister (dicon) で登録されますか?
>
> いずれにせよ,AutoRegister を定義した dicon を
> 見せてもらった方がよさそうです.
> できれば再現する最低限のサンプルを作成して,
> その dicon を見せてください.
>
>
Seasar-user メーリングリストの案内