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

s2struts1.3.0-beta1対応のPdStruts(続々)

seasar

id:higayasuoさんありがとうございます。

教えていただいた通り、今までClass#getMethod()を使ってた部分をBeanDescFactory#getMethod()に置換してみました。

しかーし。
なんだかよくわからないことに、コンパイルエラーにはならないモノの実行時にBeanDescFactory#getMethod()自体がNoSuchMethodErrorになってしまいます。
クリーンビルドしても変わらない。
とりあえずS2.4-beta-2→S2.4-beta-3にあげてみたら、通るようになりました。
うーん。まあそんなもんか。


さて、JPetStoreのトップページが表示されました!

が、別のページに行こうとすると、

org.seasar.framework.exception.InstantiationRuntimeException: [ESSR0041]jpetstore.integration.dao.impl.CategoryDaoImplの作成に失敗しました。理由はjava.lang.InstantiationException
	at org.seasar.framework.util.ConstructorUtil.newInstance(ConstructorUtil.java:41)
	at org.seasar.framework.container.assembler.AbstractConstructorAssembler.assembleDefault(AbstractConstructorAssembler.java:88)
	at org.seasar.framework.container.assembler.AutoConstructorAssembler.doAssemble(AutoConstructorAssembler.java:40)
	at org.seasar.framework.container.assembler.AbstractConstructorAssembler.assemble(AbstractConstructorAssembler.java:50)
	at org.seasar.framework.container.deployer.RequestComponentDeployer.deploy(RequestComponentDeployer.java:60)
	at org.seasar.framework.container.impl.ComponentDefImpl.getComponent(ComponentDefImpl.java:98)
	at org.seasar.framework.container.impl.S2ContainerImpl.getComponent(S2ContainerImpl.java:107)
	at org.seasar.framework.container.assembler.AbstractBindingTypeDef.bindAuto(AbstractBindingTypeDef.java:149)
	at org.seasar.framework.container.assembler.BindingTypeShouldDef.doBind(BindingTypeShouldDef.java:51)
	at org.seasar.framework.container.assembler.AbstractBindingTypeDef.bind(AbstractBindingTypeDef.java:67)
	at org.seasar.framework.container.assembler.AutoPropertyAssembler.assemble(AutoPropertyAssembler.java:63)
	at org.seasar.framework.container.deployer.RequestComponentDeployer.deploy(RequestComponentDeployer.java:62)
	at org.seasar.framework.container.impl.ComponentDefImpl.getComponent(ComponentDefImpl.java:98)
	at org.seasar.framework.container.impl.S2ContainerImpl.getComponent(S2ContainerImpl.java:107)
	at org.seasar.framework.container.assembler.AbstractBindingTypeDef.bindAuto(AbstractBindingTypeDef.java:163)
	at org.seasar.framework.container.assembler.BindingTypeShouldDef.doBind(BindingTypeShouldDef.java:51)
	at org.seasar.framework.container.assembler.AbstractBindingTypeDef.bind(AbstractBindingTypeDef.java:67)
	at org.seasar.framework.container.assembler.AutoPropertyAssembler.assemble(AutoPropertyAssembler.java:63)
	at org.seasar.framework.container.deployer.RequestComponentDeployer.deploy(RequestComponentDeployer.java:62)
	at org.seasar.framework.container.impl.ComponentDefImpl.getComponent(ComponentDefImpl.java:98)
	at org.seasar.framework.container.impl.S2ContainerImpl.getComponent(S2ContainerImpl.java:107)
	at pdstruts.util.DiconUtil.getComponent(DiconUtil.java:26)
	at pdstruts.control.impl.PageFactoryImpl.newPage(PageFactoryImpl.java:49)
〜(省略)〜
	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	at java.lang.Thread.run(Thread.java:595)
Caused by: java.lang.InstantiationException
	at sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:30)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
	at org.seasar.framework.util.ConstructorUtil.newInstance(ConstructorUtil.java:39)
	... 74 more

とエラー発生。

さて次はgetComponent()あたりのようです。これから調べます。

抽象クラスだった

わけです。

一部実装メソッドを提供したいのでS2Daoの抽象クラス戦略をとっています。
なので、上でエラーになっているCategoryDaoImplなどはabstractになっています。
それをインスタンス化しようとえらーになってるわけですね。

さて、どうするのが正解なのでしょうか?

  • (A)そういうクラスは今まで通りalldao.diconでcomponent定義して、aspect
  • (B)HotDeploy流の新しい作法がある。
  • (C)その他。