前のトピック: エージェント ディスカバリ API次のトピック: エージェント VSE API


エージェント トランザクション API

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

トランザクションは、クライアント要求の結果として 1 つ以上のサーバによって実行されるコード パスです。 トランザクションは、要求を開始したクライアントをルートとするツリー構造によって表されます。 ツリーのノードは、com.itko.lisa.remote.transactions.TransactionFrame オブジェクトです。 これらのオブジェクトは、サーバ処理の一部として呼び出されたクラス、メソッド、および引数に関する情報をカプセル化します。 また、フレームには、期間、実行時間、およびそれが発生したスレッドなどの付随情報が含まれます。

トランザクションは、メソッド コール スタックと見なすことができます。 違いは、トランザクションがスレッド、プロセス、またはコンピュータの境界を越えるという点です。 また、スタックにはスレッドのコード実行に関係するメソッドがすべて含まれるのに対し、トランザクションはいくつかのレベルをスキップし、選択されたメソッドのフレームのみを含みます。 このようなメソッドは、インターセプトされたメソッドと呼ばれます。

TransactionFrame オブジェクトを取得および操作する主な方法は、AgentClient.getInstance().getTransactionsClient() コールで取得できる com.itko.lisa.remote.client.TransactionsClient によって提供される以下の API のいくつかのオーバーロードを使用する方法です。

/**
  * トランザクションの記録を開始します
  * @param info: 記録を開始するエージェント
  */
 public void startXRecording(IAgentInfo info) throws JMSInvocationException;
 
 /**
  * トランザクションの記録を停止します
  * @param info: 記録を停止するエージェント
  */
 public void stopXRecording(IAgentInfo info) throws JMSInvocationException;
 
 /**
  * クライアントとサーバのトランザクションを調整するために使用するクライアントのソケット使用率の追跡を開始します。
  * これは、addClientTransaction で追加するコールよりも前に呼び出す必要があります。
  * @param global: すべてのソケットまたはこのスレッドにのみインストールします
  */
 public void installSocketTracker(boolean global);
 
 /**
  * クライアントとサーバのトランザクションを調整するために使用するクライアントのソケット使用率の追跡を停止します。
  * これは、addClientTransaction で追加するコールの後に呼び出す必要があります。
  * @param global: すべてのソケットまたはこのスレッドでのみアンインストールします
  */
 public void uninstallSocketTracker(boolean global);
 
 /**
  * クライアントは、このメソッドを呼び出して、指定したパラメータを使用して作成された新しいクライアント トランザクションをルートとしたトランザクション ツリー
  * を作成できます。
  * 注: ここで追加するクライアント側トランザクションを開始する前に、installSocketTracker をコールする必要があります
  * また、ネットワーク コールで完了した後に、uninstallSocketTracker をコールすることをお勧めします。
  * @param stamp: ルート トランザクションを識別するために後で使用できる一意の文字列
  * (たとえば、getTransactions のコール)
  * @param stepInfo: トランザクションの内容をわかりやすく説明する文字列(null にすることもできます)
  * @param args: クライアントがトランザクションに渡すパラメータ(空にすることもできます)
  * @param result: トランザクションの結果(null にすることもできます)
  * @param duration: クライアント側から見たトランザクションの継続時間
  */
 public void addClientTransaction(String  stamp, String stepInfo, Object[] args, Object result, long duration);
 
 /** このクライアントから発生したすべてのトランザクションと関連データを削除します。 */
 public void clearTransactions();
 
 /**
  * 引数として渡したフィルタに一致するすべてのエージェントから受信した TransactionFrames のフラットなリストを取得します
  * @param offset: オフセット
  * @param limit: 結果の最大数
  * @param category: トランザクション カテゴリでフィルタします(TranactionFrame.CATEGORY_XXX を参照。フィルタなしの場合は 0)
  * @param clazz: クラス名でフィルタします(フィルタなしの場合は null または "")
  * @param method: メソッド名でフィルタします(フィルタなしの場合は null または "")
  * @param minTime: minTime よりも長いフレーム期間でフィルタします
  * @return: 指定した条件を満たす TransactionFrames を新しいほうから並べたリスト
  */
 public List getTransactions(int offset, int limit, int category, String clazz, String method, int minTime);
 
 /**
  * 指定したトランザクションをルートとし、指定した条件を満たすトランザクション ツリーのリストを取得します
  * @param offset: オフセット
  * @param limit: 結果の最大数
  * @param stamps: ルート クライアントのトランザクション スタンプの配列。これが空の場合、すべてが返されます
  * @param minTime: この期間を下回るトランザクションは、結果から除かれます
  * @return ret: 条件に一致するトランザクション ツリーを新しいほうから並べたリスト
  */
 public List getTransactionsTree(int offset, int limit, String[] stamps, int minTime)

