前のトピック: エージェント トランザクション API次のトピック: エージェント API の例


エージェント VSE API

VSE により、十分に定義された境界に沿って、プロセス、サービス、またはそれらの一部をスタブ アウトできます。 これらのプロセスおよびサービスの内部要素は、カスタム ユーザ定義ルールに従って DevTest によって実行されるレイヤと置換できます。 DevTest が実行するこれらのレイヤは、モデルと呼ばれます。 通常、これらのルールのデフォルトの開始点は、ライブ システムのインタラクションの記録から取得されます。

DevTest は、すでに、HTTP プロトコル(Web アプリケーションおよび Web サービスの仮想化を実現可能)、JMS、および JDBC に対して VSE をある程度までサポートしています。 エージェントは、サーバ プロセスの内部から直接仮想化を可能にする API を提供するため、仮想化はプロトコルに依存しません。 仮想化は、HTTP、JMS、JDBC だけでなく、RMI、EJB、または任意のカスタム Java オブジェクトに対しても有効にできます。

DevTest(またはエージェントのその他のクライアント)は、AgentClient.getInstance().getVSEClient() によって取得される com.itko.lisa.remote.client.VSEClient で定義された以下の API を使用して、この仮想化を実現できます。

注: エージェントの JavaDocs で、このクラスに関する詳細情報を表示できます。 JavaDocs は、LISA_HOME\doc ディレクトリにあります。

/**
  * 実装が true の場合、名前が指定した正規表現に一致するすべてのクラス/インターフェースの名前のリスト、または、
  * 名前が指定した正規表現に一致するクラス/インターフェースを拡張/実装するすべてのクラス/インターフェースの名前のリスト
  * を返します。 アノテーションの検索は、以下の構文でサポートされています。
  * class regex@annotation regex (e.g. ".*.Remote@.*.Stateless").
  * @param agentInfo
  * @param regex
  * @param impl
  * @return
  */
 public String[] getMatchingClasses(IAgentInfo info, String regex, boolean impl) throws JMSInvocationException
 
 /**
  * すべての仮想化されたメソッドに対してレコーディング モードで onFrameRecord が呼び出され、
  * すべての仮想化されたメソッドに対して再生モードで onFramePlayback メソッドが呼び出される
  * 指定したエージェントに VSE コールバックを登録します。
  * @param info
  * @param callback
  */
 public void registerVSECallback(IAgentInfo info, IVSECallback callback);
 
 /**
  * 指定したエージェントへの VSE コールバックの登録を解除します。
  * @param info
  * @param callback
  */
 public void unregisterVSECallback(IAgentInfo info, IVSECallback callback);
 
 /**
  * 指定したエージェントで仮想化記録コールバックのコールを起動します。
  * @param agentInfo
  * @throws RemoteException
  */
 public void startVSERecording(IAgentInfo agentInfo) throws JMSInvocationException
 
 /**
  * 指定したエージェントで仮想化再生コールバックのコールを起動します。
  * @param agentInfo
  * @throws RemoteException
  */
 public void startVSEPlayback(IAgentInfo agentInfo) throws JMSInvocationException
 
 /**
  * 指定したエージェントで仮想化を停止します。
  * @param agentInfo
  * @throws RemoteException
  */
 public void stopVSE(IAgentInfo agentInfo) throws JMSInvocationException
 
 /**
  * 指定したエージェントで指定したクラス/インターフェースおよびそのすべての子孫を仮想化します。
  * @param agentInfo
  * @param className
  * @return
  */
 public void virtualize(IAgentInfo agentInfo, String className) throws JMSInvocationException

コールバック API のインターフェースは、com.itko.lisa.remote.vse.IVSECallback によって定義されており、以下のメソッドが定義されています。

/**
  * これは、メソッドの仮想化がコールされたときに、VSE レコーディングがオンになっているエージェント
  * によって呼び出されるメソッドです。 VSE フレームには、既存の記録されたフレームと照合し、その結果(および参照引数によって)
  * すべての情報が格納されます。
  * @param frame
  * @throws RemoteException
  */
 void onFrameRecord(VSEFrame frame) throws RemoteException;
 
 /**
  * これは、メソッドの仮想化がコールされたときに、VSE 再生がオンになっているエージェント
  * によって呼び出されるメソッドです。 VSE フレームには、既存の記録されたフレームと照合し、その結果(および参照引数によって)
  * を適切に設定できるようにするために必要なすべての情報が
  * 格納されます。
  * @param frame
  * @return
  * @throws RemoteException
  */
 VSEFrame onFramePlayback(VSEFrame frame) throws RemoteException;

最後に、com.itko.lisa.remote.vse.VSEFrame オブジェクトは、以下のプロパティのゲッターとセッターを備えた POJO です。

/** このフレームの一意の識別子を取得/設定します */
 public String getFrameId();
 public void setFrameId(String frameId);
 
 /** このフレームの送信元のエージェント ID */
 public long getAgentGuid();
 public void setAgentGuid(long agentId);
 
 /** このフレーム メソッドが呼び出されたスレッド名 */
 public String getThreadName();
 public void setThreadName(String threadName);
 
 /** このフレーム メソッドが呼び出されたクラスの名前 */
 public String getClassName();
 public void setClassName(String className);
 
 /** VM のライフスパンに対してオブジェクトを追跡する一意の識別子 */
 public String getSourceId();
 public void setSourceId(String srcId);
 
 /** このフレームを格納している最も内側のセッションにスコープされたプロトコルのセッション ID */
 public String getSessionId();
 public void setSessionId(String sessionId);
 
 /** 呼び出されたメソッドの名前 */
 public String getMethod();
 public void setMethod(String method);
 
 /** 呼び出されたメソッドの XStream が実行された引数の配列 */
 public String[] getArgumentsXML();
 public void setArgumentsXML(String[] argumentsXML);
 
 /** 呼び出されたメソッドの XStream が実行された結果 */
 public String getResultXML();
 public void setResultXML(String resultXML);
 
 /** メソッドが呼び出された(サーバ)時間 */
 public long getTime();
 public void setTime(long time);
 
 /** メソッドの実行に要した時間 */
 public long getClockDuration();
 public void setClockDuration(long duration);
 
 /** 再生モードで目的の結果を計算するために、getCode と ResultXML のどちらを使用するのかを指定します */
 public boolean isUseCode();
 public void setUseCode(boolean useCode);
 
 /**
  * isUseCode が true の場合にサーバで実行するコード。 オブジェクト($0)およびメソッドの引数($1、$2 など)
  * にアクセスできる任意のコードを指定できます
  */
 public String getCode();
 public void setCode(String code);