プライマリ・コンテンツに移動
Oracle Enterprise Pack for Eclipse Oracle Mobile Application Framework (OEPE Edition)でのモバイル・アプリケーションの開発
リリース2.3.0
E77213-01
  目次へ移動
目次

前
 
次
 

30 MAFアプリケーションのテストおよびデバッグ

この章では、MAFアプリケーションのテストおよびデバッグについて説明します。

この章には次の項が含まれます:

30.1 MAFアプリケーションのテストおよびデバッグの概要

MAFアプリケーションをテストまたはデバッグするには、MAFがサポートしているいずれかのプラットフォーム(AndroidまたはiOS)上のデバイスにデバッグ・モードでデプロイします。MAFおよび各プラットフォームでは、OEPE開発環境を、デバイスまたは仮想デバイスで実行されているMAFアプリケーションに接続できるツールを提供しています。たとえば、Androidデバイス上でMAFアプリケーションをテストする場合は、デバッグ・モードのMAFアプリケーションを、OEPEからAndroidデバイスまたはAndroid Virtual Device (AVD)にデプロイします。iOSでも同様のツールを提供しています。


注意:

デバッグは、ユニバーサルWindowsプラットフォーム用に開発されたMAFアプリケーションには使用できません。

MAFアプリケーションをデバッグするためのおおまかな手順には、次のタスクが含まれます。

  1. MAFアプリケーションがデバッグ・モードでデプロイされるように、デバッグ構成を使用してテスト環境にMAFアプリケーションをデプロイします。

  2. MAFアプリケーションをテスト環境にデプロイします。

  3. 実行するデバッグ・タスクに適切なツールを使用します。たとえば、MAFアプリケーションのJavaコードをデバッグする場合は、OEPEによって提供されているツールを使用します。MAFアプリケーションのユーザー・インタフェース(HTML、CSSまたはJavaScript)をレンダリングするコードをデバッグする場合は、各プラットフォームでこのタスクのために提供されているツールを使用します。

MAFにはこの他にも、アプリケーションのテストを支援するための機能が用意されています。これらには、アプリケーションのパフォーマンスのモニター、Oracle Mobile Cloud Serviceへの分析情報および診断情報の送信(アプリケーションがこのサービスからリソースにアクセスする場合)などの機能があります。

30.2 MAFアプリケーションのテスト

MAFアプリケーションをテストするには、次の2つの方法があります。

  1. モバイル・デバイス上でのテスト: この方法では常に、最も正確な動作が提供されます。アプリケーションのパフォーマンスを測定する場合も、この方法をとる必要があります。ただし、テスト実行者がテスト対象のすべてのデバイスを入手できるとはかぎらないため、デバイスのテストは確実なものとは言えません。

  2. モバイル・デバイス・エミュレータまたはシミュレータ上でのテスト: この方法は通常、よりよいパフォーマンスとより高速なデプロイを提供し、便利です。ただし、デバイスのエミュレータまたはシミュレータは、対応する物理デバイスに近似したものであるとは言え、動作の相違やエミュレートできる機能の制限が存在する場合があります。

通常、両方の方法を組み合せて使用することで、最良の結果が得られます。

30.2.1 iOSデバイス上でアクセシビリティのテストを実行する方法

iOSデバイス用に開発されたMAFアプリケーションのアクセシビリティをテストするには、次の方法を組み合せて使用してください。

  • iOSデバイス・シミュレータ上でアクセシビリティ・インスペクタを使用してテストする。

    詳細は、iOS Developer Libraryにある『Accessibility Programming Guide for iOS』「Testing the Accessibility of Your iPhone Application」を参照してください。

  • iOSデバイス上でVoiceOverを使用してテストする。

    詳細は、iOS Developer Libraryにある『Accessibility Programming Guide for iOS』「Using VoiceOver to Test Your Application」を参照してください。

30.3 コードをデバッグするためのOEPEおよびMAFアプリケーションの構成

OEPEには、Javaプログラムをデバッグ・モードで実行し、標準のブレークポイントを使用してアプリケーションの実行をモニターおよび制御することを可能にするデバッグ・メカニズムが備わっています。

MAFアプリケーションはOEPE内部で実行できないため、デバッグの方法が異なります。OEPEデバッガを使用して、モバイル・デバイスまたはシミュレータ上のJava仮想マシン・インスタンスに接続し、デプロイ済のMAFアプリケーションのJavaの部分を制御します。

MAFは、デバッグ用にプロジェクト・プロパティを自動的に構成します(第30.3.1項「デバッグ構成に関する必知事項」を参照)。次は、OEPEを使用してMAFアプリケーションのJavaコードをデバッグするために実行する必要のある手順です。

アプリケーションをテストまたはデバッグするには:

  1. OEPEのメイン・メニューで、「実行」→「デバッグ構成」をクリックして、デバッグ構成を選択します。

  2. デバッグを有効にした状態でアプリケーションを実行する場合は、「デバッグ」をクリックします。

詳細は、次を参照してください:

30.3.1 デバッグ構成に関する必知事項

新しいMAFデバッグ構成を作成すると、OEPEによって、アプリケーションがデバッグ用に自動的に構成されます。これらのデバッグ構成では、構成のOEPEデバッグ・ボタンをクリックしてMAFアプリケーションをデバッグできます。アプリケーションはデプロイされると、自動的にデバッガで起動されます。

実行構成の作成および編集方法の詳細は、第30.3.1.1項「デバッグ構成の作成と構成」を参照してください。

30.3.1.1 デバッグ構成の作成と構成

新しい構成を作成するか、既存の構成を変更するには、次のように「デバッグ構成」ダイアログに入力します。

  1. OEPEのメイン・メニューで、「実行」→「デバッグ構成」をクリックして、「デバッグ構成」ダイアログを開きます。

  2. MAFアプリケーションを右クリックし、「新規」を選択して新しいデバッグ構成を作成します。

  3. 次のようにダイアログの「メイン」タブに入力します。

  4. 図30-1に示すように、「デバッグ」タブでJavaコードのデバッグを選択し、ポートを適切なポート番号に設定します。

    図30-1 デバッグ構成の作成

    この図は周囲のテキストで説明しています

注意:

タイムアウトを回避するには、モバイル・デバイスまたはシミュレータでアプリケーションを起動したらすぐにデバッガを起動します。

デプロイメントが成功し、デバイス上のアプリケーションがデバッグ・モードで起動した場合、リモート・デバッグが接続されるまでブロックされます。タイムアウトは通常数分です。


Androidの場合

  1. ポート転送が確立されていることを確認します。

iOSの場合

  1. 開発コンピュータとモバイル・デバイスがTCPを介して相互に見えていることを確認します(互いにpingを実行できます)。

  2. モバイル・デバイスのIPアドレスを持ったlocalhostを置き換えることで、リモートJavaアプリケーション構成の「ホスト」フィールドを変更します。

詳細は、第30.3.1項「デバッグ構成に関する必知事項」を参照してください

30.3.2 JavaコードおよびJavaScriptのデバッグを有効にする方法

アプリケーションのデプロイメント構成を使用して、MAFアプリケーションの実行モードをリリースまたはデバッグのいずれかに指定します。デバッグ・モードでのみ、JavaおよびJavaScriptコードを対話的にデバッグできます。デバッグ・モードでは、コンパイル時に特殊なデバッグ・ライブラリおよびシンボルを含めることが可能です。

図30-2は、デバッグ・モード・オプションの設定方法を示しています。

図30-2 デバッグ・モードの設定

この図は周囲のテキストで説明しています

詳細は、次を参照してください。

maf.propertiesファイルでは、JVMの起動パラメータおよびMAFのWebビューを指定して、JavaコードおよびJavaScriptのデバッグを有効にできます。maf.propertiesファイルは自動的に作成され、{assembly_project}/META-INFディレクトリ内(この場所は、アプリケーション・ファイル・システム内の<application_name>/META-INFの場所に対応しています)に配置されます(第30.6項「MAFアプリケーションでのロギングの使用および構成」を参照)。

maf.propertiesファイルで次のデバッグ・プロパティを使用できます。

  • java.debug.enabled: MAF用のJavaデバッグを有効または無効にします。有効な値は、truefalseです。


    注意:

    java.debug.enabledtrueに設定されている場合、JVMは、デバッガが接続を確立するのを待ちます。デバッガが接続に失敗すると、MAF AMXアプリケーション機能のロードが失敗します。

  • java.debug.port: デバッグ時に使用するポートを指定します。有効値は整数です。

  • javascript.debug.enabled: アプリケーションがデバイス・シミュレータで実行されている場合、JavaScriptのデバッグを有効または無効にします。有効な値は、truefalseです。

  • javascript.debug.feature: MAFでのJavaScriptデバッグの起動をトリガーするアプリケーション機能を指定します。値の形式はfeatureId:portです。ポートを指定する必要があります(これは当初、プレースホルダ値に設定されています)。


注意:

javascript.debug.enabledおよびjavascript.debug.featureの設定は、iOSおよびSafariバージョンが6.0以前の場合にのみ有効です。

iOSとSafariの両方のバージョンが6.0以降の場合、これらの2つのプロパティはいずれも指定する必要はありません。かわりに、第30.3.2.1項「iOS 6プラットフォーム上でのiOSデバイス・シミュレータを使用したJavaScriptのデバッグに関する必知事項」の指示に従ってください。


maf.propertiesファイルの内容は、次のようなものです。

java.debug.enabled=true
java.debug.port=8000

javascript.debug.enabled=true
javascript.debug.feature=products:8888

maf.propertiesファイルがJavaScriptをデバッグするように構成されたら、次のURLに移動して、MAFでデバッグ可能なすべてのロード済ページのリストを確認できます。

http://localhost:9999

OEPEを使用してJavaコードをデバッグする方法の詳細は、第30.3項「コードをデバッグするためのOEPEおよびMAFアプリケーションの構成」を参照してください。

30.3.2.1 iOS 6プラットフォーム上でのiOSデバイス・シミュレータを使用したJavaScriptのデバッグに関する必知事項

