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