[Seasar-user:9709] Re: setterインジェクションでDIされるケースとされないケースがある

Taro Unno [E-MAIL ADDRESS DELETED]
2007年 8月 6日 (月) 18:53:13 JST


たびたびすみません、海野です。
環境について書き忘れたので追記します。
(少々急いでおり、焦ってしまいました。。。^^;)

Java1.5.0_12
Tomcat5.5.23
Seasar2.4.16
Teeda1.0.8

です。
Hot、CoolDeployともに同じ現象が発生します。

宜しくお願い致します。


07/08/06 に Taro Unno<[E-MAIL ADDRESS DELETED]> さんは書きました:
> 海野です。
>
> 現象の情報を追加致します。
> DIされない場合も特にスタックトレースが出力されないので
> デバッガで追ってみました。
>
> 下記のgetValueメソッドで
>    throw new IllegalPropertyRuntimeException
> している箇所に入ります。
>
> 同じページを2回表示すると、2回目は問題なく
> getValueメソッドで取得できます。
>
> 何か、見当がつく方、宜しくお願い致します。
>
>
>
> BindingTypeShouldDef(AbstractBindingTypeDef).getValue(ComponentDef,
> Object, Object, String) 行: 284
> BindingTypeShouldDef(AbstractBindingTypeDef).bindAuto(ComponentDef,
> PropertyDesc, Object) 行: 208
> BindingTypeShouldDef.doBind(ComponentDef, PropertyDesc, Object) 行: 58
> BindingTypeShouldDef(AbstractBindingTypeDef).bind(ComponentDef,
> PropertyDef, PropertyDesc, Object) 行: 78
> AutoPropertyAssembler.assemble(Object) 行: 67
> RequestComponentDeployer.deploy() 行: 67
> ComponentDefImpl.getComponent() 行: 111
> S2ContainerImpl.getComponent(Object) 行: 129
> BindingUtil.getValue(S2Container, String) 行: 61
> TeedaVariableResolver.resolveVariable(FacesContext, String) 行: 83
> VariableResolverUtil.resolveVariable(FacesContext, String) 行: 38
> ELVariableResolver.resolveVariable(String) 行: 37
> NamedValue.evaluate(VariableResolver, FunctionMapper, Logger) 行: 124
> ComplexValue.evaluate(VariableResolver, FunctionMapper, Logger) 行: 140
> CommonsExpressionProcessorImpl.evaluate(FacesContext, Object) 行: 94
> ValueBindingImpl.getValue(FacesContext) 行: 68
> BindingUtil.resolveBinding(String) 行: 86
> BindingUtil.resolveBindingNoException(String) 行: 92
> TInputCommaTextTag.setProperties(UIComponent) 行: 82
> TInputCommaTextTag(UIComponentTag).createComponent(FacesContext, String) 行: 391
> TInputCommaTextTag(UIComponentTag).createChild(FacesContext,
> UIComponent, String) 行: 397
> TInputCommaTextTag(UIComponentTag).findComponent(FacesContext) 行: 274
> ElementProcessorImpl.composeComponentTree(FacesContext, PageContext,
> UIComponentTag, Tag) 行: 231
> ElementProcessorImpl.composeComponentTree(FacesContext, PageContext,
> Tag) 行: 200
> ElementProcessorImpl.composeComponentTreeChildren(FacesContext,
> PageContext, Tag) 行: 247
> ElementProcessorImpl.composeComponentTree(FacesContext, PageContext,
> UIComponentTag, Tag) 行: 235
> ElementProcessorImpl.composeComponentTree(FacesContext, PageContext,
> Tag) 行: 200
> ElementProcessorImpl.composeComponentTreeChildren(FacesContext,
> PageContext, Tag) 行: 247
> ElementProcessorImpl.composeComponentTree(FacesContext, PageContext,
> UIComponentTag, Tag) 行: 235
> ElementProcessorImpl.composeComponentTree(FacesContext, PageContext,
> Tag) 行: 200
> ElementProcessorImpl.composeComponentTreeChildren(FacesContext,
> PageContext, Tag) 行: 247
> ElementProcessorImpl.composeComponentTree(FacesContext, PageContext,
> UIComponentTag, Tag) 行: 235
> ElementProcessorImpl.composeComponentTree(FacesContext, PageContext,
> Tag) 行: 200
> ViewProcessor(ElementProcessorImpl).composeComponentTreeChildren(FacesContext,
> PageContext, Tag) 行: 247
> ViewProcessor(ElementProcessorImpl).composeComponentTree(FacesContext,
> PageContext, UIComponentTag, Tag) 行: 235
> ViewProcessor(ElementProcessorImpl).composeComponentTree(FacesContext,
> PageContext, Tag) 行: 200
> HtmlViewHandler.createView(FacesContext, String) 行: 120
> RestoreViewPhase.composeViewRoot(FacesContext, String) 行: 120
> RestoreViewPhase.executePhase(FacesContext) 行: 81
> RestoreViewPhase(AbstractPhase).execute(FacesContext) 行: 55
> LifecycleImpl.execute(FacesContext) 行: 68
> FacesServlet.service(ServletRequest, ServletResponse) 行: 92
> ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse) 行: 269
> ApplicationFilterChain.doFilter(ServletRequest, ServletResponse) 行: 188
> ExtensionsFilter.doFilter(ServletRequest, ServletResponse, FilterChain) 行: 122
> ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse) 行: 215
> ApplicationFilterChain.doFilter(ServletRequest, ServletResponse) 行: 188
> AaaAuthFilter.doFilter(ServletRequest, ServletResponse, FilterChain) 行: 98
> ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse) 行: 215
> ApplicationFilterChain.doFilter(ServletRequest, ServletResponse) 行: 188
> AaaLoginFilter.doFilter(ServletRequest, ServletResponse, FilterChain) 行: 94
> ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse) 行: 215
> ApplicationFilterChain.doFilter(ServletRequest, ServletResponse) 行: 188
> HotdeployFilter.doFilter(ServletRequest, ServletResponse, FilterChain) 行: 69
> ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse) 行: 215
> ApplicationFilterChain.doFilter(ServletRequest, ServletResponse) 行: 188
> S2ContainerFilter.doFilter(ServletRequest, ServletResponse, FilterChain) 行: 64
> ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse) 行: 215
> ApplicationFilterChain.doFilter(ServletRequest, ServletResponse) 行: 188
> EncodingFilter.doFilter(ServletRequest, ServletResponse, FilterChain) 行: 69
> ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse) 行: 215
> ApplicationFilterChain.doFilter(ServletRequest, ServletResponse) 行: 188
> StandardWrapperValve.invoke(Request, Response) 行: 210
> StandardContextValve.invoke(Request, Response) 行: 174
> StandardHostValve.invoke(Request, Response) 行: 127
> ErrorReportValve.invoke(Request, Response) 行: 117
> StandardEngineValve.invoke(Request, Response) 行: 108
> CoyoteAdapter.service(Request, Response) 行: 151
> Http11Processor.process(InputStream, OutputStream) 行: 870
> Http11Protocol$JmxHttp11ConnectionHandler(Http11BaseProtocol$Http11ConnectionHandler).processConnection(TcpConnection,
> Object[]) 行: 665
> PoolTcpEndpoint.processSocket(Socket, TcpConnection, Object[]) 行: 528
> LeaderFollowerWorkerThread.runIt(Object[]) 行: 81
> ThreadPool$ControlRunnable.run() 行: 685
> ThreadWithAttributes(Thread).run() 行: 595
>
>
>
>
> 07/08/06 に Taro Unno<[E-MAIL ADDRESS DELETED]> さんは書きました:
> > 海野です。
> > いつもお世話になっております。
> >
> > setterインジェクションしているPageクラスのプロパティが
> > インジェクションされるケースとされないケースがあり、
> > 現象が切り分けられず困っております。
> >
> > インジェクションされないケースでは、APサーバ(Tomcat)起動後、
> > 初めてそのPageクラスを呼び出す場合だけインジェクションされず、
> > プロパティがnullになっています。
> >
> > setterメソッドにデバッグポイントを張ると、
> > インジェクションされるケースでは初めての呼び出しでsetterが呼ばれるのに対し、
> > インジェクションされないケースでは初めての呼び出しでsetterが呼ばれない
> > という状態です。
> >
> > クラス構成は
> >
> > web.include.AaaPage
> > web.xxx.XxxPage
> > web.yyy.YyyPage
> >
> > としてあり、XxxPageとYyyPageクラスに、それぞれ
> >
> >    private AaaPage aaaPage;
> >
> >    public void setAaaPage(AaaPage aaaPage){
> >        this.aaaPage = aaaPage;
> >    }
> >
> > としています。
> > このsetterメソッドが、
> >
> >    XxxPageでは必ず呼ばれる
> >    YyyPageでは、APサーバ(Tomcat)起動後初めての場合だけ呼ばれない
> >
> > という状態なのですが、なぜ呼ばれないのか原因をつきとめる方法がわかりません。
> > CoolDeployで起動時のログには、XxxPageとYyyPageクラスの両方とも
> > コンポーネント定義が登録されている旨のログが出力されています。
> >
> >
> > 原因の切り分け方、調査方法、回避策など
> > ご存知の方、何卒宜しくお願いします。
> >
>



Seasar-user メーリングリストの案内