iOS 6プラットフォームで作業している場合、Safari 6ブラウザを使用してJavaScriptをデバッグできます。これを行うには、Safariの設定を開き、「Advanced」を選択した後、「Show Develop menu in menu bar」を選択して、ブラウザ内の「Develop」メニューを有効にします(図30-3を参照)。

図30-3 Safariブラウザ・オプションの有効化

この図は周囲のテキストで説明しています

「Develop」メニューが有効な場合、図30-4および図30-5に示すように、「iPhone Simulator」または「iPad Simulator」を選択し、デバッグするUIWebViewを選択します。「Develop」メニューにiPhone Simulatorオプションが表示されるか、iPad Simulatorオプションが表示されるかは、どちらのデバイス・シミュレータが起動しているかによって決まります。

図30-4 Safariブラウザの「Develop」メニューを使用したiPhone Simulator上でのデバッグ

この図は周囲のテキストで説明しています

図30-5 Safariブラウザの「Develop」メニューを使用したiPad Simulator上でのデバッグ

この図は周囲のテキストで説明しています

30.3.3 MAF AMXコンテンツのデバッグ方法

MAFアプリケーションにMAF AMXコンテンツが含まれている場合、デバイスまたはエミュレータを構成した後で、OEPEでその他のタイプのアプリケーションをデバッグするときに行うのと同様、ブレークポイントの設定、変数の内容の表示およびメソッド・コール・スタックの検査ができます。


注意:

デバッグできるのは、JavaコードおよびJavaScriptのみです(第30.3.2項「JavaコードおよびJavaScriptのデバッグを有効にする方法」を参照)。EL式または他の宣言要素のデバッグはサポートされていません。

30.4 AndroidプラットフォームにデプロイされたMAFアプリケーションのデバッグ

OEPEを使用してAndroidプラットフォームでMAFアプリケーションをデバッグするには、第30.3項「コードをデバッグするためのOEPEおよびMAFアプリケーションの構成」で説明されている汎用的なデバッグ手順を実行します。

Javaコードをデバッグするには、デバッグ構成を作成し、その中でデバッグ・モードを構成します。これらのタスクの詳細は、第30.3.2項「JavaコードおよびJavaScriptのデバッグを有効にする方法」および第30.3項「コードをデバッグするためのOEPEおよびMAFアプリケーションの構成」を参照してください。これらのタスクを完了すると、MAFアプリケーションをデバッグ・モードでデプロイして、第30.4.1項「AndroidプラットフォームでのJavaコードのデバッグ方法」の説明に従ってJavaコードをデバッグできます。

UIコード(JavaScript、HTMLおよびCSS)をデバッグするには、デバッグ構成でデバッグ・モードを構成します。このタスクを完了すると、第30.4.2項「AndroidプラットフォームでのUIコードのデバッグ方法」の手順に従ってUIコードをデバッグできます。

30.4.1 AndroidプラットフォームでのJavaコードのデバッグ方法

OEPEを使用してAndroidプラットフォームでMAFアプリケーションのJavaコードをデバッグするには、第30.3項「コードをデバッグするためのOEPEおよびMAFアプリケーションの構成」で説明されているデバッグ手順を実行します。

Androidデバイスまたはエミュレータの構成方法、およびデバッグのためのMAFアプリケーションのデプロイ方法については、第27.3.2項「AndroidエミューレータへのAndroidアプリケーションのデプロイ方法」を参照してください。

Androidデバイスまたはエミュレータで実行中のMAFアプリケーションのデバッグを可能にするには、第9章「MAFアプリケーションでのプラグインの使用方法」の概要の説明に従って、ネットワーク情報プラグインが有効であることを確認します。

30.4.1.1 adbのトラブルシューティング

Javaコードをデバッグすると、USBを介して接続されたAndroidデバイスまたはAndroidデバイス・エミュレータで、デプロイメントの最終手順は自動的にポート転送を実行します。これは、ターミナルで次のコマンドを実行した場合と同じです。

  • デバイスでのデバッグの場合:

    adb -d forward tcp:8000 tcp:8000

  • エミュレータでのデバッグの場合:

    adb -e forward tcp:8000 tcp:8000

ときにはadbプロセスはフリーズすることがあるため、プロセスを強制終了して再起動する必要があります。

プロセスを強制終了するには、次の手順を実行します。

  • Macターミナル: kill -9 procIDコマンドを使用します。

ターミナルで次のコマンドを実行して、adbデーモンを再起動します。

adb devices

adbのフリーズの前に成功したデプロイメントは引き続きデプロイされます。アプリケーションをデバッグするには、アプリケーションを再デプロイします。

30.4.2 AndroidプラットフォームでのUIコードのデバッグ方法

MAFアプリケーションを開発する際、Androidデバイスでアプリケーションのユーザー・インタフェース(UI)をレンダリングするコードのデバッグが必要になる場合があります。UIをレンダリングするコードには、JavaScript、HTML、CSSなどがあります。開発マシンからAndroidデバイスにMAFアプリケーションをデプロイすると、GoogleのChrome DevToolsを使用してこのコードをデバッグできます。図30-6は、MAFアプリケーションのAMXページを調べるChrome DevToolsを示しています。

図30-6 MAFアプリケーションのAMXページを調べるChrome DevTools

この図は周囲のテキストで説明しています

Chrome DevToolsの詳細(使用するための要件など)は、Google DevelopersのサイトにあるChrome DevToolsを使用したAndroidでのリモート・デバッグに関する項を参照してください。

Oracle Mobile Platform YouTubeチャンネルの「Android上のOracle MAFアプリケーションでのHTMLのデバッグ」ビデオで、AndroidでUIコードをデバッグする方法の概要も参照してください。後者のビデオではcvm.propertiesファイルに言及していることに注意してください。このファイルは、maf.propertiesに名前が変更されました。

AndroidデバイスにMAFアプリケーションをデプロイしてUIコードをデバッグするには、次のことを実行する必要があります。

30.5 iOSプラットフォームにデプロイされたMAFアプリケーションのデバッグ

Javaコードをデバッグする前に、デバッグ構成を作成し、その中でデバッグ・モードを構成する必要があります。これらのタスクの詳細は、第30.3.2項「JavaコードおよびJavaScriptのデバッグを有効にする方法」および第30.3項「コードをデバッグするためのOEPEおよびMAFアプリケーションの構成」を参照してください。これらのタスクを完了したら、アプリケーションをiOSデバイスにデバッグ・モードでデプロイして、Javaコードをデバッグできます。デバッグ・モードでデプロイする方法の詳細は、第30.5.1項「iOSプラットフォームでのJavaコードのデプロイ方法」を参照してください。

UIコード(JavaScript、HTMLおよびCSS)をデバッグするには、デバッグ構成でデバッグ・モードを構成します。このタスクを完了すると、第30.5.2項「iOSプラットフォームでのUIコードのデバッグ方法」の手順に従ってUIコードをデバッグできます。

30.5.1 iOSプラットフォームでのJavaコードのデバッグ方法

OEPEを使用してiOSプラットフォームでMAFアプリケーションのJavaコードをデバッグするには、第30.3項「コードをデバッグするためのOEPEおよびMAFアプリケーションの構成」で説明されているデバッグ手順を実行します。

30.5.2 iOSプラットフォームでのUIコードのデバッグ方法

iOS プラットフォームで作業している場合、Safari ブラウザを使用してJavaScriptをデバッグできます。これを行うには、Safariの環境設定を開き、「Advanced」を選択した後、「Show Develop menu in menu bar」を選択して、ブラウザ内の「Develop」メニューを有効にします。

「Develop」メニューが有効になったら、「iPhone Simulator」または「iPad Simulator」を選択し(図30-3および図30-4を参照)、デバッグするUIWebViewを選択します(図30-5を参照)。


注意:

「Develop」メニューにiPhone Simulatorオプションが表示されるか、iPad Simulatorオプションが表示されるかは、どちらのデバイス・シミュレータが起動しているかによって決まります。

featureContentDelay追加ビルド引数を使用して、アプリケーションの最初のページがロードされる前に、カスタムJavaScriptからのログ・メッセージおよびエラーを記録します。この引数は、WebViewにコンテンツが移入されるまでの遅延を指定します。追加ビルド引数-featureContentDelayを20に設定します。

図30-7 Safariブラウザの「Develop」メニューを使用したiPhone Simulator上でのデバッグ

この図は周囲のテキストで説明しています

図30-8 Safariブラウザの「Develop」メニューを使用したiPad Simulator上でのデバッグ

この図は周囲のテキストで説明しています

図30-9 Safariブラウザの「Develop」メニューを使用したUIWebViewの選択

この図は周囲のテキストで説明しています

図30-10 リモートWebインスペクタ

この図は周囲のテキストで説明しています

図30-11 実行時にリモートWebインスペクタによって解析されたAMXページ

この図は周囲のテキストで説明しています

図30-11および図30-12に、Safariブラウザでのブレークポイントを使用したJavaScriptのデバッグを示します。

図30-12 SafariブラウザでのJavaScriptのデバッグ

この図は周囲のテキストで説明しています

図30-13 実行時にデバッグされたAMXページ

この図は周囲のテキストで説明しています

30.6 MAFアプリケーションでのロギングの使用および構成

MAFアプリケーションの場合、サポートされるすべてのプラットフォームでロギングを有効にするには、JavaScript (第30.6.2項「JavaScriptのロギングの使用方法」を参照)および埋込みコード(第30.6.3項「埋込みロギングの使用方法」)で、単一ファイルへのログ出力を含む単一構成を使用します。このログ出力には、System.out.printlnおよびSystem.err.println文によって生成された出力が含まれます。

