Windows サービス アプリケーションと、RMI を使用してサービスと通信するクライアントがあります。複数のクライアントで並行性テストを行う必要がありますが、コードにいくつかの静的変数があるため、すべてのクライアントを異なる jvm インスタンスで実行する必要があります。それをしてもいいですか ?何か案は?
2 に答える
はい、JDI を使用してこれを行うことができます - VirtualMachineManager ( を呼び出して取得できますBootstrap.virtualMachineManager();
) は、(少なくとも 1 つの)起動コネクタを提供します。次に、作成する VM のVM ミラーlaunch();
を提供するこのコネクタを呼び出すことができます。このミラーを使用すると、この VM でメソッドをリモートで実行できます。
この方法を使用すると、選択した数のリモート VM をセットアップできますが、明らかに、この方法を実行するとパフォーマンスが比較的大きく低下し、かなりの労力がかかります。努力が天文学的でない限り、私は個人的にコードを修正してスレッドの安全性を保証することをお勧めします (を使用ThreadLocal
)。そうすれば、JDI (または同様のセットアップ) について心配する必要がなくなります。
シェル スクリプトを使用して、ループ内の独自のパラメーター セットを持つ新しいクライアントを生成できます。
しかし、一般的に。いくつかの静的変数が共有されているという理由だけで、複数の VM でクライアント コードを実行することは、明らかに良い解決策ではありません。根本的な問題はクライアント コードにあります。すでに示唆されているようにThreadLocal
、 、ThreadPools
、またはいくつかの同期ロジックを使用して、さまざまなクライアント スレッド間で一連の変数を分離できます。