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

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


海野です。

現象の情報を追加致します。
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 メーリングリストの案内