デフォルトのMAFのロギング・プロセスは、次のとおりです。

  • アプリケーションの起動時、ロギングが開始されます。

  • アプリケーションの以前の実行で生成された既存のログ・ファイルが削除され、現在の実行の内容のみが使用可能になります。

  • アプリケーションをiOSデバイス・シミュレータ上で実行している場合、すべてのログ出力は通常、開発用コンピュータのApplication/Utilitiesディレクトリを通じてアクセスできるコンソールに送信されます。ただし、開発用コンピュータでMac OS 10.8.nを実行している場合、Javaロギング出力へのアクセスに使用できるファイルは、出力のリダイレクションに伴って生成された直後に、その名前と場所が通知されるファイルのみです。このファイルについてありえる場所の1つは、/Users/<userid>/Library/Application Support/iPhone Simulator/6.0/Applications/<AppID>/Documents/logs/application.logです。

    iOSデバイス上でアプリケーションを実行している場合、コンソール出力は、アプリケーションのDocuments/logsディレクトリにあるapplication.logファイルにリダイレクトされます。

    Androidでは、出力は、アプリケーションと同じ名前のテキスト・ファイルにフォワードされます。出力ファイルの場所は/sdcardです。この場所が存在していないか、読取り専用として構成されている場合、ログ出力は、アプリケーションの書込み可能データ・ディレクトリに再ルーティングされます。

  • logging.propertiesファイルは、自動的に作成され、アプリケーション・ファイル・システムの<assembly project>/META-INFの場所に配置されます(第30.6項「MAFアプリケーションでのロギングの使用および構成」を参照)。このファイルでは、すべてのロガーでcom.sun.util.logging.ConsoleHandlerおよびSimpleFormatterを使用することが定義され、ログ・レベルがSEVEREに設定されます。このファイルを編集して、別のロギング動作を指定できます(第30.6.1項「プロパティ・ファイルを使用したロギングの構成方法」を参照)。


    注意:

    MAFアプリケーションでは、java.util.loggingパッケージからのロガーを使用することはできません。

    MAFのロガーは、次のとおりoracle.adfmf.util.Utilityクラスで宣言されます。

    public static final String APP_LOGNAME = "oracle.adfmf.application";
    public static final Logger ApplicationLogger = Logger.getLogger(APP_LOGNAME);
    
    public static final String FRAMEWORK_LOGNAME = "oracle.adfmf.framework";
    public static final Logger FrameworkLogger = Logger.getLogger(FRAMEWORK_LOGNAME);
    

    MAFアプリケーションで使用するロガーは、ApplicationLoggerです。

    oracle.adfmf.util.logging.Traceクラスのメソッドを使用することもできます。

    詳細は、Oracle Mobile Application Framework Java APIリファレンスを参照してください。

    iOSデバイス上でアプリケーションを実行している場合、コンソール出力は、アプリケーションのDocuments/logsディレクトリにあるapplication.logファイルにリダイレクトされます。iOSデバイスでは、このディレクトリに次のようにアクセスできます。

    1. 「Xcode」→「Devices」とナビゲートします。

    2. 「Installed Apps」セクションのリストからアプリケーションを選択します。

    3. 歯車のアイコンをクリックします。

    4. ダウンロードされたコンテナを選択します。

    5. ダウンロードされた*.xcappdataファイルを右クリックして、「Show Package Contents」を選択します。

    6. 「AppData」→「Documents」→「Logs」を開きます。

    7. ダウンロードされた*.xcappdataファイルを右クリックして、「Show Package Contents」を選択します。

    Androidでは、出力は、アプリケーションと同じ名前のテキスト・ファイルにフォワードされます。出力ファイルの場所は/sdcardです。この場所が存在していないか、読取り専用として構成されている場合、ログ出力は、アプリケーションの書込み可能データ・ディレクトリに再ルーティングされます。ログ・ファイルの内容は、AndroidのLogcatユーティリティ(http://developer.android.com/tools/debugging/debugging-log.htmlを参照)でレプリケートされます。OEPEを使用してMAFアプリケーションをAndroidデバイスまたはエミュレータにデプロイする場合は、OEPEでLogcatからログ出力が表示されます。

    iOSおよびAndroidの両方で、デプロイメントの直後に、ログ出力がOEPEのログ・ウィンドウに表示されます。MAFアプリケーションのビルド、デプロイおよび起動に実行/デバッグ構成を使用する場合は、ツールバーにある「終了」ボタンで、ログのリダイレクトを実行するプロセスとともにMAFアプリケーションを終了します。

  • logging.propertiesファイルは自動的に作成され、アセンブリ・プロジェクトのMETA-INFディレクトリ内に配置されます(この場所は、アプリケーション・ファイル・システム内の<application_name>/META-INFの場所に対応しています)。このファイルでは、すべてのログ出力でjava.util.logging.ConsoleHandlerおよびSimpleFormatterを使用することが定義され、ログ・レベルがSEVEREに設定されます。このファイルを編集して、別のロギング動作を指定できます(第30.6.1項「プロパティ・ファイルを使用したロギングの構成方法」を参照)。


    注意:

    MAFアプリケーションでは、java.util.loggingパッケージからのロガーを使用することはできません。

MAFのロガーは、次のとおりoracle.adfmf.util.Utilityクラスで宣言されます。

public static final String APP_LOGNAME = "oracle.adfmf.application";
public static final Logger ApplicationLogger = Logger.getLogger(APP_LOGNAME);
 
public static final String FRAMEWORK_LOGNAME = "oracle.adfmf.framework";
public static final Logger FrameworkLogger = Logger.getLogger(FRAMEWORK_LOGNAME);

oracle.adfmf.util.logging.Traceクラスのメソッドを使用することもできます。

詳細は、Oracle Mobile Application Framework Java APIリファレンスを参照してください。

30.6.1 プロパティ・ファイルを使用したロギングの構成方法

次の例は、ロギングの構成で使用するlogging.propertiesファイルを示しています。

# default - all loggers to use the ConsoleHandler
.handlers=com.sun.util.logging.ConsoleHandler
# default - all loggers to use the SimpleFormatter
.formatter=com.sun.util.logging.SimpleFormatter

oracle.adfmf.util.logging.ConsoleHandler.formatter=
             oracle.adfmf.util.logging.PatternFormatter
oracle.adfmf.util.logging.PatternFormatter.pattern=
             [%LEVEL%-%LOGGER%-%CLASS%-%METHOD%]%MESSAGE%

#configure the framework logger to only use the adfmf ConsoleHandler
oracle.adfmf.framework.useParentHandlers=false
oracle.adfmf.framework.handlers=oracle.adfmf.util.logging.ConsoleHandler
oracle.adfmf.framework.level=SEVERE

#configure the application logger to only use the adfmf ConsoleHandler
oracle.adfmf.application.useParentHandlers=false
oracle.adfmf.application.handlers=oracle.adfmf.util.logging.ConsoleHandler
oracle.adfmf.application.level=SEVERE

oracle.adfmf.util.logging.ConsoleHandlerは、カスタム・フォーマッタの受信者としての役割を果たします。

oracle.adfmf.util.logging.PatternFormatterでは、ログ・メッセージの出力を可能にする、次の高度なフォーマット・トークンが許可されています。

  • %LEVEL%: ロギング・レベル。

  • %LOGGER%: 出力が書き込まれるロガーの名前。

  • %CLASS%: ログに記録されるクラス。

  • %METHOD%: ログに記録されるメソッド。

  • %TIME%: ロギング・メッセージが送信された時間。

  • %MESSAGE%: 実際のメッセージ。

使用可能なロギング・レベルは、次のとおりです。

  • SEVERE: 重大な障害を示すメッセージ・レベルです。

  • WARNING: 潜在的な問題を示すメッセージ・レベルです。

  • INFO: 情報メッセージのメッセージ・レベルです。

  • FINE: トレース情報を提供するメッセージ・レベルです。

  • FINER: このレベルは、かなり詳細なトレース・メッセージを示します。

  • FINEST: このレベルは、非常に詳細なトレース・メッセージを示します。


注意:

ロギング・レベルの詳細度を選択するときは、SEVEREWARNINGおよびINFOレベルで出力の詳細度を上げると、アプリケーションのパフォーマンスに悪影響を及ぼすことに留意してください。

デバイスでアプリケーションを動作させているときに、OEPEには、iOSコンソールと、各デバイス(エミュレータを含む)ごとにAndroid用の追加コンソールという2つのコンソールがあります。両方のタイプのコンソールは、OEPEコンソールへの出力をフィルタ処理できる2つの追加logging.propertiesファイル・プロパティを使用して、ロギングおよび標準出力をストリーム化できます。

oepe.console.filter.android=<some string>
oepe.sonsole.filter.ios=<some string>

コンソールのメニュー・バーの選択したコンソールの表示ボタンを使用すると、あるコンソールから別のコンソールへ切り替えることができます。使用可能なコンソールを切り替えるには、この図は周囲のテキストで説明していますをクリックします。あるいは、第30.6.1項「コンソールの選択」に示すように、ボタンの横の下向き矢印をクリックして、リストから選択します。

図30-14 コンソールの選択

この図は周囲のテキストで説明しています

logging.propertiesファイルで定義されているロガーは、oracle.adfmf.util.Utilityクラスから取得されるロガーと一致します(第30.6項「MAFアプリケーションでのロギングの使用および構成」を参照)。ロギング・レベルも一致します。INFOよりも詳細なロギング・レベルを使用する場合は、ConsoleHandlerのロギング・レベルを、次の例に示されているものと同じレベルに変更する必要があります。

oracle.adfmf.util.logging.ConsoleHandler.formatter=
             oracle.adfmf.util.logging.PatternFormatter
oracle.adfmf.util.logging.ConsoleHandler.level=FINEST
oracle.adfmf.util.logging.PatternFormatter.pattern=
             [%LEVEL%-%LOGGER%-%CLASS%-%METHOD%]%MESSAGE%

30.6.2 JavaScriptのロギングの使用方法

JavaScriptは、console.log or.error/.warn/.infoに出力を書き込みます。この出力は、System.outユーティリティによってファイルにリダイレクトされます。

メッセージを指定することで、ログの出力をカスタマイズできます。次のJavaScriptコードでは、"Message from JavaScript"出力が生成されます。

<script type="text/javascript" charset="utf-8">
   function test_function() { console.log("Message from JavaScript"); }
</script>

ロギング・ファイルに定義されているプロパティを利用するには、adf.mf.logパッケージ、およびそれによって提供されるApplicationロガーを使用する必要があります。

使用可能なロギング・レベルは、次のとおりです。

  • adf.mf.log.level.SEVERE

  • adf.mf.log.level.WARNING

  • adf.mf.log.level.INFO

  • adf.mf.log.level.CONFIG

  • adf.mf.log.level.FINE

  • adf.mf.log.level.FINER

  • adf.mf.log.level.FINEST

ロギングをトリガーするには、adf.mf.log.Applicationロガーのlogpメソッドを使用し、そのメソッドのパラメータで次のものを指定します。

  • ロギング・レベル

  • 文字列としての現在のクラス名

  • 文字列としての現在のメソッド

  • 文字列としてのメッセージ文字列

次の例は、MAFアプリケーションでのlogpメソッドの使用方法を示しています。

adf.mf.log.Application.logp(adf.mf.log.level.WARNING,
                            "myClass",
                            "myMethod",
                            "My Message");

logpメソッドを実行すると、次の出力が生成されます。

[WARNING - oracle.adfmf.application - myClass - myMethod] My Message

詳細は、『Oracle Fusion Middleware Oracle Platform Security Servicesによるアプリケーションの保護』を参照してください。

30.6.3 埋込みロギングの使用方法

埋込みロギングでは、次の例に示されているとおり、com.sun.util.logging.Loggerを使用します。EmbeddedClassは、プロジェクトで定義されているJavaクラスを表しています。

import com.sun.util.logging.Level;
import com.sun.util.logging.Logger;
import oracle.adfmf.util.logging.*;
...
   Utility.ApplicationLogger.logp(Level.WARNING, 
                                  EmbeddedClass.class.getName(),
                                  "onTestMessage",
                                  "embedded warning message 1");
   Logger.getLogger(Utility.APP_LOGNAME).logp(Level.WARNING,
                    this.getClass().getName(),
                    "onTestMessage",
                    "embedded warning message 2");
   Logger.getLogger("oracle.adfmf.application").logp(Level.WARNING,
                                                this.getClass().getName(),
                                                "onTestMessage",
                                                "embedded warning message 3");

このコードによって生成される出力は、次のとおりです。

[WARNING - oracle.adfmf.application - EmbeddedClass - onTestMessage] embedded warning message 1
[WARNING - oracle.adfmf.application - EmbeddedClass - onTestMessage] embedded warning message 2
[WARNING - oracle.adfmf.application - EmbeddedClass - onTestMessage] embedded warning message 3

30.6.4 iOSプラットフォームでのデバッグおよびロギングにXcodeを使用する方法

MAFプロジェクトの操作にXcodeを使用することは、OEPEを使用した次回のデプロイメント中に一部またはすべての変更を失う可能性があるため推奨されませんが、例外的な状況ではこれを使用できます。

始める前に:

アプリケーションをOEPEからiOSシミュレータにデプロイします。

生成されたプロジェクトを直接Xcodeで開く手順は次のとおりです。

  1. workspace_directory\deploy\デプロイメント・プロファイル名\temporary_xcode_project\に移動します。

  2. Oracle_ADFmc_Container_Template.xcodeprojというXcodeプロジェクトを開きます。

Xcodeを使用してMAFアプリケーションをデバッグしている場合、IDE内(OEPEコンソールまたはXcodeコンソール)ではJavaの出力を表示できません。この出力は、ファイルにリダイレクトされます(第30.6項「MAFアプリケーションでのロギングの使用および構成」を参照)。アプリケーションのスキーマに次の引数を追加すると、この動作を無効にし、iOSデバイスまたはシミュレータ上でデバッグを実行するときに、XcodeからJava、JavaScriptおよびObjective-Cのログ出力にリアルタイムでアクセスできるようになります。

-consoleRedirect=FALSE

30.6.5 アプリケーション・ログへのアクセス方法

次のAPIを使用すると、アプリケーション・ログ情報にアクセスできます。

  • oracle.adfmf.framework.api.PerfMon

  • oracle.adfmf.framework.api.LogEntry

  • oracle.adfmf.util.HOTS

詳細は、Oracle Mobile Application Framework Java APIリファレンスを参照してください。

30.6.6 ロギングを無効にする方法

ロギング出力がアプリケーション・ログ・ファイルに転送されないように設定できます(この場合、ログ・ファイルは、空白のままになるか、まったく作成されません)。ロギングが無効になると、トレース文はアプリケーション・ログから失われ、stderrおよびstdoutに転送された出力は、すべてnullの場所またはエンド・ユーザーがアクセスできない別の場所にリダイレクトされます。

すべてのロギングを無効にするには、次のようにアプリケーションのadf-config.xmlファイルでdisableLoggingプロパティをtrueに設定します。

<adf-property name="disableLogging" value="true"/>

デフォルトでは、MAFアプリケーションのロギングは有効で、disableLoggingプロパティはfalseに設定されています。

adf-config.xmlファイルの詳細は、付録C「MAFアプリケーションとプロジェクト・ファイルの概要」を参照してください。

30.7 MAFアプリケーションのパフォーマンスの測定

MAFは、ユーザーによるMAFアプリケーションのパフォーマンスのモニターおよび測定を支援します。たとえば、アプリケーションで次のイベントの実行にかかる時間を測定できます。

  • ボタンにより起動されたアクションの完了

  • ページのロード

  • RESTコールがレスポンスを返す

また、MAFアプリケーションでモニターする操作の実行時間の平均および標準偏差を示す統計を出力できます。

パフォーマンスの測定は、アプリケーションのlogging.propertiesファイルで次のパフォーマンス・ロガーのロギング・レベルを構成することによって有効にします。次の例でロガーに割り当てられる値は、説明用の値です。使用可能なすべての値の説明は、表30-1を参照してください。

oracle.adfmf.amx.useParentHandlers=false
oracle.adfmf.amx.handlers=oracle.adfmf.util.logging.ConsoleHandler
oracle.adfmf.amx.level=SEVERE
 
# used to control what monitors are captured in the list of monitors
oracle.maf.performance.monitor.captured.level = FINEST
 
# used to control what monitors are reported in the dumpStatistics
oracle.maf.performance.monitor.reported.useParentHandlers=false
oracle.maf.performance.monitor.reported.handlers=oracle.adfmf.util.logging.ConsoleHandler
oracle.maf.performance.monitor.reported.level = FINEST
 
# used to control what monitor observations (start/stop times) are logged.
oracle.maf.performance.monitor.observations.reported=false
oracle.maf.performance.monitor.observations.reported.handlers=oracle.adfmf.util.logging.ConsoleHandler
oracle.maf.performance.monitor.observations.reported.level = FINEST

パフォーマンス測定が完了したら、MAFにより、アプリケーションのパフォーマンスの測定中に収集されたデータを確認できます。次の例は、MAFにより、パフォーマンスのモニター後に生成される出力の抜粋を示しています。この例では、モニターによって5件のProcess AMX eventが検出され、実行時間の平均は1435.5ミリ秒、標準偏差は1990.567…でした。

INFO - oracle.maf.performance.monitor.reported - MonitorFactory - dumpStatistics] 
PERFMON-JAVA STATS: Monitor 'com.company.WorkBetter.**Perf_Monitor**.Springboard.Container.Process AMX event' description: 
'Time to process event'  observations: 5  mean: 1435.4 standard deviation: 1990.5674567821106

