[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 メーリングリストの案内