[s2container-php5:121] Solaris で RELNO の機能を利用したときのS2Dao_HashMapについて
Noriyuki ITAGAKI
[E-MAIL ADDRESS DELETED]
2008年 4月 16日 (水) 04:17:23 JST
板垣と申します。
以下の環境で利用させていただいております。
・s2dao.php5-1.1.2.tar.gz
・s2container.php5-1.1.3.zip
・Oracle10g
・Apache/2.0.61 (source) PHP/5.2.4
・Solaris10(SPARC)
Solaris で RELNO の機能を利用したとき、連結される
外部結合テーブルのBeanがおかしくなるようです。
※ 同じコードでWindowsでは再現しません。
「S2Dao_RelationRowCache.class.php」を確認させていただきましたが、
以下のようになっているようです。
39: return $this->getRowMap($relno)->get($key->hashCode());
43: $this->getRowMap($relno)->put($key->hashCode(), $row);
S2Dao_RelationKey::hashCode() の値が偶然一致しているのかと思い、
調査しましたが、別の値になっておりました。
※ 偶然一致してしまう可能性はないでしょうか。
おかしくなるデータを確認したところ、S2Dao_RelationKey::hashCode()
の値がマイナスになっているもののように思います。
S2Dao_HashMap のソースでは、array() をラッピングするように
なっておりますので、数値(マイナスや十分に大きな値)を設定した
ときの挙動は保障されていないかもしれません。
※ なぜか、Windows版では、マイナスは問題なさそうですが、十分に
大きな値を設定したとき、想定する結果にはなりませんでした。
> 「十分に大きな値」と「十分に大きな値+1」は、
同じキーとして扱われる。
java のHashMapのように、キーとして、リテラルな数値は設定できない
方が良いと思いますが、いかがでしょうか。
現在、「S2Dao_HashMap.class.php」を添付のファイルのように修正し、
「S2Dao_RelationRowCache.class.php」ファイルを以下のように
修正して運用しておりますが、何か不都合や、別のアドバイスが
ございましたら、ご教示いただけると幸いです。
39: return $this->getRowMap($relno)->get($key);
43: $this->getRowMap($relno)->put($key, $row);
既出の問題の場合、または、PHP.iniの設定によるものの場合は、
お許しください。
以上です。
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: S2Dao_HashMap.class.php
型: application/php
サイズ: 3465 バイト
説明: 無し
URL: http://ml.seasar.org/archives/s2container-php5/attachments/20080416/742691ce/attachment-0001.bin
S2Container-PHP5 メーリングリストの案内