RMI を使った作業
VuGen では RMI-IIOP プロトコルを完全サポートします。
本項では,RMI 特有の Java Vuser スクリプトの要素について説明します。
記録する内容によりますが,VuGen の RMI レコーダを使用して実際のユーザを適切にエミュレートするスクリプトを作成できます。
- ピュア RMI クライアント: リモート呼び出しのためのネイティブの JRMP プロトコルを使用するクライアントの記録
- RMI-IIOP クライアント: JRMP の代わりに IIOP プロトコルを使用してコンパイルされたクライアント・アプリケーションの記録
RMI は構造要素はありません。代わりに,Serializable Java オブジェクトを使用します。RMI は,専用のシャットダウン・セクションがありません。
次のコード例は,ネーミング・レジストリを検索した後,特定の Java オブジェクトを検索し,取得します。次に,そのオブジェクトに対して,set_sum,increment,get_sum などの関数を実行します。RMI 関数にアクセスするには,RMI クラスをインポートする必要があります。
例:
Import java.rmi.*; Import java.rmi.registry.*;
public int action() throws Throwable { _registry = LocateRegistry.getRegistry("localhost",1099); counter = (Counter)_registry.lookup("Counter1"); counter.set_sum(0); counter.increment(); counter.increment(); counter.get_sum(); return lr.PASS; }
RMI Java を記録する際,スクリプトにはすべての関連オブジェクトのシリアル化を解除する lr.deserialize への複数の呼び出しが含まれていることがあります。lr.deserialize 呼び出しは,次の呼び出しに渡されるオブジェクトが,それ以前の呼び出しの戻り値と相関できない場合に生成されます。この場合,VuGen はオブジェクトの状態を記録し,再生時に lr.deserialize 関数を呼び出してオブジェクトの値を提示します。
シリアライズの解除は,VuGen によってオブジェクトがパラメータとして呼び出しに渡される前に行われます。詳細については,「Java スクリプト相関 - シリアル化」を参照してください。
接続タイムアウト
接続タイムアウトを設定するには,プロパティを設定する Java コードを追加します。
以下は RMI タイムアウトを 5 秒に設定する例です。
例:
import lrapi.lr; public class Actions { public int init() throws Throwable { return 0; } public int action() throws Throwable { java.util.Properties properties=System.getProperties(); properties.put("sun.rmi.transport.tcp.responseTimeout", 5000); properties.put("sun.rmi.transport.tcp.readTimeout", 5000); properties.put("sun.rmi.transport.connectionTimeout", 5000); properties.put("sun.rmi.transport.handshakeTimeout", 5000); properties.put("user.script",""); System.setProperties(properties); java.lang.String var_0="rmi://example.com/RmiServer"; RmiServerIntf var_1=(RmiServerIntf)java.rmi.Naming.lookup(var_0); java.lang.String var_2=var_1.getMessage(); return 0; } public int end() throws Throwable { return 0; } }
このタイムアウトをすべての TCP 接続に対して設定するには,次のようにします。
properties.put("sun.net.client.defaultReadTimeout", 5000); properties.put("sun.net.client.defaultConnectTimeout", 5000);