について、いろいろメモ。 s2-dao-1.0.36-SNAPSHOT を使いたい編

<< 注意 >>
ここに記載しているメモは、動作させるために無理くり修正しています。
正しい動作方法ではありません。


s2-dao-1.0.36-SNAPSHOTを使いたかったので、buildして組み込んでみるとエラーが発生。

java.lang.NoClassDefFoundError: org/seasar/framework/util/Disposable


使っていたs2-framework-2.4.0-beta-3には、このクラスがないみたい。
最新のSVNをのぞいてみると、6/28に追加されてますね。
seasarも最新に差し替えてみる。s2-framework-2.4.0-beta-4 にすると

java.lang.NoClassDefFoundError: org/seasar/framework/util/ResourceNotFoundRuntimeException
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Unknown Source)
	at org.seasar.framework.util.ClassUtil.forName(ClassUtil.java:72)
	at org.seasar.framework.container.factory.ComponentTagHandler.start(ComponentTagHandler.java:46)
	at org.seasar.framework.xml.SaxHandler.start(SaxHandler.java:132)
	at org.seasar.framework.xml.SaxHandler.start(SaxHandler.java:126)
	at org.seasar.framework.xml.SaxHandler.startElement(SaxHandler.java:60)

またエラー。。。


s2-framework-2.4.0-beta-4のJARにはutil/ResourceNotFoundRuntimeExceptionがないですね。
exception/ResourceNotFoundRuntimeExceptionにあるんだけど、なんでutilパッケージを見てるんかなぁ。


ソースを見る限り、utilのResourceNotFoundRuntimeExceptionは見ないはずなんやけど。
SVNをおっかけたら、5月にutilにResourceNotFoundRuntimeExceptionがあった模様。
う〜ん。古いJARをみにいってるのかな〜。


さて、動かないときは、diconファイルを疑ってみる。
beta-3にくらべて、hotdeploy.diconとconvention.diconが増えてますね。
ChangeLogには記載がないなぁ〜。。。。とりあえず追加してみる。


現象変わらず・・・


しょうがないので、暫定対応。 
org/seasar/framework/util/ResourceNotFoundRuntimeException を作って回避。


また新たなエラー。。。

org.seasar.framework.beans.PropertyNotFoundRuntimeException: [ESSR0065]クラス(org.seasar.framework.convention.impl.NamingConventionImpl)のプロパティ(rootPackageName)が見つかりません
	at org.seasar.framework.beans.impl.BeanDescImpl.getPropertyDesc(BeanDescImpl.java:125)
	at org.seasar.framework.container.assembler.AccessTypePropertyDef.bind(AccessTypePropertyDef.java:30)
	at org.seasar.framework.container.assembler.AccessTypePropertyDef.bind(AccessTypePropertyDef.java:23)

NamingConventionImpl には rootPackageNameフィールドはありませんがconvention.dicon で以下のように定義しているため、エラーになるようです。
Seasar2.4 beta4に対応したteeda-html-exampleを参考に追加したんですが、



	

"exsample.project"


rootPackageNameのところをコメントアウトにしました。
XXXXXAutoRegisterをしているdiconファイルは、 を追加しないとエラーになりました。


で、次のエラー。

java.lang.IllegalArgumentException: exsample.project.web.impl.admin.AdminActionImpl
	at org.seasar.framework.convention.impl.NamingConventionImpl.fromClassNameToComponentName(NamingConventionImpl.java:286)
	at org.seasar.framework.container.autoregister.AbstractComponentAutoRegister.register(AbstractComponentAutoRegister.java:113)
	at org.seasar.framework.container.autoregister.AbstractComponentAutoRegister.processClass(AbstractComponentAutoRegister.java:102)
	at org.seasar.framework.util.ClassTraversal.traverseFileSystem(ClassTraversal.java:81)

NamingConventionImplクラスの283行目のクラス名の取得のところでこけている。
暫定対応で以下修正。
[前] String implkey = "." + implementationPackageName + ".";
[後] String implkey = implementationPackageName + ".";



ここまできて、やっとことさTOMCATが起動しました。