このセクションの内容
次のチュートリアルでは、Jtest を使用してアプリケーション カバレッジを収集する手順を説明します。サーバーの実行やアプリケーションのデプロイなどの基本的なトピックも説明されているため、ビギナーにも上級ユーザーにも役に立ちます。
Web アプリケーション カバレッジは、Java Agent を利用できる任意のサーバーで収集できます。次の前提条件は、このチュートリアルを実行する場合にだけ必要です。
[INSTALL]/examples
ディレクトリにあります。WAR ファイルをビルドします。アプリケーションはサーバー上で WAR ファイル (Web Application Archive) にパッケージ化する必要があります。Jtest に付属の maven-war-plugin を使用してアプリケーションをパッケージ化します。プラグインは自動的に適切な WAR 構造を持ったアプリケーションをビルドします。アプリケーション ディレクトリで次のコマンドを実行します。
mvn clean install |
アプリケーション サーバーにアプリケーションをデプロイします。Calculator サンプルをアプリケーション サーバーにデプロイする方法については、「Tomcatアプリケーション サーバーにデプロイする」、「WildFly/JBoss アプリケーション サーバーにサンプルをデプロイする」、「Oracle WebLogic Server にサンプルをデプロイする」を参照してください。
アプリケーション サーバーへのデプロイにはさまざまな方法がありますが、このチュートリアルでは、Tomcat Webアプリケーションマネージャを使用してリモートからデプロイする方法を説明します。
[Apache Tomcat インストール ディレクトリ]/conf/tomcat-users.xml を開いて <tomcat-users>
セクションに次の行を追加することで、新しいユーザーを追加します。
<user username="tomcat" password="tomcat" roles="tomcat, manager-gui"/> |
次のコマンドを実行してサーバーを実行します。
Windows
[Your apache-tomcat installation directory]/bin/startup.bat |
Linux
[Your apache-tomcat installation directory]/bin/startup.sh |
ブラウザーで次の URL を開き、ステップ 1 で設定したユーザー名およびパスワード (tomcat/tomcat) を入力します。
http://localhost:8080/manager/html |
[配備] をクリックします。次の URL でアプリケーションを使用できるようになります。
http://localhost:8080/calculator |
アプリケーション サーバーへのデプロイにはさまざまな方法がありますが、このチュートリアルでは、JBoss Web コンソールを使用してデプロイする方法を説明します。この手順は JBoss AS 7.1.1、JBoss EAP 6.4、WildFly 8.2 および 9.0 サーバーに適用できます。
Windows で add-user スクリプトを実行し、新しいユーザーを追加します。
[JBoss installation directory]/bin/add-user.bat |
ユーザーのタイプを選択するよう求められたら、Management User を選択します。
What type of user do you wish to add? a) Management User (mgmt-users.properties) b) Application User (application-users.properties) (a): a |
入力を求められたら、ユーザー名およびパスワードを入力し、Realm フィールドは空のままにします。
Enter the details of the new user to add. Realm (ManagementRealm) : Username : admin Password : 1adm-adm-adm |
次のスクリプトを実行してサーバーを実行します。
[JBoss installation directory]/bin/standalone.bat |
ブラウザーで次の URL を開き、ステップ 3 で設定したユーザー名およびパスワード (admin/1adm-adm-adm) を入力します。
http://localhost:9990/console/App.html#deployments |
デプロイメント リストで Calculator.war を有効化し、ブラウザーで次の URL を開きます。
http://localhost:8080/Calculator |
WebLogic アプリケーション サーバーにデプロイする方法は色々ありますが、このチュートリアルでは管理コンソールを使ってリモートでデプロイする方法を説明します。この操作はバージョン 12.2.1 および 10.3.6 で検証済みです。
このチュートリアルは、WebLogic Server がインストール済みであること、およびサーバー ドメインが作成済みであることを前提とします。
サンプル アプリケーションのメイン ディレクトリで、次のコマンドを実行します。
mvn package jtest:monitor |
ゴールはアプリケーション カバレッジの収集に必要な成果物を含む .zip パッケージを生成します。
javaagent
VM 引数の生成monitor.zip パッケージの内容をサーバー マシンに展開し、agent.bat (Windows) または agent.sh (Linux) スクリプトを実行します。javaagent フラグが生成され、コンソールに出力されます。
以下は javaagent
フラグの出力例です。
-javaagent:"E:\Parasoft\JTest\examples\calculator\target\jtest\monitor\monitor\agent.jar"=settings="E:\Parasoft\JTest\examples\calculator\target\jtest\monitor\monitor\agent.properties",runtimeData="E:\Parasoft\JTest\examples\calculator\target\jtest\monitor\monitor\runtime_coverage" |
すでに OpenTelemetry Java エージェントが設定されており、プロジェクトにアタッチされている場合、
|
アプリケーション サーバー から実行時データを収集します。(Tomcat、WildFly/JBos または Oracle WebLogic)
スクリプト ファイルを開きます。Windows
[Your apache-tomcat installation directory]/bin/catalina.bat |
Linux
[Your apache-tomcat installation directory]/bin/catalina.sh |
スクリプトの先頭に javaagent
フラグを追加します。
Windows
if "%1"=="stop" goto skip_instrumentation set JAVA_OPTS=%JAVA_OPTS% [generated javaagent flag] :skip_instrumentation |
Linux
if [ "$1" = "start" -o "$1" = "run" ]; then export JAVA_OPTS="$JAVA_OPTS [generated javaagent flag]" fi |
|
サーバーを再起動し、ブラウザーで次の URL を開きます。
http://localhost:8080/Calculator |
Jtest Agent は、mvn package jtest:monitor
ゴールが生成した -javaagent
フラグの runtimeData プロパティに従って実行時データを書き込みます。デフォルトでは、実行時データは [path to monitor dir]/monitor/runtime_coverage
ディレクトリに書き込まれます。
標準的な Java 階層クラス ローダーは、J2EE サーバーには適していません。なぜなら、JAR ファイルが使用されるかどうかにかかわらず、常にロードされるからです。アプリケーションは JAR ファイルを必要になったときにロードすることはできません。さらに、JAR ファイル間の可視性を制限するための適切なソリューションがありません。これによって、1 つのライブラリの 2 つのバージョンの間で競合が生じることがよくあります。また、すべてを含む巨大なクラス ローダーが作成される原因にもなります。
JBoss および WildFly サーバーは、これらの課題を解決するために JBoss モジュールを使用します。モジュール化された非階層的クラス ロードの実装は、JBoss OSGi および JBoss Java EE 実装の基本でもあります。
しかし、このクラス ローダーの優位性は、サーバーからの実行時データの収集という点では、新たな問題を引き起こします。Jtest Agent ライブラリはアプリケーション クラスから参照できなければなりませんが、JBoss モジュールによってそれが不可能になるのです。これが -javaagent
フラグを追加する理由です。このフラグを追加していない場合、ClassNotFoundException
が返されます。
そのため、jboss.modules.system.pkgs
システム プロパティも使用する必要があります。しかし、それにはまた別の問題もあります。JBoss は自身のスクリプト内でこのフラグを設定します。そのため JBoss と Jtest Agent の統合が複雑になります。これらのスクリプトが前に設定されたスクリプトを上書きする可能性があるからです。
起動スクリプトに -javaagent
フラグを追加します。
Windows
a) [Your jboss installation directory]/bin/standalone.conf.bat
を開き、ファイルの最後にある JAVA_OPTS に javaagent
フラグを追加します。
set "JAVA_OPTS=%JAVA_OPTS% [generated javaagent flag]" |
- ":JAVA_OPTS_SET
" はファイルの最後の行のままにします。
- -javaagent
フラグは 1 行で記述します (分割してはいけません)。
- Java 7 で動作するサーバーの場合、JAVA_OPTS に -XX:-UseSplitVerifier
フラグを追加します。
b) 次のセクションを変更して boss.modules.system.pkgs
設定に javaagent
クラスを追加します。
set "JAVA_OPTS=%JAVA_OPTS% -Djboss.modules.system.pkgs=org.jboss.byteman" |
変更後
set "JAVA_OPTS=%JAVA_OPTS% -Djboss.modules.system.pkgs=org.jboss.byteman,com.parasoft.jtest.instrumentation,shaded.com.parasoft.jtest.runtime" |
c) standalone.bat スクリプトを使用してサーバーを再起動します。
Linux
a) [Your jboss installation directory]/bin/standalone.conf
を開き、ファイルの最後にある JAVA_OPTS に javaagent
フラグを追加します。
set "JAVA_OPTS=$JAVA_OPTS [generated javaagent flag]" |
- -javaagent
フラグは 1 行で記述します (分割してはいけません)。
- Java 7 で動作するサーバーの場合、JAVA_OPTS に -XX:-UseSplitVerifier
フラグを追加します。
b) 次のセクションを変更して boss.modules.system.pkgs
設定に javaagent
クラスを追加します。
JBOSS_MODULES_SYSTEM_PKGS="org.jboss.byteman" |
変更後
JBOSS_MODULES_SYSTEM_PKGS="org.jboss.byteman,com.parasoft.jtest.instrumentation,shaded.com.parasoft.jtest.runtime" |
c) standalone.sh
スクリプトを使用してサーバーを再起動します。
Web ブラウザーで次の URL を開きます。
http://localhost:8080/Calculator/ |
Jtest Agent は Jtest の target 内の maven ディレクトリ (target/jtest) に runtimeData.data
ファイルを作成します。
古いバージョンの JBoss では、jboss.modules.system.pkgs プロパティを設定する必要はありません。
Windows
[Your jboss installation directory]/bin/standalone.conf.bat を開き、ファイルの最後にある JAVA_OPTS に javaagent フラグを追加します。
set "JAVA_OPTS=%JAVA_OPTS% [generated javaagent flag]" |
- ":JAVA_OPTS_SET
" はファイルの最後の行のままにします。
- -javaagent
フラグは 1 行で記述します (分割してはいけません)。
run.bat
スクリプトを使用してサーバーを再起動します。Linux
[Your jboss installation directory]/bin/standalone.conf.bat
を開き、ファイルの最後にある JAVA_OPTS に javaagent
フラグを追加します。
set "JAVA_OPTS=$JAVA_OPTS [generated javaagent flag]" |
- -javaagent
フラグは 1 行で記述します (分割してはいけません)。
run.sh
スクリプトを使用してサーバーを再起動します。スクリプト ファイルを開きます。Windows
[Your weblogic installation directory]/user_projects/domains/[your domain]bin/startWebLogic.cmd |
Linux
[Your weblogic installation directory]/user_projects/domains/[your domain]bin/startWebLogic.sh |
START WEBLOGIC コメントで始まるセクションで、JAVA_OPTIONS に -javaagent
フラグを追加します。-javaagent
フラグは 1 行で記述します (分割できません)。
Windows
@REM START WEBLOGIC set JAVA_OPTIONS=%JAVA_OPTIONS% [generated javaagent flag] |
Linux
# START WEBLOGIC export JAVA_OPTIONS=$JAVA_OPTIONS [generated javaagent flag] |
サーバーを再起動し、ブラウザーで次の URL を開きます。
http://localhost:7001/Calculator |
Jtest Agent は、mvn package jtest:monitor
ゴールが生成した -javaagent
フラグの runtimeData
プロパティに従って実行時データを書き込みます。デフォルトでは、実行時データは [path to monitor dir]/monitor/runtime_coverage
ディレクトリに書き込まれます。
Calculate Application Coverage テスト コンフィギュレーションを実行します。-static
および -runtime
パラメーターを使って、static_coverage.xml ファイルと実行時カバレッジ データのディレクトリを渡します。
java -jar jtestcov.jar -static [path to static_coverage.xml file] -runtime [path/dir] |
static_coverage.xml ファイルへのパスは、このファイルを含む monitor.zip パッケージの内容を展開したディレクトリでなければなりません。
runtime_coverage ディレクトリへのパスは、-javaagent
VM 引数の runtimeData
プロパティとしてコンソールに出力されます。