0

NetBeans プラットフォームでのレコード ロックについて問い合わせがあります。

だから私はDBFテーブルを持つデータベースを持っています。実行している NetBeans プラットフォーム アプリケーションがあり、それらのテーブルにアクセスします。それらの 1 つのレコードをロックします。

実行する NetBeans プラットフォーム アプリケーションの別のインスタンスがあります。NetBeans プラットフォーム アプリケーションの複数のインスタンスが開いている場合、データベース内のロックされたレコードにアクセスできるのは 1 つだけになるようにしようとしています。私はそれを達成することに失敗しています。

間違っている場合は訂正してください。ただし、entitymanager.lock はアプリケーション内の EntityManage インスタンスに固有です。では、Application1.entityManager.lock がレコードをロックすると、Application2.entityManager はロックについて認識しないのでしょうか?

別の質問だと思います: 同じ NetBeans アプリケーションの 2 つのインスタンスが同じ EntityManager を共有することは可能ですか?

ありがとうございました

4

1 に答える 1

1

まず、EntityManager のインスタンスがスレッドセーフであるとは限りません。これは、仕様が実装がスレッド セーフであることを期待しておらず、エンティティ マネージャーのインスタンスを共有することを推奨していないことを意味します。結果は、エンティティ マネージャーを共有したくないということです。

ロックはエンティティ マネージャーを介して実行されますが、行はデータベースでロックされます。仕様では、これは次の単語で綴られています。

エンティティ インスタンスが悲観的ロックを使用してロックされている場合、永続化プロバイダーは、そのインスタンスの非コレクション値永続状態に対応するデータベース行をロックする必要があります。

于 2012-06-02T10:18:34.243 に答える