Javaの道 Javaに関する
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道 >  掲示板 >  掲示板(多重同時スレッドで排他処理したくないがAutoResultMapクラスのgetResultで排他処理となってしまう)
閲覧数:1152
掲示板(多重同時スレッドで排他処理したくないがAutoResultMapクラスのgetResultで排他処理となってしまう)
名前
匿名
題名 多重同時スレッドで排他処理したくないがAutoResultMapクラスのgetResultで排他処理となってしまう
質問内容

質問を評価する
(0ポイント)
スレッドでDBから値を取得し(iBatis)、CSVを出力しているのですが、複数を同時に実行したら、AutoResultMapクラスのgetResultに対してsyncronizedがかけられて、すべてのスレッドの処理が排他処理となり待ちが発生している状態です(スレッドダンプにより確認)。

sqlmapは以下のように可変のSQLになっています
<select id="〜" parametaClass="普通のクラス" resultClass="java.util.HashMap" remapResults="true">
SELECT
 $可変カラム$
FROM
 $可変テーブル$
WHERE
 ITEM_VALUE=#value#
</select>
取得するときは、sqlMapClient.queryWithRowHandler("sqlのid", パラメータクラス, this)で取得し、CSVに出力するようにしています(RowHandlerクラスを継承したクラスより呼び出し)。

特に、syncronized処理をしているところはないのですが、AutoResultMapクラスのgetResultでブロックされている状態です。
カラムやテーブルを可変にすることによって、勝手に排他処理がされてしまったりするのでしょうか?
それに対する回避方法などもありましたら教えてほしいのですが、よろしいでしょうか?
宜しくお願いします。
質問日時 2013-04-11 11:17:54
名前
匿名
回答内容

回答を評価する
(0ポイント)
ロックされている状態になるのでしょうか?
それとも最初のスレッドでブロックされて他スレッドが待ちになってるってことですか?

ちなみにAutoResultMapのgetResultsはsyncronizedがかけられていますよ。

【参考情報】
http://www16.atpages.jp/sekom/ibatis-2.3.0.677/doxygen/classcom_1_1ibatis_1_1sqlmap_1_1engine_1_1mapping_1_1result_1_1_auto_result_map.html
回答日時 2013-04-11 23:24:34
名前
匿名
回答内容

回答を評価する
(0ポイント)
>それとも最初のスレッドでブロックされて他スレッドが待ちになってるってことですか?

はい。その状態になっています。
1つずつしか処理されていません。

>ちなみにAutoResultMapのgetResultsはsyncronizedがかけられていますよ。

そうだったんですね。
するとこれのせいで、スレッドが待ち状態になったりするのでしょうか?
回答日時 2013-04-16 15:09:08
名前
回答内容

回答を評価する
(0ポイント)
ソースを見る限りAutoResultMapのインスタンスに対する排他です。
インスタンスが違えばそこでは待ちにならないと思います。
データーベースがらみのようですからそこで待たなくてもその先の
データーベースに待たされるかもしれません。
回答日時 2013-04-16 19:16:17
名前
匿名
回答内容

回答を評価する
(0ポイント)
>ソースを見る限りAutoResultMapのインスタンスに対する排他です。
>インスタンスが違えばそこでは待ちにならないと思います。
そうなんですね。
すいません、勉強不足でした。

>データーベースがらみのようですからそこで待たなくてもその先の
>データーベースに待たされるかもしれません。
なるほど、、この処理の部分しか見ていませんでした。
これ以降の処理も含めて見ていきます。

先の匿名の方、仙人さんありがとうございました。
まだ、解決はしていませんが、重要度小なので、解決する前に閉じられる可能性はありますが、解決できましたら、回答入力します。
(さらに追加質問の場合も。。。すいません)
回答日時 2013-04-19 10:40:48

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。



このページのトップへ
 ニュースJava基本Servlet・JSPオープンソースFAQ掲示板
Javaの道_CopyrightJavaの道