Flex/AMF3 プロジェクトのセットアップとテスト

前提条件

Adobe または BlazeDS の実装に基づいた Flex/AMF3 アプリケーションのテストには、Java Development Kit 1.5 以降が必要です。

GraniteDS の実装に基づいた Flex/AMF3 アプリケーションのテストには、Java Development Kit 1.6 以降が必要です。

HTTP ヘッダー Content-Type"application/x-amf" に設定されている HTTP 要求と応答では変換が有効になっています。別の HTTP コンテンツ タイプ ヘッダーを使用してデータを変換する必要がある場合は、以下のステップを参照してください。カスタム コンテンツの変換 - タイプ を参照してください。

Adobe Flex/AMF3 プロジェクトのセットアップ

Adobe または BlazeDS の実装に基づいた Flex/AMF3 アプリケーションのテストを行う場合は、プロジェクトの概要設定 ダイアログで Flex/AMF3 (Adobe) アプリケーション タイプを選択します。

Flex/AMF3 (Adobe) アプリケーションの種類は AMF0 と AMF3 の両方をサポートしています。アプリケーションの種類で Flex/AMF3 (Adobe) を選択すると、プロファイル > Web (プロトコル レベル) 設定 > 変換 タブでいくつかのプロファイル設定が自動的に構成されます。
  • タイプ ドロップ リストで Flex/AMF3 (Adobe) 変換 DLL が選択されます。
  • HTTP リクエストを変換する が有効化されます。
  • HTTP レスポンスを変換する が有効化されます。
  • Java 仮想マシンの使用を有効にする が有効化されます。外部化可能な特性を Flex/AMF3 で正確に変換するには JVM が動作してる必要があるため、この設定は必要です。また、この設定をすることで、変換後の AMF3 トラフィックを、AMF3 の構文タグをあまり含まない読みやすい XML 表現で表示することが可能になります。

GraniteDS Flex/AMF3 プロジェクトのセットアップ

GraniteDS の実装に基づいた Flex/AMF3 アプリケーションのテストを行う場合は、プロジェクトの概要設定 ダイアログで Flex/AMF3 (GraniteDS) アプリケーション タイプを選択します。

Flex/AMF3 (GraniteDS) アプリケーションの種類は AMF0 と AMF3 の両方をサポートしています。アプリケーションの種類で Flex/AMF3 (GraniteDS) を選択すると、プロファイル > Web (プロトコル レベル) 設定 > 変換 タブでいくつかのプロファイル設定が自動的に構成されます。
  • タイプ ドロップ リストで Flex/AMF3 (GraniteDS) 変換 DLL が選択されます。
  • HTTP リクエストを変換する が有効化されます。
  • HTTP レスポンスを変換する が有効化されます。
  • Java 仮想マシンの使用を有効にする が有効化されます。外部化可能な特性を Flex/AMF3 で正確に変換するには JVM が動作してる必要があるため、この設定は必要です。また、この設定をすることで、変換後の AMF3 トラフィックを、AMF3 の構文タグをあまり含まない読みやすい XML 表現で表示することが可能になります。

カスタマイズされた GraniteDS 構成を設定する

