[Seasar-user:8562] (無題)

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2007年 6月 21日 (木) 19:07:22 JST


お世話になっております。
石川と申します。
   
  s2-container-2.3.19
s2-dao-1.0.42
ognl-2.6.7
マルチCPU環境下
   
  上記環境において、マルチスレッド(2〜4)で
同SQLファイル(※1)のクエリを実行した場合、
初回アクセスにおいて稀にOGNLで例外(※2)が発生します。
(マルチCPU以外では再現しませんでした)
   
  ※1…添付:OrderDao_findbyOrderShipNo_oracle.sql
※2…添付:OGNL-Exception.txt
   
  SQLファイル「/*IF dto.orderNo != null*/」の
「orderNo」の部分をOGNLが取得出来ずに落ちています。
例外情報からOGNLのソースをトレースすると以下の箇所が
スレッドセーフには出来ていない様です。
   
  [ognl.SimpleNode.java#evaluateGetValueBody]
protected Object evaluateGetValueBody(
    OgnlContext context, Object source)
        throws OgnlException {
    Object      result;
    context.setCurrentObject(source);
    context.setCurrentNode(this);
    if (!constantValueCalculated) {
        constantValueCalculated = true;
        // 以下でフラグを立ててから値を設定している。初回アクセス時、
        // 別スレッドではconstantValueが未設定で返される可能性あり。
        hasConstantValue = isConstant(context);
        if (hasConstantValue) {
            constantValue = getValueBody(context, source);
        }
    }
    return hasConstantValue ? constantValue : getValueBody(context, source);
}
   
  スレッドセーフに作成されていないOGNLがまずいのでしょうか。
それともスレッドセーフを前提とする様なdicon設定をしている
私の使い方がまずいのでしょうか。
  ご確認頂ければ幸いです。
   
 

 
---------------------------------
Start Yahoo! Auction now! Check out the cool campaign
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: http://ml.seasar.org/archives/seasar-user/attachments/20070621/308bbada/attachment.html 
-------------- next part --------------
文字コード指定の無い添付文書を保管しました...
名前: OGNL-Exception.txt
URL:  http://ml.seasar.org/archives/seasar-user/attachments/20070621/308bbada/attachment.txt 
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: OrderDao_findbyOrderShipNo_oracle.sql
型:         application/octet-stream
サイズ:     226 バイト
説明:       4053339289-OrderDao_findbyOrderShipNo_oracle.sql
URL:        http://ml.seasar.org/archives/seasar-user/attachments/20070621/308bbada/attachment.obj 


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