このページでは、JavaScript エージェントの補助インジェクションによってブラウザアプリケーションをインストゥルメント化する方法について説明します。補助インジェクションは、サーバ側アプリケーションがブラウザアプリケーションに JavaScript エージェントを挿入するときに使用されます。ブラウザアプリケーションに JavaScript エージェントを挿入するようにビジネスアプリケーションを設定できます。

補助インジェクションのタイプ

ルールまたは属性を使用して、補助インジェクションを実行できます。次の表に、補助インジェクションの各タイプに対応しているプラットフォームと補助インジェクションを実行するためのプロセスの概要を示します。

補助インジェクションのタイプ

対応プラットフォーム

説明

インジェクションルールJava

このタイプの補助インジェクションは、ルールを使用して、インターセプトする必要がある Java クラスを構成します。

JavaScript エージェントを挿入するビジネスアプリケーションのコントローラ UI の [User Experience App Integration Panel] でインジェクションルールを作成します。

属性インジェクションJava、ASP.NET

このタイプの補助インジェクションは、アプリケーション エージェントに情報を挿入する場所を示すテンプレートを参照します。

JavaScript エージェントを挿入するビジネスアプリケーションのコントローラ UI の [User Experience App Integration Panel] で属性インジェクションを有効にします。

また、JavaScript エージェントを挿入する場所を決定するページテンプレートにコードスニペットを追加します。

インジェクションルール(Java のみ)

サーバ側アプリケーションでインジェクションルールを使用して JavaScript エージェントの補助インジェクションを使用するには、以下を構成するルールを定義します。

  • インターセプトする必要がある Java クラスとメソッド
  • エージェントを応答オブジェクトに追加するために使用する Java ライターオブジェクトとメソッド

ルールを使用する補助インジェクションは、Java フレームワークのみで使用できます。  

[User Experience App Integration] パネルへのアクセス

  1. [Applications] ページから、ブラウザアプリケーションに JavaScript エージェントを自動的に挿入するビジネスアプリケーションを開きます。
  2. 左のナビゲーションバーから [Configuration] を選択します。
  3. [User Experience App Integration] をクリックします。

JavaScript インジェクションルールの作成

  1. [JavaScript Agent Injection] タブで、[Inject the JavaScript Agent configured for this Browser App] ドロップダウンからブラウザアプリケーションを選択します。
  2. [Configure JavaScript Injection] タブで、[Create Injection Rules.] を展開します
  3. [+] アイコンをクリックし、[Create Manual Injection Rule] ダイアログを開きます。
  4. [Where to Inject JavaScript] タブで、次の手順を実行します。
    1. [Name] フィールドにルールの名前を入力します。 
    2. [Enable] を確認します。
    3. [Class and Method to intercept] セクションで、アプリケーションの出力ストリームに書き込むクラスとメソッドの一致条件を定義します。これは、サーバ側エージェントが挿入のためにインターセプトするクラスです。
    4. 書き込みメソッドがオーバーロードされている場合は、次の手順を実行します。
      1. [Is this Method Overloaded?] チェックボックスをオンにします。

      2.  Add Parameter.
      3. メソッドを定義するパラメータを追加します。
    1. [Pointer to the writer] セクションで、次の手順を実行します。
      1. パラメータの構成数、戻り値、呼び出されるオブジェクトのいずれかで選択されたメソッドを使用するライターオブジェクトへの参照を取得する方法を選択します。
      2. getter チェーンを指定します。
    2. [Injection options] セクションで、次を指定します。
      • サーバ側エージェントが JavaScript エージェントを挿入するために使用する必要がある出力ストリーム書き込みメソッド
      • インジェクションが発生するタイミング(メソッドが開始するとき、メソッドが終了するときなど)
      • スクリプトのどの部分を挿入するか(ヘッダーまたはフッター)
      • ヘッダーまたはフッターを書き込む前に出力に付加するオプションのプレフィックス。例:<DOCTYPE. . . >
  5. [Create Injection Rule] をクリックします。

