- ベストアンサー
Javaのコネクションやストリームについて
Javaのコネクションやストリームを別クラスやメソッドに渡したときの、close処理について質問です。 例えば、あるクラスで取得したDBコネクションオブジェクトを、別のクラスやメソッドに渡した場合、close処理はどこで行うのが適切でしょうか? 呼び出し元で行うのが良いのか、呼び出し先で行うのが良いのか、または、両方で行うべきなのか。 どなたかご教授願います。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは~!(^^♪ お返事遅くなりました。。。 たとえばAクラスとBクラスがあるとしてAからBを呼び、Bでコネクションを取得したのならば、Bでcloseします。 そしてもうひとつAクラスでコネクションを取得し、Bクラスに渡して使用するのであればBからAに戻り使用し終わったらcloseするのがいいと思います。 こんな感じでclose処理を切り分けるといいと思いますよ。 それと両方でclose処理してはいけないと言ったのは、ひとつは無意味だからというくらいですかね?例外が起こるかもしれませんね。ちなみにDBを2度openすると例外になるので! 2度行わないためにも、closeされているかわからない場合はisClosed()メソッドでConnectionがcloseされているか確認するといいと思います。 こんな感じでどうでしょうか? わかりづらい文ですみません。。。
その他の回答 (2)
- isi0611
- ベストアンサー率34% (46/134)
こんばんは~(^o^)丿 java開発してるものです。。。 通常closeはリソース解放のために行いますね! Connectionを別のクラスやメソッドに渡したのならば呼び出し元でclose処理した方がいいですね。 closeするとそのオブジェクトは使えなくなってしまうのでまた使用したい時に使えなくなります。 でもDBからデータを取得し終わったらすぐcloseで解放うしてあげた方がいいですよ~! ちなみに両方で行ってはいけません。
補足
例えば、コネクション・プーリングを使用していて、あるファクトリークラスからコネクション・オブジェクトを取得したとします。 これは使用した側でリソース解放する必要がありますよね? ちなみに、下記サイトにclose処理についての解説があります。 http://www.kab-studio.biz/Programing/JavaA2Z/Word/00000261.html ここでは、「終了処理は必ず使用した側が行う必要がある」とありますが、 これは、DBのコネクションには当てはまらないのでしょうか? >ちなみに両方で行ってはいけません。 これの理由を教えてもらえませんか? お手数ですが、よろしくお願いします。
- chuckcavaness
- ベストアンサー率53% (7/13)
通常、呼び出し元でクローズしたほうが良いと思います。渡し先で勝手にクローズされたら使い回しが利かないですよね。
お礼
なるほど! 使いまわす場合は、確かに勝手にクローズされたら意味ないですね。 勉強になりました、ありがとうございます。
お礼
お返事ありがとうございます! 理解することができました。 二度closeしないようにclose処理を切り分けたいと思います。 どうもありがとうございました!