表30-1に、logging.propertiesファイルで設定できる、使用可能なパフォーマンス・モニター・レベルを示します。

表30-1 パフォーマンス・モニター・レベル

レベル 説明

Level.INFO

これは最もおおまかなモニター・レベルです。イベントおよびアクションがモニターされます。このレベルを使用すると、たとえば、ページのロードやエンド・ユーザー・アクションの実行(ボタンのクリックなど)をモニターできます。このモニター・レベルを使用した場合、パフォーマンスへの影響は最小限になります。

Level.FINE

このレベルは、次のカテゴリに分けられる、より多くのパフォーマンス・インジケータをモニターします。

  • JavaScriptおよびレンダリング(システム・レベル)

  • ビジネス・ロジックの処理(アプリケーション・レベル)

  • フレームワークの処理(システム・レベル)

  • 外部データ・アクセス

    • RESTコール(システム・レベル)

    • データベース・アクセス(システム・レベル)

このモニター・レベルを使用するとアプリケーションのパフォーマンスに影響するため、デフォルトでは有効にしないでください。アプリケーションを再構築または調整することを目的として、コードの実行状況に関するインサイトを取得する場合に、このレベルの使用を検討してください。

Level.FINER

AMXページでのノードの処理、データ変更イベントまたはEL式の実行時間といった重大なパフォーマンスの問題をモニターする場合に使用します。

Level.FINEST

アプリケーションのパフォーマンスをデバッグする場合に、このモニター・レベルを使用します。


logging.properitesで指定したモニター・レベルは、アプリケーションを初めて起動するときに有効になります。


注意:

MAFでは、oracle.adfmf.framework.apiパッケージのPerfMonクラスで、パフォーマンス・モニター・レベルを実行時に変更できる多くのsetPerformanceMonitorメソッドを提供しています。詳細は、Oracle Mobile Application Framework Java APIリファレンスを参照してください。

logging.propertiesファイルでのモニター・レベルの指定に加え、パフォーマンス・データを収集するモニターをアプリケーションに追加することもできます。MAFでは、Javaクラスoracle.adfmf.performance.Monitor (モニター)を使用してパフォーマンス・データを収集します。モニターは、開始および停止でき、監視を追加できるストップ・ウォッチです。監視を追加すると、モニターを使用して特定の測定の標準偏差などを把握できます。各モニターに、一意のIDとオプションの説明があります。

モニターでは、イベントの継続時間やイベントの発生回数を測定するために使用できるいくつかのaddObservation()メソッドが公開されています。継続時間を測定する場合は、イベントの前にモニターを開始します。イベントが発生したら、モニターからaddObservation()メソッドを呼び出します。これによりモニターが停止します。継続時間は、start()メソッドからaddObservation()メソッドまでの時間です。停止されなかったモニターは再開できます。開始していないモニターは停止できません。そのようなモニターを停止しようとすると、エラーが記録されます。