属性インジェクション

サーバ側アプリケーションで属性インジェクションを使用して JavaScript エージェントの補助インジェクションを使用するには、以下を実行します。

  • 属性インジェクションの有効化
  • ページテンプレートへのコードスニペットのコピー

補助インジェクションをサポートしているのは Servlet コンテナのみです。

[User Experience App Integration] パネルへのアクセス

  1. [Applications] ページから、ブラウザアプリケーションに JavaScript エージェントを自動的に挿入するビジネスアプリケーションを開きます。
  2. 左のナビゲーションバーから [Configuration] を選択します。
  3.  User Experience App Integration.

[JavaScript Injection Configuration] パネルへのアクセス

  1. [User Experience App Integration] ページで、[JavaScript Agent Injection] タブをクリックします。
  2. [JavaScript Agent Injection] タブで、[Inject the JavaScript Agent configured for this Browser App] ドロップダウンからブラウザアプリケーションを選択します。

ページテンプレートへのコードスニペットのコピー

次の例は、ページテンプレートまたは他のページに直接コピーできるコードスニペットを示しています。これらのコードスニペットは、情報を挿入する場所をアプリケーション エージェントに示します。ヘッダー値は <head> セクションの一番上に挿入する必要があります。また、フッター値は、ページを作成するコードの最後に追加する必要があります。  

手動インジェクションを使用してエージェントのヘッダー部分をすでに挿入している場合は、これらのコードスニペットを使用して、フッターデータ部分のみを自動的に挿入できます。この場合は、次のセクションに示す JS_FOOTER 値のみを追加します。

JSF

<h:outputText rendered="#{AppDynamics_JS_HEADER != null}" value="#{request.getAttribute(&quot;AppDynamics_JS_HEADER&quot;)}" escape="false"/>
<h:outputText rendered="#{AppDynamics_JS_FOOTER != null}" value="#{request.getAttribute(&quot;AppDynamics_JS_FOOTER&quot;)}" escape="false"/>
CODE

JSP

<% if (request.getAttribute("AppDynamics_JS_HEADER") != null) { %> <%=request.getAttribute("AppDynamics_JS_HEADER")%> <% } %>
<% if (request.getAttribute("AppDynamics_JS_FOOTER") != null) { %> <%=request.getAttribute("AppDynamics_JS_FOOTER")%> <% } %>
CODE

servlet

if (request.getAttribute("AppDynamics_JS_HEADER") != null)
{
    out.write(request.getAttribute("AppDynamics_JS_HEADER".toString());
}
if (request.getAttribute("AppDynamics_JS_FOOTER") != null)
{
    out.write(request.getAttribute("AppDynamics_JS_FOOTER").toString());
}
CODE

Groovy

<g:if test="${AppDynamics_JS_HEADER}">
    ${AppDynamics_JS_HEADER}
</g:if>

<g:if test="${AppDynamics_JS_FOOTER}">
    ${AppDynamics_JS_FOOTER}
</g:if>
CODE

Velocity テンプレート

#if ($AppDynamics_JS_HEADER)
    $AppDynamics_JS_HEADER
#end
#if ($AppDynamics_JS_FOOTER)
    $AppDynamics_JS_FOOTER
#end
CODE

ASP.NET C#

<% if (Context.Items.Contains("AppDynamics_JS_HEADER"))
    Response.Write(Context.Items["AppDynamics_JS_HEADER"]); %>
<% if (Context.Items.Contains("AppDynamics_JS_FOOTER"))
    Response.Write(Context.Items["AppDynamics_JS_FOOTER"]); %>
CODE

MVC Razor

@if(HttpContext.Current.Items.Contains("AppDynamics_JS_HEADER")) 
{ @Html.Raw((string)HttpContext.Current.Items["AppDynamics_JS_HEADER"]) }
@if(HttpContext.Current.Items.Contains("AppDynamics_JS_FOOTER") )
{ @Html.Raw(HttpContext.Current.Items["AppDynamics_JS_FOOTER"].ToString()) }
CODE