[Seasar-user:4459] Re: [S2JSF] WebSphere上で、 PropertyNotFoundRuntimeException

松山 大樹 [E-MAIL ADDRESS DELETED]
2006年 8月 30日 (水) 22:36:50 JST


 松山です。

 WAS と、Tomcat の両方で交互にデバッグモードで動かして、ソースを追って
いったところ、だいたい次のような原因らしいです。

 org.seasar.jsf.util.BindingUtil#getValue() の中の動作です。
 引数:names の値を、HttpServletRequest から取得している部分です。
 最初の投稿で書いた、s2jsf-example の、「Employee Management」の例だと、
names の値は、BindingUtil#getValue() に来た時点でなしになっています。
 このとき、request のattributeName 一覧を取得した結果は、次のように
なっています。
 ■Tomcat 
  [0] = "i"
  [1] = "postback"
  [2] = "org.seasar.jsf.lifecycle.LifecycleImpl.EXECUTED"
  [3] = "class org.apache.myfaces.renderkit.html.util.JavascriptUtils.OLD_VIEW_ID"
 引数で与えられるname は、"e" なので、ここでは取得できず、その後の
処理でも取得できないので、結果的にgetValue() の返値は、null となります。

 ■WebSphere
  [0] = "e"
  [1] = "class org.apache.myfaces.renderkit.html.util.JavascriptUtils.OLD_VIEW_ID"
  [2] = "com.ibm.websphere.servlet.uri_non_decoded"
  [3] = "org.seasar.jsf.lifecycle.LifecycleImpl.EXECUTED"
  [4] = "postback"
  [5] = "i"
 属性として、"e" が格納されていて、value は null なので、BindingUtil の、68行目が
null となります。69行めで、value が null のとき、"" を返しているので、
getValue() の返値は、"" となります。
 これが、null になっていないため、BeanDescImpl#getPropertyDesc(String) で、
PropertyNotFoundRuntimeException() になるようです。

 HttpServletRequest の実装は、
 Tomcat → org.apache.catalina.connector.RequestFacade
 WebSphere → com.ibm.ws.webcontainer.srt.SRTServletRequest
 となっていて、attributeName の一覧の内容が異なるのは、この実装の
差によるもののようです。

 なので、BindingUtil#getValue() で、取得できた値がnull だったら、そのまま
null を返すようにすれば、解決する気がします。ただし、これはここだけを見た話で、
ここを修正することによって、どのような影響が出るかはちょっとわかりません。

 とりあえず、今日は疲れたので、ここまでにしておきます。
 
