HSQLDBのすべての関係を閉める方法(また錠の欠陥を防ぐ)
Angsuman Chakraborty
2005年3月5日
私はすべての関係を閉め、独立HSQLDBのデータベースを出ることにもかかわらず、少なくとも1つの関係がまだ開いている残ることに気づいた。
欠陥はHSQLDB 1.7.3およびHSQLDB 1.8.0 RC 8.で明示される。
次サンプルコードを編集し、動かせば、はじめてうまく動く。 二回目(2-3秒以内に最初にの直後に言えば後最初実行の完了動いた)それは失敗し必ずデータベースによって締められる例外を引用する!
いかにの下で に、ジャワ ソフトウェアファイルされる、 RDBMS |
|
RSS 2.0 |
Trackback この記事 |
この記事に電子メールを送りなさい
また読むのを好むかもしれない |




































2005年3月11日10:40 AMの
No. これは欠陥ではない。
私は広範な分析をし、現在のhsqldbロックファイルおよび優先順位のタイマー列の実施を書いた: 私はあなたの分析に同意しない。
HSQLDBはOracleかMySQLのよう、等今である: 正しくデータベースを締めるために、adminのユーザーとして明確に命令を出さなければならない。 (」操業停止…」)。
主な違いはOracleとは違ってその、であるまたは多分機械およびそれぞれのserveral HSQLDBの取付けかランニングJVMの例が特定のデータベース・ファイルセットにアクセスするように試みるかもしれないことがかなり堅く「機械またはリリースバージョンまたはデータファイルの置かれた」プロダクトごとの単一の取付けである等の、MySQL、大いにもっと多分観察された。
すなわち、私達に問題のMS Accessが持っていたある(持っているか。)、データベース・ファイルが(あったときにありなさいか。) ネットワーク・ドライブおよび複数の異なったクライアントマシンによって同時にアクセスされて。
しかし私達の問題は執筆JNI層なしでジャワが(タイプ4実施に利用できないJDBC/ODBCの運転者を使用しなければacccessに多数JVMプロセスに同じローカルデータベースファイルを与える共有されたmemまたはipc ODBCの関係のマネージャーを提供しないので、起こるためにがさらにもっと本当らしい)
とにかく、JVM (ctrlc)を、殺害、等、またはその他の理由で中断すればJVMは、する停止を不意に死ぬ() (また更にdeleteOnExitが利用できないより古いJDKSの出口())、そして本当に… .lckファイルは削除されない。
次の解放ではまたはそう、私達はshutdownHookの供給を自動検出し、が扱う人をそこに加える、これはまだ本当JVMの異常終了の助け。
しかしポイントに戻って: .lckファイルが削除されなければ、ロックファイルが10の第2間隔で触れられるので10第2緩衝地帯がある。
私は極めて安全な緩衝地帯があれば実際に重いCPUおよび続くディスク使用法があればこの数を選んだからである: ジャワおよびほとんどのオペレーティングシステムは高い負荷の下で実際に正確なタイミングを、特にしない。 ちょうど実際に高いresの例、ファイルの高いビットレート音声が付いている高いフレーム率のビデオについて)構成しないファイルのOS実施された十字プロセスロックを考えなさい。
2005年4月4日3:30 pmの
@Campbell
この問題へのあなたの詳しい洞察力をありがとう。
私が普通データベース への私の 関係を閉めているそれの上の私のコードから見ることができるように。 私は私の適用からのシングル・ユーザーとしてデータベースを開けた(要するにないサーバーとして)。 従って操業停止を要求するサーバーの規則は実際にここに適当なべきではない。
私はあなたとwrtである。 サーバーシナリオのあなたの錠の論理。 但し関係を閉めているシングル・ユーザーがデータベースにロックを解放する十分な手掛りべきであるように。
私はHSQLDBへのほとんどの使用場合がシングル・ユーザー(非サーバー)モードにあることを考える。 多くの場合私達は急速に再始動するjunitテスト等このような場合荷を積むのにそれを能力のためのテストケースにである大きい利点使用する。
どう思いますか。
2005年4月6日1:39 AMの
こんにちは、
私は同じ問題を有する。
書いた持っている:
***********************
adminのユーザーとして明確に命令を出さなければならない。 (」操業停止…」)。
***********************
私にその操業停止のプロシージャの小さいコード例を与えることができるか。
ありがとう
ステファン
2005年4月6日2:09 pmの
@Stefan
stmt.executeUpdate (」操業停止」);
stmtがjava.sqlであるところ。あなたがHSQLDB java.sqlから先に作成した声明。関係。
2006年1月28日11:57 pmの
素晴らしい場所およびur情報は素晴らしい。
I appriciateこれ。
Jakkireddy
2006年4月1日12:49 AMの
しかし私は何を私が私のIDEとデバッグし、私の適用を不意に終えるときするべきであるか。 これは終えられなかったデータベース接続をもたらす。
この効果を乗り越えるあらゆる方法があるか。
2006年4月1日8:32 AMの
ファイルは壊れるかもしれない。 万一のことがあっても手動でそれを省略しなければならない。