[Seasar-user:16884] Re: [S2JDBC]JdbcManager にAOPを適用するには?

Takafumi Yoshida [E-MAIL ADDRESS DELETED]
2009年 2月 12日 (木) 10:34:11 JST


いつもお世話になります。吉田@オプティクスです。

2009/02/12 9:51 Yasuo Higa <[E-MAIL ADDRESS DELETED]>:
> s2jdbc.diconにJdbcManagerの定義があるので、
> そこにaspectタグなど追加すると良いのではないかと思います。

s2jdbc.diconに、以下のように記述してみました。

useLookupAdapter=trueとするために、AspectCustomizerを作成。

<component name="jdbcAspectCustomizer"
class="org.seasar.framework.container.customizer.AspectCustomizer">
	<property name="useLookupAdapter">true</property>
	<initMethod name="addInterceptorName">
		<arg>"entityRegistInterceptor"</arg>
	</initMethod>
</component>

これをJdbcManagerに適用するため、CustomizerChainを使用して

<component name="jdbcManager"
class="org.seasar.extension.jdbc.manager.JdbcManagerImpl">
	//省略
	<aspect pointcut="insert, update, insertBatch, updateBatch">
		<component name="jdbcCustomizer"
class="org.seasar.framework.container.customizer.CustomizerChain">
			<initMethod name="addAspectCustomizer">
				<arg>"jdbcAspectCustomizer"</arg>
			</initMethod>
		</component>
	</aspect>
</component>

上記にように設定してみましたが、Tomcat起動時に以下のようにエラーが発生します。

java.lang.ClassCastException:
org.seasar.framework.container.customizer.CustomizerChain
	at org.seasar.framework.container.impl.AspectDefImpl.getAspect(AspectDefImpl.java:81)
	at org.seasar.framework.container.util.AopProxyUtil.getAspects(AopProxyUtil.java:64)
	at org.seasar.framework.container.util.AopProxyUtil.getConcreteClass(AopProxyUtil.java:54)
	at org.seasar.framework.container.impl.ComponentDefImpl.getConcreteClass(ComponentDefImpl.java:140)
	at org.seasar.framework.container.impl.ComponentDefImpl.init(ComponentDefImpl.java:235)
	at org.seasar.framework.container.impl.S2ContainerImpl.init(S2ContainerImpl.java:563)
	at org.seasar.framework.container.impl.S2ContainerImpl.init(S2ContainerImpl.java:560)
	at org.seasar.framework.container.factory.SingletonS2ContainerFactory.init(SingletonS2ContainerFactory.java:150)
	at org.seasar.framework.container.servlet.SingletonS2ContainerInitializer.initialize(SingletonS2ContainerInitializer.java:55)
	at org.seasar.framework.container.servlet.S2ContainerServlet.initializeContainer(S2ContainerServlet.java:139)
	at org.seasar.framework.container.servlet.S2ContainerServlet.init(S2ContainerServlet.java:127)
	at javax.servlet.GenericServlet.init(GenericServlet.java:211)


おそらくs2jdbc.diconの記述の誤りであるとおもうのですが、aspectタグで記述するには
どのように記述したらいいでしょうか?


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