残念なことに、非スレッドセーフなデータモデルを使用する、古くなったJavaの "Swing"アプリケーションを開発しています。マルチスレッドおよびマルチコアPCのクライアント数が増加するにつれ、データへの非同期アクセスによる擬似ランダムエラーの数も増加します。私たちは6000個のJavaファイルのような巨大なコードベースを持っています。その大部分はかなり大きくて複雑です。実行時にオブジェクトへのすべての読み書きアクセスをインターセプトする方法はありますか?
グローバル静的ReentrantReadWriteLockを作成して、モデルへのアクセスを制御したいと考えています。私の計画は、テストシステムでReentrantReadWriteLockを使用している間は、常に成功して何もしないで、生産システムで使用するダミーのReadWriteLock実装を作成して、移行を段階的に行うことです。
私が必要とするのは、テストシステムでモデルへのすべてのアクセスを「インターセプト」し、アクセスが適切なロック/アンロックブロックのスクープ内にない場合にエラーを記録する方法です。 ReentrantReadWriteLockは、書き込みロックを所有しているかどうかを判断できます。私は、自分がThreadLocalなどを使って読み取りロック状態を追跡できると仮定しています。
Javaでは、どのようにすれば、明確に定義されたクラスセット内の任意のパブリックメソッドへのアクセスを実行時に傍受するコードを記述し、アクセスがロック/グローバルロックを照会することによってブロックをアンロックしますか? AspectJでこれを行うことはできますか?それとも何か?そしてどうやって?
+1。この場合、いくつかのファクトリまたはいくつかの注入メカニズムを使用して、「明確に定義されたクラスのセット」からすべての型のオブジェクトをインスタンス化する必要があることに注意してください。 – Kel