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