イベントの発生回数を測定するモニターは、開始または停止する必要はありません。次の例に示すように、モニターを停止しないaddObservation(double duration)メソッドを使用します。このモニターは、パフォーマンスを測定しているアプリケーションでのJSONシリアライズの発生回数を計測します。durationパラメータは、モニターが最後に監視を追加してからの時間を示します。

次の例は、イベントの継続時間を測定するモニターの作成方法を示しています。この例では、このモニターによって生成される統計情報のサンプルも示しています。

import oracle.adfmf.performance.Monitor;
....
 
 public void measurePerformance()
  {
    Monitor monitor = null;
 
    try
    {
      //// Check that the appropriate monitor level is set before you create the monitor
      if (Utility.PerformanceMonitorCaptured.isLoggable(Level.INFO))
      {
        monitor = MonitorFactory.getInstance().getMonitor("REST call", Level.INFO, "REST call timing");
        monitor.start();
      }
 
      //
      // Perform your custom logic here:
      //
    }
    finally
    {
      if (monitor != null)
      {
        monitor.addObservation();
      }
    }
  }
 
  public void countCalls()
  {
    Monitor monitor = null;
 
    try
    {
      if (Utility.PerformanceMonitorCaptured.isLoggable(Level.FINE))
      {
        monitor = MonitorFactory.getInstance().getMonitor("Call count", Level.FINE, "Count number of calls");
        monitor.start();
      }
 
      //
      // Perform your custom logic here:
      //
    }
    finally
    {
      if (monitor != null)
      {
        monitor.addObservation(1);
      }
    }
  }

アプリケーションでパフォーマンス・データを収集するモニターを作成するには、データを収集するためのパフォーマンス・モニター取得レベルを有効にするようにlogging.propertiesファイルを構成します。前述の例では、アプリケーションのlogging.propertiesファイルに次のエントリが含まれていない場合、MAFはモニターのパフォーマンス・データを収集しません。

# used to control what monitors are captured in the list of monitorsoracle.maf.performance.monitor.captured.level = FINEST

モニター(oracle.adfmf.performance.Monitor)の詳細は、Oracle Mobile Application Framework Java APIリファレンスを参照してください。

モニターに加え、MAFではoracle.adfmf.performance.Story (ストーリ)も提供されます。ストーリを使用すると、パフォーマンス・データの収集を開始および終了できます。ストーリのパフォーマンス・データの収集が終了すると、ストーリの開始時に割り当てたストーリIDを使用して収集されたパフォーマンス・データの階層ビューがMAFに表示されます。階層ビューには、ストーリ中に実行されたイベントの個別のタイミング測定が示されます。さらに、ストーリの終了時に、MAFによってシステムの状態(HOTS)チェックポイントが実行されます。このHOTSチェックポイントの一環として、ストーリ中に収集されたすべてのモニター・データの標準偏差が計算されるため、個別のストーリ・イベントが統計的にどのように測定されているかに関するインサイトを得ることができます。その後、すべてのモニター・データがMonitorFactoryからクリアされます。


注意:

oracle.adfmf.util.HOTS.checkpoint()メソッドを呼び出すことで、ストーリとは関係なく、HOTSチェックポイントを実行できます。これにより、JVMにより使用された合計メモリー、空きメモリー、使用済メモリー(合計から空きメモリーを引いたもの)およびアクティブな機能の数といったアプリケーションの情報が判別されます。checkpoint()によって返されるデータのサンプルを次に示します。
HOTS.memory.used (N/A) count: 1.0335056E7
HOTS.memory.free (N/A) count: 1.365112E7
HOTS.memory.total (N/A) count: 2.3986176E7
HOTS.memory.max (N/A) count: 4.9152E7
HOTS.threads.active (N/A) count: 20.0
HOTS.features.active (N/A) count: 6.0

次の例は、ストーリID (**Perf_Monitor**)でストーリを開始し、ストーリを停止するメソッドを公開するマネージドBeanを示しています。このストーリは、パフォーマンスを測定するアプリケーションのUIのボタンから開始および終了できます。たとえば、ページのロードを測定する場合は、そのページに移動する前にストーリを開始するためのUIボタンと、ページがロードされたらストーリを終了する別のボタンを公開します。

package mobile;
 
import oracle.adfmf.amx.event.ActionEvent;
import oracle.adfmf.performance.Story;
 
public class PerfBean
{
  public PerfBean()
  {
    super();
  }
  public void startStory(ActionEvent ae)
  {
    Story.startStory("**Perf_Monitor**");
  }
  
  public void endStory(ActionEvent ae)
  {
    Story.endStory();
  }
 
}

logging.propertiesファイルで指定したパフォーマンス・モニター・レベルによって、ストーリによって取得されるデータの量が決定されます。つまり、logging.propertiesファイルのoracle.maf.performance.monitor.reported.level = FINESTエントリは、INFOエントリよりも詳細なストーリを生成します。ストーリが終了すると、ストーリ中に取得されたすべてのパフォーマンス・データがタイミングに基づいてソートされます。モニターが記録された時間が、測定対象のイベントが実行された時間と異なる場合があるため、このソートによって、JavaScriptイベントに対応するモニターの監視が正しい時間で示されます。次にMAFは、次の例に示すように、ソートされたレコードを反復処理し、目的の出力を生成します。

MAFによって、アプリケーションのログ・ファイルにストーリが書き込まれます。AMXページ間を移動するアプリケーションのサンプル出力は、次のようになります。

例30-1 ストーリを使用して生成されたMAFパフォーマンス・モニター・データ

[INFO - oracle.maf.performance.monitor.observations.reported - Monitor - start] 
                      PERFMON-JAVA START: **Perf_Monitor**.Navigation.Embedded.Story **Perf_Monitor** (Story Book) at 1452728427473
 
[INFO - oracle.maf.performance.monitor.observations.reported - Monitor - start] 
                      PERFMON-JAVA START: **Perf_Monitor**.Navigation.Container.Process AMX event Page: 
                      /view1.amx event of type action on node cb2 (Time to process event) at 1452728427416
 
[INFO - oracle.maf.performance.monitor.observations.reported - Monitor - stop] 
                      PERFMON-JAVA STOP:  **Perf_Monitor**.Navigation.Container.Process AMX event Page: 
                      /view1.amx event of type action on node cb2 (Time to process event) took: 14897.0ms 
                      (started at 1452728427416)
 
[INFO - oracle.maf.performance.monitor.observations.reported - Monitor - start] 
                      PERFMON-JAVA START: **Perf_Monitor**.Navigation.Container.Process AMX event Page: 
                      /view1.amx event of type action on node cb1 (Time to process event) at 1452728442323
 
[INFO - oracle.maf.performance.monitor.observations.reported - Monitor - stop] PERFMON-JAVA STOP:  
                      **Perf_Monitor**.Navigation.Container.Process AMX event Page:
                      /view1.amx event of type action on node cb1 (Time to process event) took: 
                      586.0ms (started at 1452728442323)
 
[INFO - oracle.maf.performance.monitor.observations.reported - Monitor - start] PERFMON-JAVA START:
                      **Perf_Monitor**.Navigation.Container.Load page /view2.amx
                      (Time to fully render the page) at 1452728442441
 
[INFO - oracle.maf.performance.monitor.observations.reported - Monitor - stop] PERFMON-JAVA STOP: 
                       **Perf_Monitor**.Navigation.Container.Load page /view2.amx 
                      (Time to fully render the page) took: 468.0ms (started at 1452728442441)
 
[INFO - oracle.maf.performance.monitor.observations.reported - Monitor - start] PERFMON-JAVA START: 
                       **Perf_Monitor**.Navigation.Embedded.Evaluate method expression #{myBean2.endStory} 
                       (UserSpace) at 1452728450665
 
[INFO - oracle.maf.performance.monitor.observations.reported - Monitor - stop] PERFMON-JAVA STOP:  
                       **Perf_Monitor**.Navigation.Embedded.Evaluate method expression #{myBean2.endStory} 
                       (UserSpace) took: 78.0ms (started at 1452728450665)
 
[INFO - oracle.maf.performance.monitor.observations.reported - Monitor - start] PERFMON-JAVA START: 
                       **Perf_Monitor**.Navigation.Container.Process AMX event Page: /view2.amx 
                       event of type action on node cb2 (Time to process event) at 1452728450626
 
[INFO - oracle.maf.performance.monitor.observations.reported - Monitor - stop] PERFMON-JAVA STOP:  
                       **Perf_Monitor**.Navigation.Container.Process AMX event Page: /view2.amx 
                       event of type action on node cb2 (Time to process event) 
                       took: 85.0ms (started at 1452728450626)
[INFO - oracle.maf.performance.monitor.observations.reported - Monitor - stop] PERFMON-JAVA STOP:  
                       **Perf_Monitor**.Navigation.Embedded.Story **Perf_Monitor** (Story Book) 
                       took: 23367.0ms (started at 1452728427473)
 
[INFO - oracle.maf.performance.monitor.reported - MonitorFactory - dumpStatistics] PERFMON-JAVA STATS: 
                       Monitor 'com.company.aPerfMonDocApp.**Perf_Monitor**.Navigation.Container.Process AMX event' 
                       description: 'Time to process event'  observations: 3  
                       mean: 5189.333333333333 standard deviation: 8410.817102596711
 
[INFO - oracle.maf.performance.monitor.reported - MonitorFactory - dumpStatistics] PERFMON-JAVA STATS: 
                       Monitor 'com.company.aPerfMonDocApp.**Perf_Monitor**.Navigation.Container.Load page' 
                       description: 'Time to fully render the page'  observations: 1  
                       mean: 468.0 standard deviation: NaN
 
[INFO - oracle.maf.performance.monitor.reported - MonitorFactory - dumpStatistics] PERFMON-JAVA STATS: 
                       Monitor 'com.company.aPerfMonDocApp.**Perf_Monitor**.Navigation.Embedded.Evaluate 
                       method expression' description: 'UserSpace'  observations: 1  mean: 78.0 
                       standard deviation: NaN
 
