[Seasar-user:21465] Re: 【Teeda + S2hibarnate】Daoへの独自interceptorの設定方法に関して

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2012年 9月 17日 (月) 02:04:06 JST


小林 (koichik) です.

元々 Dao を SMART deploy で扱っていないように見えます.
おそらく hibernate/dao.dicon に Dao の設定が以下のように
直書きされているのではありませんか?

    <component class="xxx.XxxDao">
        <aspect>s2hibernate.interceptor</aspect>
    </component>

もしそうなら,InsertInterceptor も hibernate/dao.dicon に
記述する必要があります.
その際は,前述のように InsertInterceptor を
s2hibernate.interceptor よりも前に記述してください.

    <component name="insertInterceptor" class="xxx.InsertInterceptor"/>

    <component class="xxx.XxxDao">
        <aspect pointcut="insert">insertInterceptor</aspect>
        <aspect>s2hibernate.interceptor</aspect>
    </component>


On Sun, 16 Sep 2012 23:47:13 +0900, 秋穂 賢 <akki_1031 @ hotmail.co.jp> wrote:

> 
> To:小林さん
> お世話になっております。秋穂です。
> 早々のご回答ありがとうございます。
> S2Hibernateのインターセプタの前にinsertInterceptorを記述して試しましたが状況は変わらず、Daoのinsert時にInsertInterceptorが起動しません。
> 対応としてはs2hibarnateのinterceptor定義をしているs2hibernate3.diconの前にcustomizer.diconを読ませるようにapp.diconに記載しました。
>  ※tomcat起動時のログ上でcustomizer.diconの後でs2hibernate3.diconを  読み込んでいた為、s2hibernameのインターセプタ前にInsertInterceptorを  設定したと判断しています。
> お手数おかけしますが、ご確認の程宜しくお願い致します。
> 【app.dicon】
> <components>
>   <include path="convention.dicon"/>
>   <include path="aop.dicon"/>
>   <include path="app_aop.dicon"/>
>   <include path="teedaExtension.dicon"/>
>   <include path="dxo.dicon"/>
>   <include path="j2ee.dicon"/>
>   <include path="customizer.dicon"/>       ←ここにcustomizer.diconを指定
>   <include path="hibernate/dao.dicon"/>
> </components>
> 【customizer.diconのdaoCustomizer部分(daoCustomizerの全量)】  <component name="daoCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">	<!-- 独自interceptor定義 -->	<initMethod name="addAspectCustomizer">		<arg>"insertInterceptor"</arg>		<arg>"insert"</arg>	</initMethod>
>     <initMethod name="addCustomizer">      <arg>traceCustomizer</arg>    </initMethod>  </component>【hibernate/dao.dicon】先頭で下記をincludeしている
>   <include path="s2hibernate3.dicon" />
> 【s2hibernate3.dicon】<components namespace="s2hibernate">    <include path="j2ee.dicon"/>
>     <component class="org.seasar.hibernate3.impl.S2SessionFactoryImpl" >		<initMethod name="setConfigPath">			<arg>"hibernate3.cfg.xml"</arg>		</initMethod>	</component>
>     <component class="org.seasar.hibernate3.dao.impl.HibernateDaoMetaDataFactoryImpl"/>
>     <component name="readOnly" class="org.seasar.hibernate3.interceptor.ReadOnlySessionInterceptor"/>
>     <component name="interceptor"        class="org.seasar.hibernate3.dao.interceptors.S2HibernateDaoInterceptor"/>
> </components>
> 【tomcat起動時のログ ※抜粋】
> 2012-09-16 23:40:52,261 [pool-2-thread-1] INFO  org.seasar.framework.container.factory.SingletonS2ContainerFactory - s2-frameworkのバージョンは2.4.43です。
> 2012-09-16 23:40:52,263 [pool-2-thread-1] INFO  org.seasar.framework.container.factory.SingletonS2ContainerFactory - s2-extensionのバージョンは2.4.43です。
> 2012-09-16 23:40:52,264 [pool-2-thread-1] INFO  org.seasar.framework.container.factory.SingletonS2ContainerFactory - s2-tigerのバージョンは2.4.43です。
> 2012-09-16 23:40:52,513 [pool-2-thread-1] DEBUG org.seasar.framework.env.Env - 環境変数#Envにファイル(env.txt)から値(tct)が設定されました
> 2012-09-16 23:40:52,650 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=cooldeploy.dicon
> 2012-09-16 23:40:52,775 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=cooldeploy.dicon
> 2012-09-16 23:40:52,804 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=app.dicon
> 2012-09-16 23:40:52,811 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=convention.dicon
> 2012-09-16 23:40:52,891 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=convention.dicon
> 2012-09-16 23:40:52,891 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=aop.dicon
> 2012-09-16 23:40:53,001 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=aop.dicon
> 2012-09-16 23:40:53,001 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=app_aop.dicon
> 2012-09-16 23:40:53,018 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=app_aop.dicon
> 2012-09-16 23:40:53,018 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=teedaExtension.dicon
> 2012-09-16 23:40:53,034 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=teeda.dicon
> 2012-09-16 23:40:53,046 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=teedaErrorPage.dicon
> 2012-09-16 23:40:53,066 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=teedaErrorPage.dicon
> 2012-09-16 23:40:53,070 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=teedaCustomize.dicon
> 2012-09-16 23:40:53,099 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=teedaCustomize.dicon
> 2012-09-16 23:40:53,404 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=teeda.dicon
> 2012-09-16 23:40:53,669 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=teedaExtension.dicon
> 2012-09-16 23:40:53,669 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=dxo.dicon
> 2012-09-16 23:40:53,673 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=dxo-builtin-converters.dicon
> 2012-09-16 23:40:53,718 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=dxo-builtin-converters.dicon
> 2012-09-16 23:40:53,721 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=dxo-tiger-converters.dicon
> 2012-09-16 23:40:53,728 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=dxo-tiger-converters.dicon
> 2012-09-16 23:40:53,750 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=dxo.dicon
> 2012-09-16 23:40:53,750 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=j2ee.dicon
> 2012-09-16 23:40:53,756 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=jta.dicon
> 2012-09-16 23:40:53,792 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=jta.dicon
> 2012-09-16 23:40:53,792 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=jdbc.dicon
> 2012-09-16 23:40:53,802 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=jdbc-extension.dicon
> 2012-09-16 23:40:53,820 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=jdbc-extension.dicon
> 2012-09-16 23:40:53,862 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=jdbc.dicon
> 2012-09-16 23:40:53,873 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=j2ee.dicon
> 2012-09-16 23:40:53,873 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=customizer.dicon
> 2012-09-16 23:40:53,878 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=default-customizer.dicon
> 2012-09-16 23:40:53,883 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=std-customizer.dicon
> 2012-09-16 23:40:53,915 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=std-customizer.dicon
> 2012-09-16 23:40:53,923 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=default-customizer.dicon
> 2012-09-16 23:40:53,938 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=customizer.dicon
> 2012-09-16 23:40:53,938 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=hibernate/dao.dicon
> 2012-09-16 23:40:53,948 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=s2hibernate3.dicon
> 2012-09-16 23:40:54,035 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=s2hibernate3.dicon
> 2012-09-16 23:40:54,102 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=hibernate/dao.dicon
> 2012-09-16 23:40:54,108 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=app.dicon
> 2012-09-16 23:40:54,108 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=cooldeploy-autoregister.dicon
> 2012-09-16 23:40:54,114 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成します。path=creator.dicon
> 2012-09-16 23:40:54,148 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=creator.dicon
> 2012-09-16 23:40:54,153 [pool-2-thread-1] DEBUG org.seasar.framework.container.factory.S2ContainerFactory - S2Containerを作成しました。path=cooldeploy-autoregister.dicon
> 2012-09-16 23:40:55,597 [pool-2-thread-1] WARN  org.seasar.framework.container.assembler.BindingTypeShouldDef - org.seasar.hibernate3.impl.S2SessionFactoryImplのプロパティ(interceptor)が見つからないので設定をスキップします
> 以上です。宜しくお願い致します。
> > Date: Sun, 16 Sep 2012 22:18:10 +0900
> > From: koichik @ gmail.com
> > To: seasar-user @ ml.seasar.org
> > Subject: [Seasar-user:21463] Re: 【Teeda + S2hibarnate】Daoへの独自interceptorの設定方法に関して
> > 
> > 小林 (koichik) です.
> > 
> > customizer.dicon の daoCustomizer の定義では
> > S2Hibernate のインターセプタよりも前に
> > insertInterceptor (および traceInterceptor) を
> > 記述する必要があります。
> > S2Hibernate のインターセプタは後続のインターセプタを
> > 呼び出さないためです。
> > 
> > 記載されている daoCustomizer の定義には S2Hibernate の
> > Dao が記述されていないので前後関係がわかりませんが、
> > もし上記の順番になっていなければ修正して試してください。
> > 順番が正しい場合はより詳細な情報を記載してください。
> > 
> > 
> > Date: Sun, 16 Sep 2012 02:11:08 +0900
> > From: 秋穂 賢 <akki_1031 @ hotmail.co.jp>
> > Subject: [Seasar-user:21462] 【Teeda + S2hibarnate】Daoへの独自interceptorの設定方法に関して
> > 
> > > 
> > > 
> > > 
> > > 
> > > お世話になっております。秋穂と申します。
> > > Teeda + S2hibarnate環境で開発を行っています。Daoでinsertする際に更新日時を自動で設定するinterceptorを実装しようと思っていますがうまくいかず、ご質問させて頂きました。
> > > 当方では下記の設定をしていますが、Daoでinsertを呼び出す際にinterceptorが動きません。どのようにすればinterceptorが動くかご教授頂けますでしょうか? ※情報に不足がある場合はご指摘下さい。
> > > ・<root-package>.interceptorパッケージにInsertInterceptorクラスを実装 (AbstractInterceptorを継承)・insertを発行する際はs2hibernateにて実施・同様な設定をcustomizer.diconのlogicCustomizerにしたところ、うまくinterceptorされました
> > > 以下、ソースコード ※一部投稿用に修正しています。----------------------------------------
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 【xxDaoのインターフェース】 public interface XxDao {  public void insert(Entity entity); }
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 【Daoを使用するクラス】 public class xxLogicImpl implements TicketPageEditorLogic {  public XxDao xxDao;
> > >   public void testMethod(Entity entity) {   xxDao.insert(entity); }
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 
> > > 【customizer.dicon】?省略?  <component name="daoCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">	<!-- 独自interceptor定義 -->	<initMethod name="addAspectCustomizer">		<arg>"insertInterceptor"</arg>		<arg>"insert"</arg>	</initMethod>
> > >     <initMethod name="addCustomizer">      <arg>traceCustomizer</arg>    </initMethod>
> > >   </component>?省略?
> > > 【interceptorの実装】?省略?public class InsertInterceptor extends AbstractInterceptor {
> > > 	private static final long serialVersionUID = 1L;
> > > 	@Override	public Object invoke(MethodInvocation invocation) throws Throwable {
> > > 		System.out.println("InsertInterceptor!!!!!!!!!!!!!!!!!!!!!!!!!");
> > > 		String className = getTargetClass(invocation).getName();		System.out.println(className);
> > > 		invocation.proceed();		return null;	}}
> > > 以上です。お手数おかけしますが、ご確認よろしくお願い致します。
> > >  		 	   		  
> > 
> > --
> > {
> >   name: "Koichi Kobayashi",
> >   mail: "koichik @ improvement.jp",
> >   blog: "http://d.hatena.ne.jp/koichik/",
> >   twitter: "@koichik"
> >  }
> > 
> > _______________________________________________
> > Seasar-user mailing list
> > Seasar-user @ ml.seasar.org
> > https://ml.seasar.org/mailman/listinfo/seasar-user
>  		 	   		  


-- 
{
  name: "Koichi Kobayashi",
  mail: "koichik @ improvement.jp",
  blog: "http://d.hatena.ne.jp/koichik/",
  twitter: "@koichik"
}



Seasar-user メーリングリストの案内