こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

java1.8+butterfly+oracle

こんにちわ。
私は今、java1.8から
Butterfly Persistenceを使って
oracle11gにアクセスするwebシステムを作っています。

実は困ったことが発生しています。

・4テーブルを結合してSELECTを掛ける
・2回目の操作以降、取得できなくなるテーブルがある。
(そのテーブルの情報が全てnullになる)

・クエリ発行前にブレークポイントで一旦止めてステップ実行すると正常に取得する。
・クエリ発行後にブレークポイントを設定するとやはりnullになっているが、そのまま、eclipseの式ビューにクエリを発行してる式を入れると正常に取得する。
・クエリ発行の直前にThred.sleep(2000)
を入れると何度やってもセレクトが成功する。(上手くいく、nullにならない)

です。

ドライバはoci 64bit
butterflyのデータベースマネージャーを使用しています。

知りたい事。
何故取得できないテーブルがあるのか?
何故Thred.sleepを入れると取得できる様になるのか?

経緯
 このシステムは、もともとmySQLで作られていて、諸事情によりOracleに変換する必要が出てきました。
その変換係に私が指名されました。
mySQLのlongTextを使っていたので、
最初はOracleのLongにしていました。
最初はbutterflyのオブジェクトDaoで1テーブル毎に取得したのですが
1テーブルなぜか検索結果が0になりした。
そこでコネクションを取得して
プリペアドステートメントに切り替えたのですが
改善せず
いろいろ調べると
jdbcドライバでlongを使うと、
最初に読まなきゃならないとかいろいろ成約があり、ORMapperでlongが怪しいと思い、
そこまで長い文字列入らないと思われるので
varchar2(4000)にしました。
が、解決しません。
連続して複数のテーブルにセレクトするのが悪いと思い、
テーブルを結合させて
butterflyのマップオブジェクトで取得したのですが
やはり該当テーブルがnullになりました。
その時はthinドライバだったので、
ociなら大丈夫かと思いociに変換。
(と言いますのも、試験的に該当箇所をasp.net c#に移植し、全く同じセレクト文を投げると全く問題なく動き、
それがoci接続なのでocIにすれば行けると思いました。
asp.netとc#なら問題なかったのでjavaカテゴリに来ました)
しましたが上記のとおりです。

javaVMのメモリが不足したかと思い
eclipseからtomcatのメモリを1024mに設定しましたが解決せず。

どなたか似たような現象に遭遇した方や
心当たり有る方いますでしょうか?

投稿日時 - 2015-06-11 19:30:44

QNo.8992364

困ってます

質問者が選んだベストアンサー

Butterfly Persistenceを使ってるわけじゃないからわからないけど
なんかスレッド処理で競合したりしていないかい?
ブレークポイント入れるとOKとかスリープ入れるとOKとか。


>(と言いますのも、試験的に該当箇所をasp.net c#に移植し、全く同じセレクト文を投げると全く問題なく動き、
>それがoci接続なのでocIにすれば行けると思いました。
>asp.netとc#なら問題なかったのでjavaカテゴリに来ました
ここまで試したなら、余計なライブラリ使わないでJDBCのみで取得してみたら?
たぶん取れると思うけど。

投稿日時 - 2015-06-12 08:11:34

お礼

お恥ずかしながら何人もの手を渡り歩き悪設計の博物館の様になってプログラムに起因するバグでした。
javascriptから更新、削除挿入、選択のリクエストが別々のajaxで走り、私は選択の箇所だけ見ていたので削除挿入があるとなかなか気づきませんでした。
別のリクエストで削除されたタイミングでセレクトしてたので引っかからなかっただけでした。
スリープ入れると他のajaxの処理が終わるのでうまく行ってただけでした。

ご迷惑お掛けしました

投稿日時 - 2015-06-12 21:27:48

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問