4

Windows サービス アプリケーションと、RMI を使用してサービスと通信するクライアントがあります。複数のクライアントで並行性テストを行う必要がありますが、コードにいくつかの静的変数があるため、すべてのクライアントを異なる jvm インスタンスで実行する必要があります。それをしてもいいですか ?何か案は?

4

2 に答える 2

5

はい、JDI を使用してこれを行うことができます - VirtualMachineManager ( を呼び出して取得できますBootstrap.virtualMachineManager();) は、(少なくとも 1 つの)起動コネクタを提供します。次に、作成する VM のVM ミラーlaunch();を提供するこのコネクタを呼び出すことができます。このミラーを使用すると、この VM でメソッドをリモートで実行できます。

この方法を使用すると、選択した数のリモート VM をセットアップできますが、明らかに、この方法を実行するとパフォーマンスが比較的大きく低下し、かなりの労力がかかります。努力が天文学的でない限り、私は個人的にコードを修正してスレッドの安全性を保証することをお勧めします (を使用ThreadLocal)。そうすれば、JDI (または同様のセットアップ) について心配する必要がなくなります。

于 2013-05-23T14:00:07.920 に答える
2

シェル スクリプトを使用して、ループ内の独自のパラメーター セットを持つ新しいクライアントを生成できます。

しかし、一般的に。いくつかの静的変数が共有されているという理由だけで、複数の VM でクライアント コードを実行することは、明らかに良い解決策ではありません。根本的な問題はクライアント コードにあります。すでに示唆されているようにThreadLocal、 、ThreadPools、またはいくつかの同期ロジックを使用して、さまざまなクライアント スレッド間で一連の変数を分離できます。

于 2013-05-23T21:53:03.143 に答える