ふたつの川うるおう日記
2006-09-20 (Wed)
_ [Seasar][Java] S2StrutsV1.3.0-beta-2に入れ替えてみる (解決)
解決: 僕の凡ミスでしたー。
入れ替えてS2StrutsV1.3.0-beta-2用というか、S2Container 2.4.0 rc2用にごにょごにょdiconファイル書き換えて動かしてみると、COOL時OKになった状態で、HOT時にTooManyRegistrationRuntimeExceptionきちゃった(;´ー`)。
たぶん、diconファイルの書き方をどっか間違えてるか、またいつものURIどうにかするお手製の怪しいs2struts-qualifiedのどっかがいけないんだと思う。もう2時なので明日また考えよう。明日から大学後期講義開始。基本ゼミだけなのであんま関係ないけど(´ー`)。
とりあえずエラーログだけ貼り。
DEBUG 2006-09-20 01:53:21,937 [http-8080-Processor24] BEGIN org.seasar.struts.hotdeploy.ReloadFindActionConfigInterceptor#invoke(org.seasar.framework.aop.impl.NestedMethodInvocation@df090d)
DEBUG 2006-09-20 01:53:21,937 [http-8080-Processor24] Initializing module path '' configuration from '/WEB-INF/struts-config.xml'
DEBUG 2006-09-20 01:53:21,953 [http-8080-Processor24] BEGIN org.seasar.struts.lessconfig.hotdeploy.OndemandFindActionConfigInterceptor#invoke(org.seasar.framework.aop.impl.NestedMethodInvocation@df090d)
DEBUG 2006-09-20 01:53:22,031 [http-8080-Processor24] auto create ActionConfig[path=/util/user/search,name=posixAccountDto,parameter=method,scope=request,type=org.seasar.server.members.web.util.UserSearchAction,validate=false,cancellable=false
DEBUG 2006-09-20 01:53:22,031 [http-8080-Processor24] auto create ForwardConfig[name=result,path=/util/userSearch.html,redirect=false,contextRelative=false,module=null]
DEBUG 2006-09-20 01:53:22,031 [http-8080-Processor24] END org.seasar.struts.lessconfig.hotdeploy.OndemandFindActionConfigInterceptor#invoke(org.seasar.framework.aop.impl.NestedMethodInvocation@df090d) : ActionConfig[path=/util/user/search,name=posixAccountDto,parameter=method,scope=request,type=org.seasar.server.members.web.util.UserSearchAction,validate=false,cancellable=false
DEBUG 2006-09-20 01:53:22,031 [http-8080-Processor24] END org.seasar.struts.hotdeploy.ReloadFindActionConfigInterceptor#invoke(org.seasar.framework.aop.impl.NestedMethodInvocation@df090d) : ActionConfig[path=/util/user/search,name=posixAccountDto,parameter=method,scope=request,type=org.seasar.server.members.web.util.UserSearchAction,validate=false,cancellable=false
DEBUG 2006-09-20 01:53:22,031 [http-8080-Processor24] BEGIN org.seasar.struts.hotdeploy.ReloadFindFormBeanConfigInterceptor#invoke(org.seasar.framework.aop.impl.NestedMethodInvocation@67aece)
DEBUG 2006-09-20 01:53:22,031 [http-8080-Processor24] Initializing module path '' configuration from '/WEB-INF/struts-config.xml'
DEBUG 2006-09-20 01:53:22,046 [http-8080-Processor24] BEGIN org.seasar.struts.lessconfig.hotdeploy.OndemandFindFormBeanConfigInterceptor#invoke(org.seasar.framework.aop.impl.NestedMethodInvocation@67aece)
DEBUG 2006-09-20 01:53:22,062 [http-8080-Processor24] auto create FormBeanConfig[name=posixAccountDto,type=org.seasar.server.members.dto.PosixAccountDto]
DEBUG 2006-09-20 01:53:22,062 [http-8080-Processor24] END org.seasar.struts.lessconfig.hotdeploy.OndemandFindFormBeanConfigInterceptor#invoke(org.seasar.framework.aop.impl.NestedMethodInvocation@67aece) : FormBeanConfig[name=posixAccountDto,type=org.seasar.server.members.dto.PosixAccountDto]
DEBUG 2006-09-20 01:53:22,062 [http-8080-Processor24] END org.seasar.struts.hotdeploy.ReloadFindFormBeanConfigInterceptor#invoke(org.seasar.framework.aop.impl.NestedMethodInvocation@67aece) : FormBeanConfig[name=posixAccountDto,type=org.seasar.server.members.dto.PosixAccountDto]
DEBUG 2006-09-20 01:53:22,062 [http-8080-Processor24] BEGIN org.seasar.struts.hotdeploy.ReloadFindFormBeanConfigInterceptor#invoke(org.seasar.framework.aop.impl.NestedMethodInvocation@41986c)
DEBUG 2006-09-20 01:53:22,062 [http-8080-Processor24] Initializing module path '' configuration from '/WEB-INF/struts-config.xml'
DEBUG 2006-09-20 01:53:22,078 [http-8080-Processor24] BEGIN org.seasar.struts.lessconfig.hotdeploy.OndemandFindFormBeanConfigInterceptor#invoke(org.seasar.framework.aop.impl.NestedMethodInvocation@41986c)
DEBUG 2006-09-20 01:53:22,078 [http-8080-Processor24] auto create FormBeanConfig[name=posixAccountDto,type=org.seasar.server.members.dto.PosixAccountDto]
DEBUG 2006-09-20 01:53:22,078 [http-8080-Processor24] END org.seasar.struts.lessconfig.hotdeploy.OndemandFindFormBeanConfigInterceptor#invoke(org.seasar.framework.aop.impl.NestedMethodInvocation@41986c) : FormBeanConfig[name=posixAccountDto,type=org.seasar.server.members.dto.PosixAccountDto]
DEBUG 2006-09-20 01:53:22,078 [http-8080-Processor24] END org.seasar.struts.hotdeploy.ReloadFindFormBeanConfigInterceptor#invoke(org.seasar.framework.aop.impl.NestedMethodInvocation@41986c) : FormBeanConfig[name=posixAccountDto,type=org.seasar.server.members.dto.PosixAccountDto]
2006-09-20 01:53:22,078 [http-8080-Processor24] WARN org.apache.struts.action.RequestProcessor - 処理できない例外がスローされました: class org.seasar.framework.container.TooManyRegistrationRuntimeException
2006-09-20 01:53:22,078 [http-8080-Processor24] ERROR org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/members].[action] - サーブレット action のServlet.service()が例外を投げました
org.seasar.framework.container.TooManyRegistrationRuntimeException: [ESSR0045]interface org.seasar.server.members.web.util.UserSearchActionに複数のコンポーネント(org.seasar.server.members.web.util.impl.UserSearchActionImpl, org.seasar.server.members.web.util.impl.UserSearchActionImpl)が登録されています
at org.seasar.framework.container.impl.TooManyRegistrationComponentDefImpl.getComponent(TooManyRegistrationComponentDefImpl.java:45)
at org.seasar.framework.container.impl.S2ContainerImpl.getComponent(S2ContainerImpl.java:113)
at org.seasar.struts.pojo.PojoProcessAction.execute(PojoProcessAction.java:61)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.seasar.struts.processor.InternalS2RequestProcessor.processActionPerform(InternalS2RequestProcessor.java:112)
at org.seasar.struts.processor.InternalS2RequestProcessor$$EnhancedByS2AOP$$157211f.processActionPerform$$invokeSuperMethod$$(InternalS2RequestProcessor$$EnhancedByS2AOP$$157211f.java)
at org.seasar.struts.processor.InternalS2RequestProcessor$$EnhancedByS2AOP$$157211f$$MethodInvocation$$processActionPerform4.proceed(MethodInvocationClassGenerator.java)
at org.seasar.struts.pojo.processor.ProcessSetInputPathActionPerformInterceptor.invoke(ProcessSetInputPathActionPerformInterceptor.java:33)
at org.seasar.struts.processor.InternalS2RequestProcessor$$EnhancedByS2AOP$$157211f$$MethodInvocation$$processActionPerform4.proceed(MethodInvocationClassGenerator.java)
at org.seasar.struts.processor.InternalS2RequestProcessor$$EnhancedByS2AOP$$157211f.processActionPerform(InternalS2RequestProcessor$$EnhancedByS2AOP$$157211f.java)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.seasar.struts.processor.InternalS2RequestProcessor.process(InternalS2RequestProcessor.java:61)
at org.seasar.struts.processor.DelegateRequestProcessor.process(DelegateRequestProcessor.java:53)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.ajaxanywhere.AAFilter.doFilter(AAFilter.java:46)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:62)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.seasar.struts.filter.S2StrutsFilter.doFilter(S2StrutsFilter.java:42)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:62)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:63)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
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(Unknown Source)
[18:48追記] 僕の凡ミスでした。
自分で書いたURLのパスからアクションクラスのコンポーネント名に変換する処理のところで、web.util.UserSearchActionってあった時に、util_UserSearchActionと変換してました。HOT deploy時に自動的に登録されるコンポーネント名は、util_userSearchActionと、_の次は小文字だったので、コンポーネント名でgetComponentDefした際に見つからずにHotdeployBehavior#registerMap()が2回走ってしまい、TooManyRegistrationRuntimeExceptionが出てました。
というわけで、URLのパスからアクションクラスのコンポーネント名に変換結果をutil_userSearchActionになるようにしたら上手く動きました。
S2Container 2.4.0 rc1の時に上手く動いてたのは、その時は、2重登録してもS2ContainerImpl.createTooManyRegistration()が実行されていなかったからのようです。なので、たまたま見た目上問題無く動いてたと。。
_ [Java][Seasar] S2StrutsQualified 0.7 beta 2
対応したのをアップ。


