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