読者です 読者をやめる 読者になる 読者になる

S2DaoのGenerics系の対応が...

ちょっとアレ?たとえば、

 public interface BaseDao<T> {
   void create(T obj);
   T findById(long id);
 }

 public interface HogeDao extends BaseDao<Hoge> {
 }

 public class HogeDaoImpl implements HogeDao {
   public void create(Hoge obj);

   @Arguments("id")
   public Hoge findById(long id);
 }

でHogeDaoImplにdaoInterceptorを仕掛けて使うと、

org.seasar.framework.beans.MethodNotFoundRuntimeException: [ESSR0049]example.hoge.HogeDaoImplに適用可能なメソッド(create())が見つかりません
	at org.seasar.dao.impl.DaoMetaDataImpl.getSqlCommand(DaoMetaDataImpl.java:695)
	at org.seasar.dao.interceptors.S2DaoInterceptor.invoke(S2DaoInterceptor.java:52)
	at example.hoge.HogeDaoImpl$$EnhancedByS2AOP$$8b058b$$MethodInvocation$$create3.proceed(MethodInvocationClassGenerator.java)
	at example.hoge.HogeDaoImpl$$EnhancedByS2AOP$$8b058b.create(HogeDaoImpl$$EnhancedByS2AOP$$8b058b.java)
	at example.hoge.HogeDaoImpl.create(HogeDaoImpl.java:1)
	at example.hoge.HogeDaoTest.testCreateTx(HogeDaoTest.java:24)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
〜(省略)〜

とか、

org.seasar.framework.beans.MethodNotFoundRuntimeException: [ESSR0049]example.hoge.HogeDaoImplに適用可能なメソッド(findById())が見つかりません
	at org.seasar.dao.impl.DaoMetaDataImpl.getSqlCommand(DaoMetaDataImpl.java:695)
	at org.seasar.dao.interceptors.S2DaoInterceptor.invoke(S2DaoInterceptor.java:52)
	at example.hoge.HogeDaoImpl$$EnhancedByS2AOP$$caf083$$MethodInvocation$$findById0.proceed(MethodInvocationClassGenerator.java)
	at example.hoge.HogeDaoImpl$$EnhancedByS2AOP$$caf083.findById(HogeDaoImpl$$EnhancedByS2AOP$$caf083.java)
	at example.hoge.HogeDaoImpl.findById(HogeDaoImpl.java:1)
	at example.hoge.HogeDaoTest.testFindByIdTx(HogeDaoTest.java:30)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
〜(省略)〜

とかエラーになるようです。

HogeDaoImplをわざわざ用意しているのは、実装メソッドを混在させたいという意図によるものです。


どうも今の状況でGenericsを多用しつつS2ファミリーを使うというのはリスクが高いようですね。人柱としてはいいんですが、元々S2buriを利用しようとちょっとしたオレ様フレームワークを作ってみようかと思ってスタートした作業が遅々として進みません・・・。

とりあえずは割り切ってGenericsをあきらめるかなぁ・・・。