テスト対象のアプリケーションがカスタマイズされた GraniteDS 構成を使用する場合は、例外が Recorder ログまたは仮想ユーザー ログ ファイルにある TrueLog Explorer に記録される場合があります。これらの例外は次のようになります。
WebPagePost(WebEngine: 82 - コンテンツ変換エラー, RESPONSE: AMF3:Java ベースの XML を生成できません 
(fallback を使用)、理由: org.granite.messaging.amf.io.AMF3SerializationException 
...
Caused by: java.lang.RuntimeException: The ActionScript3 class bound to org.granite.example.addressbook.entity.Person 
(ie: [RemoteClass(alias="org.granite.example.addressbook.entity.Person")]) implements flash.utils.IExternalizable but 
this Java class neither implements java.io.Externalizable nor is in the scope of a configured externalizer 
(please fix your granite-config.xml)
...
Silk Performer がこのカスタム構成を認識し、例外を排除するようにするには、次の手順を実行します。
  1. テスト対象アプリケーションのカスタマイズされた構成を見つけます。これらは通常、アプリケーションのクラスパスにある、granite-config.xml または granite-custom-config.xml で見つかります。
  2. プロジェクト メニュー ツリーにある データ ファイル フォルダで、granite-custom-config.xml ファイルを見つけます。
  3. granite-custom-config.xml をダブルクリックし、エディタで開きます。
  4. ステップ 1 で検出したカスタマイズされた構成を granite-custom-config.xml データ ファイルにコピーおよび貼り付けし、変更を保存します。

スクリプトの作成

JVM を使用するには、正しい XML 表現にシリアル化するために必要なクラスを含む Flex/AMF3 アプリケーション固有のカスタム JAR ファイルを構成する必要があります。そのため、Flex/AMF3 スクリプトを作成するときには、スクリプトの作成 ダイアログに JAR ファイルの追加 ボタンが表示されます。このボタンをクリックして、テスト対象のアプリケーションに固有のカスタム JAR ファイルを、必要なだけ参照して 追加 します。追加した JAR ファイルは、プロジェクト ツリーの データ ファイル ノードに表示されます。

これらの必要な JAR ファイル (または個々の .class ファイル) は、テスト対象のサーバーにあります。これらのファイルは、手動で準備し、サーバーから Silk Performer コントローラ マシンへコピーしておく必要があります。ただし、個々の .class ファイルをアーカイブに配置するだけでよい場合もあります。

注: JAR ファイルは、Project フォルダに置く必要があります。

スクリプトの作成 ダイアログで 設定 をクリックすると、現在のユーザー プロファイルの Java 設定 タブが直接表示されます。このタブで、現在選択されているユーザー プロファイルの Java 設定を変更します。

Apache Flex 2、3、4 および BlazeDS 3.2.0 の基本 JAR ファイルは、C:\Program Files(x86)\Silk\Silk Performer <バージョン>\ClassFiles\Adobe-Flex ディレクトリにインストールされます。この JAR ファイルは、クラスパスに自動的に追加されます。新しいバージョンの flex-messaging-common.jar および flex-messaging-core.jar をディレクトリにコピーすると、これらのファイルを手動で更新できます。

GraniteDS 2.3.2 の基本 JAR ファイルは、C:\Program Files(x86)\Silk\Silk Performer <バージョン>\ClassFiles\GraniteDS ディレクトリにインストールされます。この JAR ファイルは、クラスパスに自動的に追加されます。このディレクトリ内の JAR ファイルを置き換えると、これらのファイルを手動で更新できます。

注: Java 設定 タブで システム クラスパスを使用する を有効にしないでください。システム クラスパスで設定された JAR ファイルによって、手動で構成した JAR ファイルが無効にされることがあります。

キャプチャ ファイルからのスクリプトの生成

ユーザーの操作を記録する際に、Silk Performer Recorder は、記録したセッションのトラフィック全体を含む Silk Performer キャプチャ ファイルというファイルを作成します。保存後に、キャプチャ ファイルは Workbench で開かれ、続いて分析および処理を行うことができます。キャプチャしたトラフィックからスクリプトを生成する前に、記録ルールや他の設定を変更して、スクリプト生成処理に適用させることができます。

エラーが発生した場合、問題の解決 領域にあるボタンをクリックして問題を解決します。その後、スクリプトの生成 をクリックして、キャプチャ ファイルからスクリプトを生成します。

64 ビット OS では、32 ビット版と 64 ビット版の両方の Java をインストールする必要があります。32 ビット版はスクリプトの再生に、64 ビット版はスクリプトの生成に使用します。64 ビット版をインストールできない場合は、つぎのレジストリ キーを 1 に設定して、スクリプトの生成に 32 ビット プロセスを使うことを Silk Performer に強制することができます:HKEY_LOCAL_MACHINE\SOFTWARE\Silk\SilkPerformer\<version>\Force32BitCaptureAnalyzer
重要: 32 ビットのスクリプト生成プログラムでは、キャプチャ ファイルのサイズが大きい場合に問題が発生する可能性があります。

スクリプトの再生

Java 構成が正しくなければ (たとえば JAR ファイルが見つからないなど)、XML レスポンス (TrueLog Explorer でのみ表示可能) は読みやすい形式で生成されません。また、[仮想ユーザー] 出力ペインに警告またはエラーが書き込まれます。通常、エラーや警告では、その原因がリクエスト (クライアントからサーバーへ) にあるのかレスポンス (サーバーからクライアントへ) にあるのかが示されます。

AMF3 スクリプトのカスタマイズ

AMF3 スクリプト内部の XML オブジェクトの全体構造を変更しないでください。値の解析や検証関数の挿入は構いませんが、AMF3 XML 要素の削除や移動を行うと呼び出しがうまくいかなくなります。また、配列内の要素の順序も変更しないでください。

コード例

コマンド メッセージの例:

<AmfXml version="3">                                                            
  <Msg length="203" operation="null" responseURI="/1">                          
    <StrictArray nrElems="1">                                                   
      <Amf3>                                                                    
        <JavaObject>                                                            
          <flex.messaging.messages.CommandMessage>                              
            <destination></destination>                                         
            <messageId>3EE7E87A-96E6-3272-30F7-FFEF6B9EFE9E</messageId>         
            <timestamp>0</timestamp>                                            
            <timeToLive>0</timeToLive>                                          
            <headers>                                                           
              <entry>                                                           
                <string>DSId</string>                                           
                <string>nil</string>                                            
              </entry>                                                          
            </headers>                                                          
            <body class="flex.messaging.io.amf.ASObject" serialization="custom">
              <unserializable-parents></unserializable-parents>                 
              <map>                                                             
                <default>                                                       
                  <loadFactor>0.75</loadFactor>                                 
                  <threshold>12</threshold>                                     
                </default>                                                      
                <int>16</int>                                                   
                <int>0</int>                                                    
              </map>                                                            
              <flex.messaging.io.amf.ASObject>                                  
                <default>                                                       
                  <inHashCode>false</inHashCode>                                
                  <inToString>false</inToString>                                
                </default>                                                      
              </flex.messaging.io.amf.ASObject>                                 
            </body>                                                             
            <correlationId></correlationId>                                     
            <operation>5</operation>                                            
          </flex.messaging.messages.CommandMessage>                             
        </JavaObject>                                                           
      </Amf3>                                                                   
    </StrictArray>                                                              
  </Msg>                                                                        
</AmfXml>

リモーティング メッセージの例:

<?xml version='1.0' encoding='UTF-8'?>                                              
<AmfXml version="3">                                                                
  <Msg length="394" operation="null" responseURI="/4">                              
    <StrictArray nrElems="1">                                                       
      <Amf3>                                                                        
        <JavaObject>                                                                
          <flex.messaging.messages.RemotingMessage>                                 
            <clientId class="string">208F18FC-6F0D-9964-3746-76438D73A6A3</clientId>
            <destination>myextservice</destination>                                 
            <messageId>A98651D4-690D-E530-B744-FFEF866937C7</messageId>             
            <timestamp>0</timestamp>                                                
            <timeToLive>0</timeToLive>                                              
            <headers>                                                               
              <entry>                                                               
                <string>DSId</string>                                               
                <string>208F0A62-A409-8994-08AF-223CD381602C</string>               
              </entry>                                                              
              <entry>                                                               
                <string>DSEndpoint</string>                                         
                <string>my-amf</string>                                             
              </entry>                                                              
            </headers>                                                              
            <operation>setMyExtClass</operation>                        
            <parameters>                                                            
              <com.borland.silkperformer.flex.samples.MyExt>                        
                <string>string1</string>                                               
                <string>string2</string>                                                
                <string>string3</string>                                                  
                <boolean>true</boolean>                                             
                <date>2009-03-13 14:05:01.545 CET</date>                            
              </com.borland.silkperformer.flex.samples.MyExt>                       
            </parameters>                                                           
          </flex.messaging.messages.RemotingMessage>                                
        </JavaObject>                                                               
      </Amf3>                                                                       
    </StrictArray>                                                                  
  </Msg>                                                                            
</AmfXml> 

確認応答メッセージの例:

<?xml version='1.0' encoding='UTF-8'?>                                            
<AmfXml version="3">                                                              
  <Msg operation="/5/onResult" responseURI="">                                    
    <Amf3>                                                                        
      <JavaObject>                                                                
        <flex.messaging.messages.AcknowledgeMessage>                              
          <clientId class="string">208F18FC-6F0D-9964-3746-76438D73A6A3</clientId>
          <messageId>20903C27-020C-F5E6-68E7-C8175449798D</messageId>             
          <timestamp>1236954453026</timestamp>                                    
          <timeToLive>0</timeToLive>                                              
          <body class="com.borland.silkperformer.flex.samples.MyExt">             
            <string>some string</string>                                             
            <com.borland.silkperformer.flex.samples.MyExt>                        
              <string>string1</string>                                               
              <string>string2</string>                                                
              <string>string3</string>                                                  
              <boolean>true</boolean>                                             
              <date>2009-03-13 14:04:58.14 CET</date>                             
            </com.borland.silkperformer.flex.samples.MyExt>                       
            <string>GET</string>                                                  
            <string>string</string>                                                    
            <boolean>true</boolean>                                               
            <date>2009-03-13 14:05:01.545 CET</date>                              
          </body>                                                                 
          <correlationId>C4BD7297-67CB-84AB-0C1A-FFEF8DEB3A97</correlationId>     
        </flex.messaging.messages.AcknowledgeMessage>                             
      </JavaObject>                                                               
    </Amf3>                                                                       
  </Msg>                                                                          
</AmfXml>