>
> 松山です。
>
> いろいろ環境を変えて試しているところです。
>
> WebSphere6.0(J2Se1.4.2ベース) → ×
> WebSphere6.1(J2SE1.5ベース) → ×
>
> Tomcat の場合は、5.0.30 でも、5.5.17 でも正常に動作します。
>
> MyFaces がらみかと思い、新しくS2JSF1.1.0 beta3 で作成してみましたが、
>やはり同様の例外になります。
>
> さらに調査中です。
>
>>
>> 松山です。
>>
>> Tomcat で開発中のシステムを、本番稼働に備えてWebSphere6.0 で動作させると、
>>こんな例外が出て困っています。
>>
>>例外(先頭部分のみ - 例外の全文は添付します)
>>------------------------------------------------------------------------------
>>[06/08/29 16:22:59:175 JST] 00000033 ValueBindingI E   Cannot get value for 
>>expression '#{e.empno}'
>>[06/08/29 16:22:59:253 JST] 00000033 ValueBindingI E   TRAS0014I: 次の例外がロ
>>グに記録されました。 
>>org.seasar.framework.beans.PropertyNotFoundRuntimeException: [ESSR0065]クラス
>>(java.lang.String)のプロパティ(empno)が見つかりません
>>	at 
>>org.seasar.framework.beans.impl.BeanDescImpl.getPropertyDesc(BeanDescImpl.java:102)
>>	at 
>>org.seasar.jsf.el.S2PropertyResolver.getProperty(S2PropertyResolver.java:202)
>>	at org.seasar.jsf.el.S2PropertyResolver.getValue(S2PropertyResolver.java:56)
>>	at 
>>org.apache.myfaces.el.ELParserHelper$MyPropertySuffix.evaluate(ELParserHelper.java:555)
>>	at org.apache.commons.el.ComplexValue.evaluate(ComplexValue.java:145)
>>	at 
>org.apache.myfaces.el.ValueBindingImpl.getValue(ValueBindingImpl.java:441)
>>	at javax.faces.component.UIParameter.getValue(UIParameter.java:129)
>>	at 
>>org.seasar.jsf.util.UIParameterUtil.saveParamsToRequest(UIParameterUtil.java:40)
>>	at 
>>org.seasar.jsf.application.ActionListenerImpl.processAction(ActionListenerImpl.java:58)
>>------------------------------------------------------------------------------
>>
>> これは、s2jsf-examples を、WebSphere6.0(正確には、Rational Software 
>>Development上
>>のテストサーバ)に持っていって、
>> Employee Management → [search]ボタン → 結果一覧の適当な行のEdit、Delete、
>>Inquire
>>をクリックすると発生する例外です。
>>
>> 開発中のシステムでは、
>>s2-framework-2.3.11.jar
>>s2-extension-2.3.11.jar
>>s2-jsf-1.0.16.jar
>> ですが、同じような現象が発生します。
>> 全ての画面で発生するわけではなく、特定の画面のみです。どのような画面で
>>発生するのかはよくわかりませんが、ページ遷移をともなう画面にのみ発生している
>>ような気がします(確実ではありません)。
>> s2jsf-examples の、他の画面ではこの例外は発生していません。
>> ただ、Validator で、存在しない日付を入力して[submit] を押すと、
>>-----------------------------------------------------------------------------
>>[06/08/29 16:40:51:653 JST] 00000036 ServletWrappe E   SRVE0068E: サーブレット
>> Faces Servlet で service() メソッドを呼び出せませんでした。 スローされた例外
>>: java.lang.NullPointerException
>>	at 
>javax.faces.convert.ConverterException.<init>(ConverterException.java:105)
>>	at 
>>org.seasar.jsf.convert.S2DateTimeConverter.getAsObject(S2DateTimeConverter.java:82)
>>	at 
>>org.apache.myfaces.renderkit.RendererUtils.getConvertedUIOutputValue(RendererUtils.java:780)
>>-----------------------------------------------------------------------------
>> となります。上の例外とは関係ないとは思いますが。
>>
>> 開発中のシステムで発生しているのは、
>>「メンテナンス画面」→「確認画面」→「完了画面」
>> と遷移するメンテナンス系の画面で、最初の1回は正常に完了画面まで
>>遷移しますが、続けて別のデータをメンテナンスしようとすると、同じような
>>例外になります。
>>
>> 例外の中の、
>>-----------------------------------------------------------------------------
>>クラス(java.lang.String)のプロパティ(empno)が見つかりません
>>-----------------------------------------------------------------------------
>> という部分から見ると、
>>-----------------------------------------------------------------------------
>>m:value="#{e.empno}"
>>-----------------------------------------------------------------------------
>> の、e をString として判断してしまっているようです。
>>
>> もう少し中を追ってみますが、心当たりがある方、ヒントなどいただけると、
>>とても助かります。
>>
>> よろしくお願いします。
>>
>>
>>-- 
>>::: 株式会社WOWOWコミュニケーションズ http://www.wowcom.co.jp/
>>:::   ITシステム・インテグレートDiv.
>>:::  Web・ソリューション&システム開発Unit.
>>:::   松山 大樹 - [E-MAIL ADDRESS DELETED]
>>---- inline file
>>_______________________________________________
>>Seasar-user mailing list
>>[E-MAIL ADDRESS DELETED]
>>https://www.seasar.org/mailman/listinfo/seasar-user
>
>-- 
>::: 株式会社WOWOWコミュニケーションズ http://www.wowcom.co.jp/
>:::   ITシステム・インテグレートDiv.
>:::  Web・ソリューション&システム開発Unit.
>:::   松山 大樹 - [E-MAIL ADDRESS DELETED]
>:::      tel 045-345-0429 fax 020-4622-7043
>
>_______________________________________________
>Seasar-user mailing list
>[E-MAIL ADDRESS DELETED]
>https://www.seasar.org/mailman/listinfo/seasar-user

-- 
::: 株式会社WOWOWコミュニケーションズ http://www.wowcom.co.jp/
:::   ITシステム・インテグレートDiv.
:::  Web・ソリューション&システム開発Unit.
:::   松山 大樹 - [E-MAIL ADDRESS DELETED]
:::      tel 045-345-0429 fax 020-4622-7043




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