[INFO - oracle.maf.performance.monitor.reported - MonitorFactory - dumpStatistics] PERFMON-JAVA STATS: 
                       Monitor 'com.company.aPerfMonDocApp.**Perf_Monitor**.Navigation.Embedded.Story' 
                       description: 'Story Book'  observations: 1  mean: 23367.0 standard deviation: NaN
 
1452728427473  0001.0001 [0000] Start: **Perf_Monitor**.Navigation.Embedded.Story **Perf_Monitor** (INFO)
1452728442323    0002.0002 [0001] Start: **Perf_Monitor**.Navigation.Container.Process AMX event Page: 
                                                      /view1.amx event of type action on node cb1 (INFO)
 
1452728442441      0003.0003 [0002] Start: **Perf_Monitor**.Navigation.Container.Load page /view2.amx (INFO)
1452728442909      0003.0003 [0002] Stop: **Perf_Monitor**.Navigation.Container.Load page /view2.amx 
                                                              (took = 468.0) started at 1452728442441 (INFO)
 
1452728442909    0002.0002 [0001] Stop: **Perf_Monitor**.Navigation.Container.Process AMX event Page: 
                                                /view1.amx event of type action on node cb1 (took = 586.0) 
                                                started at 1452728442323 (INFO)
 
1452728450626    0004.0002 [0001] Start: **Perf_Monitor**.Navigation.Container.Process AMX event Page: 
                                                /view2.amx event of type action on node cb2 (INFO)
 
1452728450665      0005.0003 [0004] Start: **Perf_Monitor**.Navigation.Embedded.Evaluate 
                                                method expression #{myBean2.endStory} (INFO)
 
1452728450711    0004.0002 [0001] Stop: **Perf_Monitor**.Navigation.Container.Process AMX event Page: 
                                                /view2.amx event of type action on node cb2 (took = 85.0) 
                                                started at 1452728450626 (INFO)
 
1452728450743      0005.0003 [0004] Stop: **Perf_Monitor**.Navigation.Embedded.Evaluate method 
                                              expression #{myBean2.endStory} (took = 78.0) 
                                              started at 1452728450665 (INFO)
 
1452728450840  0001.0001 [0000] Stop: **Perf_Monitor**.Navigation.Embedded.Story **Perf_Monitor** 
                                              (took = 23367.0) started at 1452728427473 (INFO)

30.8 Oracle Mobile Cloud Serviceへの診断情報の送信

REST WebサービスにアクセスするMAFアプリケーションは、RestServiceAdapterを使用してこれらのサービスにアクセスします。アプリケーションがMCSによってホストされているRESTサービスにアクセスする場合、MCS診断を使用してアプリケーションによるそのRESTサービスのコールをモニターまたはデバッグするには、McsRestServiceAdapterを作成して、次の情報をMCSに送信します。

  • モバイル診断セッションID

    この属性は、特定のデバイスにアプリケーション・セッションをマップします。アプリケーションではこの情報を、Oracle-Mobile-DIAGNOSTIC-SESSION-ID HTTPリクエスト・ヘッダーを介して送信します。

  • モバイル・デバイスID

    MCSに送信されたREST APIリクエストを、リクエストを行った物理デバイスに関連付けます。モバイル・アプリケーションではこの情報を、Oracle-Mobile-Device-ID HTTPリクエスト・ヘッダーを介して提供します。

  • クライアント・リクエスト時間

    アプリケーションがリクエストを送信する直前に、クライアント側で取得されたAPIコールのタイム・スタンプを示します。モバイル・アプリケーションではこの情報を、HTTPリクエスト・ヘッダーのOracle-Mobile-CLIENT-REQUEST-TIME属性を使用して提供します。

次の例は、このタイプのアダプタを使用するMAFアプリケーションがHTTPリクエスト・ヘッダーに挿入する情報のタイプを示しています。

Oracle-Mobile-Diagnostic-Session-ID: 19975
Oracle-Mobile-Device-ID: d09379504b0a3247
Oracle-Mobile-Client-Request-Time: 2016-02-09T09:03:17.777Z

次の例は、McsRestServiceAdapterの作成方法を示しています。

...
import oracle.maf.api.dc.ws.rest.RestServiceAdapterFactory;
import oracle.maf.api.dc.ws.rest.RestServiceAdapter;
 
...
RestServiceAdapterFactory factory = RestServiceAdapterFactory.newFactory();
RestServiceAdapter mcsRestServiceAdapter = factory.createMcsRestServiceAdapter();

30.9 Oracle Mobile Cloud Serviceへの分析情報の送信

MCSでホストされる1つ以上のモバイル・バックエンド(MBE)を持つMAFアプリケーションは、アプリケーションの使用状況に関する分析情報をMCS Analyticsに送信できます。

MAFによってMCSに送信するために生成される分析情報は、アプリケーションのライフサイクルおよびエンド・ユーザーとMAFアプリケーションの対話に関する情報です。MAFでは、分析イベントをMAFフレームワーク・イベントとビジネス・イベントに分類します。アプリケーションのlogging.propertiesファイルでプロパティを構成して、MAFフレームワーク・イベントに応じて取得された情報をMCSに送信します。MAFフレームワーク・イベントの例には、アプリケーションの起動、アクティブ化や機能ナビゲーションなどの機能イベント、ユーザー認証イベントなどがあります。分析情報をMCSに送信するようにアプリケーションを構成している場合、MAFではこれらのイベントをデフォルトで記録します。

次の例は、エンド・ユーザーが保護されたアプリケーション機能(secure-feature-1およびsecure-feature-2)に移動する前に、ログイン・アプリケーション機能(LF1)にリダイレクトされたときに発生するFeatureNavigation MAFフレームワーク・イベントについて、MAFが生成し、MCSに転送するペイロードを示しています。MAFでは、分析情報を送信するように構成されているMAFアプリケーションがアクティブ化されたときに開始するセッション内のすべてのMAFフレームワーク・イベントを記録します。MAFアプリケーションが非アクティブ化されるとセッションが終了します。次の例では、sessionIDプロパティによってセッションが示されています。

MAFアプリケーションをデバッグ・モードでデバイスにデプロイすると、このペイロードがOEPEのログ・ウィンドウに表示されます。

"name":"FeatureNavigation", "properties":{"SourceId":"null","DestinationId":"LF1"}, "type":"custom", "timestamp":"2015-11-06T20:35:27.384Z", 
                                                    "sessionID":"com.company.MafAnalytics_736ad3d4-3443-4f65-8378-4e653ade2d30_160121114922"
 
"name":"FeatureNavigation", "properties":{"SourceId":"LF1","DestinationId":"secure-feature-1"}, "type":"custom", 
             "timestamp":"2015-11-06T20:35:27.384Z", "sessionID":"com.company.MafAnalytics_736ad3d4-3443-4f65-8378-4e653ade2d30_160121114922"
 
"name":"FeatureNavigation", "properties":{"SourceId":"secure-feature-1","DestinationId":"secure-feature-2"}, "type":"custom", 
              "timestamp":"2015-11-06T20:35:27.384Z", "sessionID":"com.company.MafAnalytics_736ad3d4-3443-4f65-8378-4e653ade2d30_160121114922"

ビジネス・イベントは、ユーザー(アプリケーション開発者)がアプリケーションで定義するイベントです。ユーザーは、MAFのoracle.maf.api.analytics.AnalyticsUtilitiesで提供されているAPIを使用して、イベントの分析情報を取得します。MAFでは、ApplicationFeaturesデータ・コントロールでデータ・コントロール・メソッド(fireEventListener)も公開しています。このデータ・コントロール・メソッドをAMXページにドラッグ・アンド・ドロップして、定義したイベントをリスニングするようにメソッドを構成できます。これらのAPIを使用して、MAFフレームワーク・イベントからMCSに分析を送信することもできます。

MAFでは、コンテキスト・イベント情報(デバイス・モデル、国、タイムゾーンなど)をMCSまたはその他の希望するリポジトリに送信することもできます。

MCS以外のリポジトリに分析を送信することもできます。

詳細は、次を参照してください。

30.9.1 Oracle Mobile Cloud Serviceへの分析の転送を構成する方法

MAFでは、新しいMAFアプリケーションのlogging.propertiesファイルに、MAFアプリケーションからMCS Analyticsに分析情報を送信するように構成する必要があるプロパティを移入します。

次の例は、新しいMAFアプリケーションの作成時にlogging.propertiesファイルに含まれている、すぐに使用できるエントリを示しています。

# Configure the analytics logger
# Analytics events are logged only if oracle.maf.api.analytics.level=ALL
# Set to OFF or any level other than ALL to disable analytics
oracle.maf.api.analytics.level=ALL
oracle.maf.api.analytics.handlers=oracle.maf.api.analytics.LoggerAnalyticsHandler, oracle.maf.api.analytics.McsAnalyticsHandler
oracle.maf.api.analytics.custom.level=INFO
oracle.maf.api.analytics.LoggerAnalyticsHandler.level=INFO
 
# Configure MCSHandler
oracle.maf.api.analytics.McsAnalyticsHandler.level=INFO
oracle.maf.api.analytics.McsAnalyticsHandler.connectionId=Mcs_Connection_Id
oracle.maf.api.analytics.McsAnalyticsHandler.batchSize=25
oracle.maf.api.analytics.McsAnalyticsHandler.offlineWrite=false
oracle.maf.api.analytics.McsAnalyticsHandler.recordUsername=false
oracle.maf.api.analytics.McsAnalyticsHandler.contextProviderClassName=oracle.maf.api.analytics.McsContextProvider

前述の例に示したプロパティの中で、connectionIdのみが必須です。表30-2では、オプション・プロパティについて説明しています。connectionIdプロパティでは、MCS MBEへの有効な接続を定義します。アプリケーションのconnection.xmlで定義されているconnectionIdをこのプロパティの値として使用します。有効なconnectionIdを指定しない場合、MAFからMCSにイベントが送信されません。かわりに、MAFでは、デバイスで許可されるイベントの最大数に達するまで、これらのイベントをディスクに追加します。

