matsukaz's blog

Agile, node.js, ruby, AWS, cocos2d-xなどなどいろいろやってます

DWRでトラブル中

DWR利用時に、とある環境下で怪しい現象が発生中です。まとめるとこんな感じ。

  • 現象
    • DWRを利用したAjax呼び出し時のみDWRは関係なくIEMSXML 5.0のXMLHttpRequestを利用したときでした)、ブラウザの言語設定で言語コードに"ja"を指定しているにも関わらず、Accept-languageが"j"となってしまう。
  • 環境
    • Windows XP SP2
    • IE 6.0
    • 詳細は調査中(現状では2台のマシンで現象を確認)

APサーバにTomcatなどを利用していれば問題にならなかったと思うけど(言語コードが無視されるだけ)、Oracle Application Serverは"j"みたいな一文字の言語コードを渡すと500番のエラーを返す仕様らしく・・・orz
現象が発生しているマシンが同時期に渡された2台だけって言うのも怪しいところ。検証用に全く同じマシンを用意してくれるので、届いたらさらに詳細を調べてみますー。
いないと思うけど、もし同じ現象に悩まされた方がいましたら教えて下さいまし!


追記:2007/12/07 01:47
いろいろ調べた結果、以下のことが分かりました。

  • 同じMSXML 5.0(バージョンまで一緒)でも、環境によっては上記の現象が発生する。
  • Oracle Application Serverが500番のエラーを返す理由は、内部でlocaleを解釈する際にStringIndexOutOfRangeExceptionが発生しているため(ぉぃ

結局以下の対応を行うことにしました。

  • dwr.jarに含まれるengine.jsを変更し、MSXML 4.0以前が利用されるように修正

変更前のengine.jsの記述

dwr.engine._XMLHTTP = ["Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];

変更後のengine.jsの記述

dwr.engine._XMLHTTP = ["Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];