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