アプリケーションのconnection.xmlファイルの有効なconnectionIdでは、MBEのID (oracle-mobile-backend-id)およびMAFアプリケーションがMBEに登録されるときに生成されるアプリケーション・キー(oracle-mobile-application-key)が使用されます。MAFは、MCSへの接続を作成するHTTPヘッダーにこれら2つの値を追加します。これらの値は、MAFアプリケーションが分析イベントを送信するMBEと、分析イベントの発生元のアプリケーションを識別します。


注意:

3つすべてのプラットフォーム(Android、iOSおよびユニバーサルWindowsプラットフォーム)について、MCSでMAFアプリケーションをクライアントとして登録する必要はありません。1つのプラットフォームについてMAFアプリケーションを登録し、生成されたアプリケーション・キーをoracle-mobile-application-keyの値として使用します。

MCS MBEへの接続でHTTP基本認証タイプを使用している場合は、oracle/wss_http_token_client_policyを接続に関連付けます。Oauthを使用する接続の場合は、oracle/http_oauth2_token_mobile_client_policyを接続に関連付けます。正しいポリシーを接続に関連付けないと、MAFでMCSに分析イベントがフラッシュされません。セキュリティ・ポリシーを接続に関連付ける方法の詳細は、第15.3項「セキュアなWebサービスへのアクセス」を参照してください。

次の例は、前述のプロパティの値が設定されたアプリケーションのconnections.xmlファイルの抜粋を示しています。

<References xmlns="http://xmlns.oracle.com/adf/jndi">
  <Reference name="Mcs_Connection_Id" className="oracle.adf.model.connection.url.HttpURLConnection"
             adfCredentialStoreKey="McsLoginConn" xmlns="">
    ...
    <RefAddresses>
      <XmlRefAddr addrType="Mcs_Connection_Id">
        <Contents>
          <urlconnection name="Mcs_Connection_Id" url="http://mcs_instance.oracle.com:7201"/>
    ...
  </Reference>
  <Reference name="McsLoginConn" className="oracle.adf.model.connection.adfmf.LoginConnection"
             adfCredentialStoreKey="McsLoginConn" partial="false" manageInOracleEnterpriseManager="true"
             deployable="true" xmlns="">
    <Factory className="oracle.adf.model.connection.adfmf.LoginConnectionFactory"/>
    <RefAddresses>
      <XmlRefAddr addrType="adfmfLogin">
        <Contents>
          <login url="http://mcs_instance.oracle.com:7201/mobile/platform/users/login"/>
          <logout url="http://mcs_instance.oracle.com:7201/mobile/platform/users/logout"/>
          <customAuthHeaders>
            <header name="oracle-mobile-backend-id" value="0e4a9dfa-046a-4aaa-b8dd-331044ad81f4"/>
            <header name="oracle-mobile-application-key" value="be53201a-8674-48d7-96d0-bb02f4cd06c5"/>
          </customAuthHeaders> 
    ...
</References>

logging.propertiesファイルで次のオプション・エントリを構成して、説明されている機能を実装します。

表30-2 MAFアプリケーションからの分析の転送を管理するためのオプション・プロパティ

プロパティ 説明

batchSize

MAFアプリケーションが関連付けられているMCSインスタンスにイベントを送信する前に、ローカルに保存されるイベントの数を決定するオプションのプロパティ。イベントはバッチでMCSにアップロードされます。最大バッチ・サイズの制限(65)があります。batchSizeが指定されないか、上限の65を超えている場合は、デフォルトのbatchSizeの25が適用されます。

offlineWrite

イベントのオフライン・バッファリングを有効にするかどうかを決定するオプションのプロパティ。デバイスがオフラインであるか、クライアントがMCSとの接続を確立できないときに、イベントが生成される場合があります。そのようなイベントが失われないようにするには、offlineWriteプロパティを構成します。接続が再確立されると、保存されたこれらのイベントがMAFによってMCSにフラッシュされます。offlineWriteプロパティは、そのようなイベントをディスクにキャッシュして、オフラインの間バッファリングできるようにします。MAFでは、最大250個のイベントがサポートされます。イベントはローリング方式で保存されます。つまり、MAFには最後の250個のイベントが保存されます。このため、常に最新のイベントがオフラインでバッファリングされます。MAFでは、batchSizeに達しているかどうかにかかわらず、アプリケーションが非アクティブ化された場合にもMCSにイベントをフラッシュします。デフォルトでは、offlineWriteは無効になっています。有効にするには、Trueに設定してください。

recordUsername

ユーザー名を取得するかどうかを決定するオプションのプロパティ。Trueに設定すると、ユーザーが保護された機能にログインしたときに、MAFによってユーザー名が取得されます。アプリケーションに保護された機能が含まれていない場合、またはユーザーが保護された機能にログインしていない場合は、ユーザー名はnullのままになります。アプリケーションに保護された機能が複数含まれている場合は、その機能にログインするために使用された資格証明(ユーザー名)に基づいてユーザー名が更新されます。取得されたユーザー名は、コンテキスト・イベントのフィールドの1つとして送信されます。したがって、ユーザー名を取得する予定の場合は、recordUsernameプロパティがTrueで、contextProviderClassNameにコンテキスト・イベントを生成するための有効なクラス名が指定されるようにlogging.propertiesを構成してください。たとえば、oracle.maf.api.analytics.McsAnalyticsHandler.recordUsername=trueと設定します。

contextProviderClassName

オプション。コンテキスト・イベントが生成されたときに、このプロパティの値を指定します。指定する値によって、MCSのコンテキスト・イベントを生成するクラスが決定されます。コンテキスト・イベントには、タイムゾーン・オフセット、地理的位置、デバイス情報などの情報が含まれます。recordUsernameTrueに設定されている場合は、ユーザー名が含まれることもあります。contextProviderClassNameプロパティは、デフォルトでは無効になっています。次の例は、このプロパティを有効にする方法を示しています。oracle.maf.api.analytics.McsAnalyticsHandler.contextProviderClassName=oracle.maf.api.analytics.McsContextProvider


30.9.2 Oracle Mobile Cloud Serviceにプログラムで分析を送信する方法

MAFでは、MCSにイベントを送信するために使用できるAPIをoracle.maf.api.analytics.AnalyticsUtilitiesで提供しています。

AnalyticsUtilitiesクラスは、次のAPIを提供します。

public static void fireEvent(Level level, String category, String eventName)        
// Send an event without a payload
 
public static void fireEvent(Level level, String category, String eventName, JSONObject payload)  
// Send an event with a JSON payload      
 
 
level:     The logging level of the event. Set to any standard level supported by Java logging. 
 
category:  The category of the event. Set to 'custom' for all events except context, 
           sessionStart(MAF Framework event) and sessionEnd(MAF Framework event). Set the latter events to 'system'.
 
eventName: Provide your own event name if you do not use an event provided in the AnalyticsUtilities class. 
           Throws an exception if null.
 
payload:   A JSONObject that contains key-value pairs for custom events. The JSONObject must be of type String. 
           No other data type is supported.

このAPIを使用する前に、MCSに分析を転送するために必要な値でlogging.propertiesファイルを構成します。たとえば、MCSのconnectionIDを指定します。

次の例は、このAPIを使用して、MAFアプリケーションからMCSに分析を送信する方法を示しています。

//  Sending events from your application. 
 
        //  The following logs event when there is no payload to register for an event.
        AnalyticsUtilities.fireEvent(Level.WARNING, AnalyticsUtilities.CATEGORY_CUSTOM, "EVENT_VIDEO_ACTIONS");
 
        //  The following logs event when there is a JSON payload to send for a custom event.
        try
                {
                  JSONObject   payload = new JSONObject(); 
                  payload.put("PAYLOAD_VIDEONAME", getFileName());
                  payload.put("PAYLOAD_ACTION", getAction());      
                  // Creating a custom event 'EVENT_VIDEO_ACTIONS' of level INFO
                  AnalyticsUtilities.fireEvent(Level.INFO, AnalyticsUtilities.CATEGORY_CUSTOM, "EVENT_VIDEO_ACTIONS" , payload);
                } 
 
           catch(Throwable t)
                {  
                // log the error
                }  

ユーザーとの相互作用に基づいて、イベントを取得する異なるログ・レベルを設定できます。たとえば、エンド・ユーザーが再生アクションを実行する場合、前述の例のEVENT_VIDEO_ACTIONSイベントをINFOレベルに設定できます。または、失敗した場合にイベントを取得するには、WARNINGレベルに設定できます。ロギング・レベルはlogging.propertiesファイルで管理します。たとえば、EVENT_VIDEO_ACTIONSイベントのロギングを管理するには、logging.propertiesファイルを次のように構成します。

// Set to  WARNING to log events for the play action. Set to INFO (or a lower level) 
// to log events for the play action plus failure events
oracle.maf.api.analytics.custom.EVENT_VIDEO_ACTIONS.level=WARNING
 
// Disable logging of EVENT_VIDEO_ACTIONS
oracle.maf.api.analytics.custom.EVENT_VIDEO_ACTIONS.level=OFF

30.9.3 Oracle Mobile Cloud Serviceにコンテキスト・イベントを送信する方法

MAFアプリケーションでは、コンテキスト・イベントを取得して、収集された情報をMCSまたはMCS以外のリポジトリに送信できます。

コンテキスト・イベントは、別のコンテキスト・イベントが記録されるまでの、後続のイベントのコンテキストを定義します。イベントは、MAFフレームワーク・イベントから、またはアプリケーションで定義するイベントから記録できます。

表30-3に、MAFアプリケーションからコンテキスト・イベントを転送するJSONオブジェクトのキーと値のペアでMCSが受け入れるキー名を示します。MCSでは、すべてのプロパティが文字列型である必要があります。次の表に示すすべてのプロパティはオプションです。


注意:

MCSでは、緯度および経度の情報が、市区町村、都道府県、国および郵便番号に変換されます。緯度および経度(latitudeおよびlongitude)の情報を指定するか、またはlocality、region、postalCodeおよびcountryを指定し、両方は指定しないでください。

表30-3 コンテキスト・イベント情報をMCSに送信するための有効なキー名

