[seasar-s2dao-dev:182] EntityMangerを使用するメソッドのpointcutの扱いについて

SETO Azusa [E-MAIL ADDRESS DELETED]
2007年 3月 29日 (木) 00:41:40 JST


せとあずさです。

 [Seasar-user:6923] の回答のために調べていて気づいたのですが、
ちょっと対応策が思いつかないので相談させてください。

まず、S2Daoにおいては、EntityManager経由で検索を行うDaoのメソッドは、
S2DaoInterceptorのaspectがかかってなくても動作します。(1.0.41-RC1で確認)

しかし、現在のHEADにおいては、DAO-78( https://www.seasar.org/issues/browse/DAO-78 )
の影響で、以下のような条件で例外が発生します。

(1)EntityMangerを使用するメソッドが、Daoのインターフェースで定義されていない。
(→  デフォルトでpointcutが適用されない)
(2)jdbc.dicon or j2ee.diconで、S2Pagerを有効にしている。

スタックとレースはこんな感じです。
Exception in thread "main" java.lang.NullPointerException
	at org.seasar.dao.pager.PagerStatementFactory.createPreparedStatement(PagerStatementFactory.java:42)
	at org.seasar.extension.jdbc.impl.ConfigurableStatementFactory.createPreparedStatement(ConfigurableStatementFactory.java:44)
	at org.seasar.extension.jdbc.impl.BasicHandler.prepareStatement(BasicHandler.java:95)
	at org.seasar.extension.jdbc.impl.BasicSelectHandler.prepareStatement(BasicSelectHandler.java:146)
	at org.seasar.extension.jdbc.impl.BasicSelectHandler.execute(BasicSelectHandler.java:133)
	at org.seasar.extension.jdbc.impl.BasicSelectHandler.execute(BasicSelectHandler.java:120)
	at org.seasar.dao.impl.SelectDynamicCommand.execute(SelectDynamicCommand.java:60)
	at org.seasar.dao.impl.EntityManagerImpl.find(EntityManagerImpl.java:79)
	at org.seasar.dao.impl.EntityManagerImpl.find(EntityManagerImpl.java:46)
	at examples.dao.Department2Dao.find(Department2Dao.java:37)
	at examples.dao.DepartmentDaoClient.main(DepartmentDaoClient.java:31)

もちろんEntityManagerを経由するメソッドに対し、明示的にpointcutを指定すれば
動作しますが、現行バージョンとは異なる仕様になります。

PagerContextのThreadLocalをrequestごとに解放しながら、現行の仕様を確保する
方法が思いつかないです。みなさんどう思われますか?

-- 
せとあずさ
[E-MAIL ADDRESS DELETED]
http://www.fieldnotes.jp/d/



seasar-s2dao-dev メーリングリストの案内