トランザクションは複数のエージェントにまたがることができるため、これらの API のパラメータでは Agent または AgentInfo を指定しません。

これらの API は、com.itko.lisa.remote.transactions.TransactionFrame のリスト(ツリー)を返すため、カプセル化されているデータを確認できます。

/** このフレームの一意の識別子 */
 public String getFrameId();
 public void setFrameId(String frameId);
 
 /** このフレームの親フレームのフレーム ID
 public String getParentId();
 public void setParentId(String parentId);
 
 /** 同じトランザクションに属するすべてのフレームによって共有される識別子(グローバル ルート フレーム ID と同じ) */
 public String getTransactionId();
 public void setTransactionId(String transactionId);
 
 /** 親 TransactionFrame オブジェクト */
 public TransactionFrame getParent();
 public void setParent(TransactionFrame parent);
 
 /** 子 TransactionFrame オブジェクトのリスト */
 public List getChildren();
 public void setChildren(List children);
 
 /** このフレームが記録されているエージェントの一意の識別子 */
 public long getAgentGuid();
 public void setAgentGuid(long agentGuid);
 
 /** フレームを並べるのに役立つ増加するカウンタ(時間の正確さは十分でない可能性があります) */
 public long getOrdinal();
 public void setOrdinal(long ordinal);
 
 /** ネットワークの受信または送信フレームは、これを設定して、通信元の IP を通知します */
 public String getLocalIP();
 public void setLocalIP(String ip);
 
 /** ネットワークの受信または送信フレームは、これを設定して、通信元のポートを通知します */
 public int getLocalPort();
 public void setLocalPort(int port);
 
 /** ネットワークの受信または送信フレームは、これを設定して、通信先の IP を通知します */
 public String getRemoteIP();
 public void setRemoteIP(String ip);
 
 /** ネットワークの受信または送信フレームは、これを設定して、通信先のポートを通知します */
 public int getRemotePort();
 public void setRemotePort(int port);
 
 /** このフレームが記録されているスレッドの名前 */
 public String getThreadName();
 public void setThreadName(String threadName);
 
 /** このフレームが記録されているクラスまたはインターフェースの名前(インターセプトの指定のとおり) */
 public String getClassName();
 public void setClassName(String className);
 
 /** このフレームが記録されている実際のオブジェクトのクラスの名前 */
 public String getActualClassName();
 
 /** このフレームが記録されているメソッドの名前 */
 public String getMethod();
 public void setMethod(String method);
 
 /** このフレームが記録されているメソッドのシグネチャ */
 public String getSignature();
 public void setSignature(String signature);
 
 /** このフレームが記録されているオブジェクトを整形して表示 */
 public String getSource();
 public void setSource(Object source);
 
 /** このフレームが記録されているメソッドの引数を整形して表示 */
 public String[] getArguments();
 public void setArguments(Object[] arguments);
 
 /** このフレームが記録されているメソッドの結果を整形して表示 */
 public String getResult();
 public void setResult(Object result);
 
 /** このフレームがその親の内部で重複した回数 */
 public long getHits();
 public void setHits(long hits);
 
 /** フレームが記録されたサーバ時間 */
 public long getTime();
 public void setTime(long time);
 
 /** このフレームの実行に要した実時間 */
 public long getClockDuration();
 public void setClockDuration(long clockDuration);
 
 /** このフレームの実行に要した CPU 時間 */
 public long getCpuDuration();
 public void setCpuDuration(long cpuDuration);
 
 /** このフレームに関連付けられている状態のカスタム表示 */
 public String getState();
 public void setState(Object state);
 
 /** LEKEncoder クラスによってエンコード/デコードされた、整形された LEK 情報 */
 public String getLekInfo();
 public void setLekInfo(String lekInfo);
 
 /** このフレームが属する事前に計算されたカテゴリ。TransactionFrame.CATEGORY_XXX を参照 */
 public int getCategory();
 public void setCategory(int category);
 
 /** ビット単位 OR 演算が実行された、情報のさまざまな内部要素の組み合わせ。TransactionFrame.FLAG_XXX を参照 */
 public long getFlags();
 public void setFlags(long flags);