[Seasar-user:7377] HotDeploy推奨パッケージ構成以外でImplクラスをDIする方法を教えてください。
ryota
[E-MAIL ADDRESS DELETED]
2007年 4月 21日 (土) 17:56:10 JST
お世話になります。ryotaです。
ローカルサーバー上でHotDeployが動くサンプルが
S2StrutsExample-V1.3.0-beta
の中にあり、早速動かしてみましたところ、サーバー再起動せずに
クラスの修正が反映されて感動しました。
このS2Strutsのサンプルでは、HotDeployで推奨されている
ルートパッケージが「org.seasar.struts.examples.employee」
になっており、Employeeテーブルのマスタをメンテナンス
することができます。
そこで疑問点が出てきたため質問させてください。
【質問】
org.seasar.struts.examples.employee以外のパッケージにも
org.seasar.struts.examples.employee以下の構成でクラスを作り、
自動でImplクラスをDIする方法はありますでしょうか?
【質問の背景】
現在のプロジェクトでは、
org.seasar.struts.examples.login
org.seasar.struts.examples.logout
org.seasar.struts.examples.createemployee
といったユースケースごとにパッケージを作成し、
そのパッケージの中にaction,dto,service,logicなどの
パッケージを含ませるようにしています。
そこでconvention.dicomに登録するルートパッケージ名を
<arg>"org.seasar.struts.examples.employee"</arg>
から
<arg>"org.seasar.struts.examples"</arg>
へ変更したのですが、HotDeploy機能は
org.seasar.struts.examples.login
org.seasar.struts.examples.logout
org.seasar.struts.examples.createemployee
全てにおいてうまく言ったのですが、
org.seasar.struts.examples.login.logic.impl.LoginLogicImplクラスを作り、
org.seasar.struts.examples.login.logic.impl.LoginActionクラスで自動でLoginLogicImplを
自動DIしようとするプログラムを書くとサーバー起動時に下記の例外が出てきます。
007-04-21 17:15:17,953 [main] ERROR
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/XXXSystem]
- action: null
java.lang.IllegalArgumentException:
org.seasar.struts.examples.login.logic.impl.LoginLogicImpl
at org.seasar.framework.convention.impl.NamingConventionImpl.toInterfaceClassName(NamingConventionImpl.java:485)
at org.seasar.framework.convention.impl.NamingConventionImpl.fromClassNameToComponentName(NamingConventionImpl.java:348)
at org.seasar.framework.container.creator.ComponentCreatorImpl.createComponentDef(ComponentCreatorImpl.java:236)
at org.seasar.framework.container.hotdeploy.HotdeployBehavior.createComponentDef(HotdeployBehavior.java:108)
at org.seasar.framework.container.hotdeploy.HotdeployBehavior.getComponentDef(HotdeployBehavior.java:87)
at org.seasar.framework.container.impl.S2ContainerBehavior$DefaultProvider.acquireFromHasComponentDef(S2ContainerBehavior.java:101)
at org.seasar.framework.container.impl.S2ContainerBehavior.acquireFromHasComponentDef(S2ContainerBehavior.java:53)
at org.seasar.framework.container.impl.S2ContainerImpl.hasComponentDef(S2ContainerImpl.java:405)
at org.seasar.struts.lessconfig.config.rule.impl.DefaultActionFormNamingRule.toActionFormName(DefaultActionFormNamingRule.java:75)
at org.seasar.struts.lessconfig.autoregister.impl.ActionFormConfigCreatorImpl.createFormBeanConfig(ActionFormConfigCreatorImpl.java:62)
at org.seasar.struts.lessconfig.autoregister.impl.StrutsConfigRegisterImpl.registerActionForm(StrutsConfigRegisterImpl.java:88)
at org.seasar.struts.lessconfig.autoregister.impl.StrutsConfigRegisterImpl.registerActionForms(StrutsConfigRegisterImpl.java:83)
at org.seasar.struts.lessconfig.autoregister.impl.StrutsConfigRegisterImpl.register(StrutsConfigRegisterImpl.java:75)
at org.seasar.struts.lessconfig.plugin.AutoStrutsConfigRegisterPlugIn.register(AutoStrutsConfigRegisterPlugIn.java:101)
at org.seasar.struts.lessconfig.plugin.AutoStrutsConfigRegisterPlugIn.init(AutoStrutsConfigRegisterPlugIn.java:80)
at org.apache.struts.action.ActionServlet.initModulePlugIns(ActionServlet.java:884)
at org.apache.struts.action.ActionServlet.init(ActionServlet.java:356)
at javax.servlet.GenericServlet.init(GenericServlet.java:212)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1139)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:966)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3956)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4230)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:448)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
org.seasar.struts.examples.login.logic.impl.LoginLogicImplのクラスを
org.seasar.struts.examples.login.logic.impl.LoginLogicImplaaaなどにリネームすると
上記のエラーが消えます。
そこで上記にも書きましたが、
org.seasar.struts.examples.employee以外のパッケージにも
org.seasar.struts.examples.employee以下の構成でクラスを作り、
自動でImplクラスをDIする方法はありますでしょうか?
すみませんが、ご回答よろしくお願いいたします。
Seasar-user メーリングリストの案内