キー名 説明

userName

コンテキスト・イベントが記録されたときに、保護された機能にログインしていたデバイスのユーザー。

timezone

UTCからのデバイスのオフセット(秒)

model

デバイスのモデル名

osName

osVersion

デバイスのオペレーティング・システム名

デバイスのオペレーティング・システムのバージョン

latitude

デバイスのGPS緯度

longitude

デバイスのGPS経度

locality

デバイスの地域

region

デバイスのリージョン

postalCode

デバイスの郵便番号

country

デバイスの国


MAFアプリケーションからMCSにコンテキスト・イベント情報を送信するには、logging.propertiesファイルで次のエントリを構成します。

oracle.maf.api.analytics.McsAnalyticsHandler.contextProviderClassName= oracle.maf.api.analytics.McsContextProvider

logging.propertiesファイルにこのエントリが構成されていると、MAFは、表30-3のコンテキスト・イベント情報をMCSに送信します。MAFアプリケーションからMCSにユーザー名を送信する場合は、logging.propertiesファイルでrecordUsernameTrueに設定する必要もあります。

定義したフィールドを含むコンテキスト・イベントを生成するには、logging.propertiesファイルで次のエントリを構成します。

oracle.maf.api.analytics.McsAnalyticsHandler.contextProviderClassName=oracle.maf.demo.CustomContextProvider

ここで、oracle.maf.demo.CustomContextProvideroracle.maf.api.analytics.ContextProviderを実装するクラスです(例29-2を参照)。生成されるコンテキスト・イベントには、タイムゾーン、キャリアおよびメーカーの情報が含まれます。

例30-2 コンテキスト情報を送信するカスタム・コンテキスト・プロバイダ

package oracle.maf.demo;
 
import java.util.Date;
import java.util.TimeZone;
import oracle.maf.api.analytics.ContextProvider;
import oracle.adfmf.json.JSONObject;
 
public class CustomContextProvider
  implements ContextProvider
  {
  public CustomContextProvider()
  {
    super();
  }
  
  public JSONObject generateContext()
  {
    JSONObject myCustomCtx = new JSONObject();
 
    //
    // TimeZone - Mobile device's offset from UTC in seconds
    //
    Date date = new Date();
    int offset = TimeZone.getDefault().getOffset(date.getTime()) / 1000;
    
    try
    {
      myCustomCtx.put("timezone", new Integer(offset).toString());
      myCustomCtx.put("carrier", "AT&T");
      myCustomCtx.put("manufacturer", "Apple");
    }
    catch(Exception ex)
    {
      ex.printStackTrace();
    }
  
    return myCustomCtx;
  }
  }

30.9.4 他のリポジトリに分析を送信する方法

MAFアプリケーションでは、MCS以外のリポジトリに分析を送信できます。

これを行うには、次の例に示すように、oracle.maf.api.analytics.McsAnalyticsHandlerを拡張するカスタム・クラスを作成して、processEvent()メソッドをオーバーライドします。

package oracle.maf.demo;
 
import java.io.IOException;
import oracle.adfmf.framework.exception.AdfException;
 
import oracle.adfmf.json.JSONArray;
import oracle.adfmf.resource.CDCErrorBundle;
import oracle.adfmf.util.ResourceBundleHelper;
import oracle.maf.api.analytics.McsAnalyticsHandler;
import oracle.maf.api.dc.ws.rest.RestServiceAdapter;
import oracle.maf.api.dc.ws.rest.RestServiceAdapterFactory;
 
public class CustomHandler extends McsAnalyticsHandler
{
  public CustomHandler()
  {
    super();
  }
 
  //
  // Establish the connection to a different repository and flush the events.
  //
  protected void processEvents() throws AdfException
  {
    // Extract the events to be flushed
    _events = super.getEvents();
 
    RestServiceAdapter restAdapter = RestServiceAdapterFactory.newFactory().createRestServiceAdapter();
    restAdapter.clearRequestProperties();
 
    // Get valid connectionId of the repository.
    restAdapter.setConnectionName(getConnectionId());
    restAdapter.setRequestMethod(RestServiceAdapter.REQUEST_TYPE_POST);
    restAdapter.addRequestProperty("Content-Type", "application/json");
    restAdapter.setRequestURI(_ANOTHER_REPOSITORY_URI);
    restAdapter.setGenerateAnalyticsEvents(false);
 
    // make REST call to send events
    try
    {
      String responseMessage = restAdapter.send(_events.toString());
    }
    catch (IOException ex)
    {
      throw new AdfException(AdfException.ERROR, ResourceBundleHelper.CDC_ERROR_BUNDLE,
                             CDCErrorBundle.ERR_ANALYTICS_FLUSH_EVENTS, new Object[] { ex });
    }
  }
 
  private JSONArray _events = new JSONArray();
  private static final String _ANOTHER_REPOSITORY_URI = "_repository_uri";
}
 
You also need register the custom class in the logging.properties file. For example, to register CustomHandler, configure logging.properties as shown in the following example:
 
# Configure the analytics logger
oracle.maf.api.analytics.level=ALL
oracle.maf.api.analytics.handlers=oracle.maf.demo.CustomHandler
oracle.maf.api.analytics.custom.level=INFO
 
 
# Configure CustomHandler
oracle.maf.demo.CustomHandler.level=INFO
oracle.maf.demo.CustomHandler.connectionId=RepositoryConn
oracle.maf.demo.CustomHandler.batchSize=7
oracle.maf.demo.CustomHandler.offlineWrite=true
oracle.maf.demo.CustomHandler.recordUsername=false
oracle.maf.demo.CustomHandler.contextProviderClassName=oracle.maf.api.analytics.McsContextProvider

30.9.5 分析情報を取得するMAFフレームワーク・イベント

MAFでは、分析情報を取得する様々なMAFフレームワーク・イベントを提供しています。

これらのイベントは2つのカテゴリ(カスタムおよびシステム)にグループ化されます。アプリケーションがこれらのイベントをMCSに送信するようにアプリケーションのlogging.propertiesファイルを構成します。まず、特にMCSのconnectionIDを指定することによって、分析情報の送信を有効にするようにアプリケーションのlogging.propertiesファイルを構成します。次に、送信するイベントを指定します。この後者のタスクには、次の表の情報を使用します。

表30-4に、分析情報をアプリケーションからMCSに送信するためにlogging.propertiesファイルで構成できるMAFフレームワーク・イベント(カスタム・カテゴリ)を示します。各イベントは、OFFに設定するか、そのイベントのロギングが有効になるレベルより高いロギング・レベルに設定することで無効にできます。

表30-4 MAFフレームワーク・イベント(カスタム・カテゴリ)

イベント名 ロギング・レベル ロギングの有効化または無効化

UpdateAuthenticationStatus

FINE

oracle.maf.api.analytics.custom.UpdateAuthenticationStatus.level= FINE

oracle.maf.api.analytics.custom.UpdateAuthenticationStatus.level= OFF

FeatureNavigation

INFO

oracle.maf.api.analytics.custom.FeatureNavigation.level=INFO

oracle.maf.api.analytics.custom.FeatureNavigation.level=OFF

Login

INFO

oracle.maf.api.analytics.custom.Login.level=INFO

oracle.maf.api.analytics.custom.Login.level=OFF

LoginCallback

FINER

oracle.maf.api.analytics.custom.LoginCallback.level=FINER

oracle.maf.api.analytics.custom.LoginCallback.level=OFF

Timer

警告および期限切れ操作の場合はINFO

調整操作の場合はFINE

oracle.maf.api.analytics.custom.Timer.level=INFO

oracle.maf.api.analytics.custom.Timer.level=FINE

oracle.maf.api.analytics.custom.Timer.level=OFF

Logout

INFO

oracle.maf.api.analytics.custom.Logout.level=INFO

oracle.maf.api.analytics.custom.Logout.level=OFF

LogoutCallback

FINER

oracle.maf.api.analytics.custom.LogoutCallback.level=FINER

oracle.maf.api.analytics.custom.LogoutCallback.level=OFF

PageNavigation

INFO

oracle.maf.api.analytics.custom.PageNavigation.level=INFO

oracle.maf.api.analytics.custom.PageNavigation.level=OFF

FeatureTransition

INFO

oracle.maf.api.analytics.custom.FeatureTransition.level=INFO

oracle.maf.api.analytics.custom.FeatureTransition.level=OFF

ApplicationTransition

INFO

oracle.maf.api.analytics.custom.ApplicationTransition.level=INFO

oracle.maf.api.analytics.custom.ApplicationTransition.level=OFF

RESTWebService

INFO

oracle.maf.api.analytics.custom.RESTWebService.level=INFO

oracle.maf.api.analytics.custom.RESTWebService.level=OFF


表30-5に、分析情報をアプリケーションからMCSに送信するためにlogging.propertiesファイルで構成できるMAFフレームワーク・イベント(システム・カテゴリ)を示します。

表30-5 MAFフレームワーク・イベント(システム・カテゴリ)

イベント名 ロギング・レベル 説明

sessionStart

INFO

このイベント名は、MAFアプリケーションがアクティブ化され、分析情報の記録を開始したときに開始されるセッションを識別するために予約されています。このイベント名を使用するイベントをMAFアプリケーションで定義しないでください。

sessionEnd

INFO

このイベント名は、MAFアプリケーションが非アクティブ化され、分析情報の記録を停止したときに停止されるセッションを識別するために予約されています。このイベント名を使用するイベントをMAFアプリケーションで定義しないでください。

MAFは、batchSizeに達したかどうかに関係なく、sessionEndが発生するとイベントをMCSにフラッシュします。

context

INFO

コンテキスト・イベント情報を送信します(たとえば、デバイスのタイムゾーン、キャリアおよびメーカー)。次のようにこのイベントを有効にします。

oracle.maf.api.analytics.McsAnalyticsHandler
    .contextProviderClassName=oracle.maf.api 
    .analytics.McsContextProvider

コンテキスト・イベント情報の詳細は、第30.9.3項「Oracle Mobile Cloud Serviceにコンテキスト・イベントを送信する方法」を参照してください。