GAE/Jの本番環境ではJDOのstartsWith()で日本語が通らない
少し前になりますが、9/9にSlim3 User Japanへ投稿させていただいた障害の内容と顛末についてまとめておきます。
初回投稿(自分が書いた文章でも有りますので全文引用します。)
two-strokeです。
いつも大変お世話になっております。
AttributeMeta.startsWith()の挙動について確認させていただけますようお願い致します。
■現象
GAE上で、AttributeMeta.startsWith()を適用した検索を行った場合、
ひらがな、カタカナ、漢字(おそらく2バイトコード全般)では該当するものが有るにも関わらず
取得対象にならない。
(開発サーバ上では期待動作します。)
■詳細
仮に下記のデータが格納されているとした場合、
・ABC
・あいう
・アイウ
・亜意卯
下記条件で取得した結果件数は↓の通りです。
m.columnName.startsWith("A")...1件
m.columnName.startsWith("あ")...0件
m.columnName.startsWith("ア")...0件
m.columnName.startsWith("亜")...0件何かお気づきの点がございましたらアドバイスをいただけますようお願い致します。
以上、宜しくお願い致します。
ここから先はSlim3開発者のひがさんによりGoogle App Engine for Javaに、
その後、Google App Engine Issue Trackerへご登録いただいたことで、現在はGoogleサイドの対応待ちというステータスになっています。
この一連の流れから多くのことを考えさせられました。
・Slim3の提供するDaoに完全に依存していたため、LowLevelAPIとの境界が分かっていない事に対する反省。
(ただし学習効率を考えてのことなので、現時点では仕方が無いとも思っています。)
・Slim3に対して多少のフィードバックが出来たことで喜んでいたが、(他力本願ながら)結局Googleにまで辿り着いてしまい驚愕。
・EarlyLook版という位置づけとは言え、簡単に気付きそうな障害だけに現時点でのGAE/Jへの信頼度が微妙に減少。
・英語も苦も無く使いこなすひがさんを見て、英語の必要性を改めて痛感。
#ちなみにGoogle側の対応はまだですが、ひがさんより回避方法を示していただいております。
workaroundとしては、
m.content.ge("あ"), m.content.lt("あ" + "\ufffd")
のように、startsWithをrange scanに変更すれば大丈夫です。
これは確認済みです。