[Seasar-user:3651] [S2Dao] AbstractDaoを継承したクラスの作成について
eihan
[E-MAIL ADDRESS DELETED]
2006年 5月 19日 (金) 10:35:16 JST
eihanです。
現在、S2Dao 1.0.34 + S2Dao tiger 1.0.34 を使用して開発を行っているのですが、
AbstractDaoを継承したクラスの作成がうまく行きません。
アプリケーションのロード時に、以下のようなExceptionが出てしまいます。
Caused by: java.lang.NullPointerException
at org.seasar.dao.annotation.tiger.impl.BeanAnnotationReaderImpl.<init>(BeanAnnotationReaderImpl.java:34)
at org.seasar.dao.annotation.tiger.impl.AnnotationReaderFactoryImpl.createBeanAnnotationReader(AnnotationReaderFactoryImpl.java:31)
at org.seasar.dao.impl.BeanMetaDataImpl.initialize(BeanMetaDataImpl.java:120)
at org.seasar.dao.impl.DaoMetaDataImpl.initialize(DaoMetaDataImpl.java:217)
at org.seasar.dao.impl.DaoMetaDataFactoryImpl.createDaoMetaData(DaoMetaDataFactoryImpl.java:123)
at org.seasar.dao.impl.DaoMetaDataFactoryImpl.getDaoMetaData(DaoMetaDataFactoryImpl.java:95)
at org.seasar.dao.impl.AbstractDao.<init>(AbstractDao.java:39)
そこで、DaoMetaDataImpl#initialize に以下のようなパッチを当ててみたところ、
(かなりハードコーディングではありますが)
なんとか動作しました。
Class superClass = daoClass.getSuperclass();
if (superClass != null) {
daoClass = superClass.getInterfaces()[0];
}
確認お願いいたします。
また、AbstractDaoを継承したクラスを作成した場合、
MyDao/MyDaoImplというようなクラスを作成することになりますが、
この場合次のようにAutoRegisterにて一括登録ができません。
個別にaddIgnoreClassPatternを記述する必要がでてきます。
<initMethod name="addClassPattern">
<arg>"mypackagename"</arg>
<arg>".*Dao, .*DaoImpl"</arg>
</initMethod>
<initMethod name="addIgnoreClassPattern">
<arg>"mypackagename"</arg>
<arg>"MyDao"</arg>
</initMethod>
そこで要望なのですが、MyDao/MyDaoImplというInterface/Classが存在した場合、
どちらか一つを登録するようなAutoRegisterを作成していただけないでしょうか。
以上、ご検討お願いいたします。
Seasar-user メーリングリストの案内