このセクションでは、Parasoft JDBC ドライバーに関連して発生する問題のトラブルシューティングに役立つ情報を説明しています。
セクションの内容:
大文字と小文字の区別
ドライバー プロパティは大文字と小文字を区別するため、大文字の使用に気を付ける必要があります。たとえば、VirtualizeServerURL
ではなくVirtualizeServerUrl
を使用する必要があります。
ドライバーの通信とプロバイダー
何か問題がある場合、ドライバーと Virtualize がどのように通信するかを知っておくと役に立つことがあります。
Parasoft JDBC ドライバーのデフォルト (ポーリング) プロバイダーは、単純な HTTP 接続を使用して、(Virtualize Server URL プロパティを利用して) 指定の間隔 (デフォルトは 5000 ミリ秒) で JDBC 接続設定について Virtualize をポーリングします。
JMS プロバイダーを使用したい場合 (たとえば大規模なデプロイの場合、ネットワーク トラフィックを削減するために、あるいは Virtualize との非同期通信を用いるために)、システムプロパティ parasoft.virtualize.configuration.provider
を jms
に設定します。接続が確立されると、Parasoft JDBC ドライバーと Virtualize は JMS メッセージを交換してドライバーを Virtualize に登録し、Virtualize から設定の詳細情報 (モードの変更など) を取得します。JMS を使用することで、ドライバーと Virtualize のどちらも独立して機能することができます。たとえば、Parasoft JDBC ドライバーは Virtualize サーバーがシャットダウンされているときでもパススルー モードを継続することができます。テスト対象アプリケーションがシャットダウンされると、再び起動されたときにドライバーは Virtualize から Parasoft JDBC ドライバー設定を取得します。
別の方法として、下記で説明するローカル プロバイダーを使用できます。
ローカルでの設定
Virtualize サーバー ビューに、Parasoft JDBC ドライバーに関連付けられた JDBC コントローラーが表示されない場合、Virtualize GUI からリモートで構成するのではなく、次の操作を行ってローカルで構成することができます。
- システムプロパティ
parasoft.virtualize.configuration.provider
にlocal
を設定します。このように設定すると、特定のベンダーに適用可能なデータ ソース プロパティまたはシステム プロパティを使用してドライバーを設定できます。また、Parasoft JDBC ドライバーが Virtualize サーバーに登録されなくなります。これは、Virtualize サーバー ビューまたは Environment Manager からドライバーを制御できなくなることを意味しています。- 前のベンダー別の構成のセクションで説明したようにドライバー プロパティ (virtualizeServerUrl および virtualizeGroupID) やシステム プロパティ (parasoft.virtualize.group.id および parasoft.virtualize.server.url) を指定する代わりに、次に概要を説明するシステムプロパティまたはドライバープロパティを使用します (適用可能な場合)。詳細については、以下のセクションを参照してください。
- 前のベンダー別の構成のセクションで説明したようにドライバー プロパティ (virtualizeServerUrl および virtualizeGroupID) やシステム プロパティ (parasoft.virtualize.group.id および parasoft.virtualize.server.url) を指定する代わりに、次に概要を説明するシステムプロパティまたはドライバープロパティを使用します (適用可能な場合)。詳細については、以下のセクションを参照してください。
- 記録の準備ができたら、「ローカル モードでの仮想化モードの切り替え」の説明に従って記録を設定します。
テスト対象アプリケーションは以下のいずれかを使用していなければなりません。
- ローカルで制御された Parasoft JDBC ドライバー
- リモートで制御された Parasoft JDBC ドライバー
- システム プロパティ
テスト対象アプリケーションは一度に上記のうちの 1 つだけを使用できます。
ドライバーの実装クラスで使用するプロパティ
ベンダーに特化したドライバー クラス (上で説明した実装クラスのうち「汎用的な/その他のドライバー」を除くすべてのもの) を使用している場合、アプリケーション サーバーのフレームワークを通じて次のプロパティを適用できます。アプリケーション サーバーは、プロパティ名と同じ名前の set メソッドを呼び出すことによって、Parasoft JDBC ドライバー (または他のすべてのドライバー) にこれらのカスタム プロパティを設定します。たとえば、logLevel という名前のプロパティがある場合、アプリケーション サーバーはリフレクションを使用して 1 つの文字列引数を持つ setLogLevel というメソッドを呼び出します。
Parasoft JDBC ドライバーを設定する際は、元のドライバーが必要とするすべてのプロパティを必ず提供してください。Parasoft JDBC ドライバーの実装クラスは元のドライバーの実装クラスを拡張するか、それにデリゲートしますが、それによってプロパティを元のドライバーに渡します。JDBC ドライバーにプロパティが適用される方法は、アプリケーション サーバーによって異なります。特定のアプリケーション サーバーに関する情報については、前のセクションを参照してください。
元のドライバーの実装が必要とする可能性があるプロパティに加えて、Parasoft JDBC ドライバーに次のプロパティを提供する必要があります。
ドライバー プロパティ | オプション |
---|---|
virtualizeMode |
|
logFilePath | <path> |
logDestinationType |
|
logLevel |
|
virtualizeServerUrl | <URL> |
virtualizeMode
record: Parasoft JDBC ドライバーを記録モードに設定します。Parasoft JDBC ドライバーは JDBC 呼び出しを元のドライバー実装クラスに渡し、SQL クエリーおよび元のドライバーから返された ResultSet データをキャプチャします。キャプチャされたデータは、virtualizeServerUrl プロパティ値の場所にある Virtualize サーバーに送られます。
virtualize: Parasoft JDBC ドライバーを仮想モードに設定します。Parasoft JDBC ドライバーは JDBC 呼び出しを Parasoft Virtualize サーバーに転送し、Virtualize サーバーから返された ResultSet データをアプリケーションに返します。このモードは、記録がすでに行われており、Virtualize サーバーに仮想アセットが構成されていて、Parasoft JDBC ドライバーに応答できることを前提としています (詳細については「仮想アセットのデプロイ」を参照してください)。
passthrough: Parasoft JDBC ドライバーは JDBC 呼び出しを元のドライバー実装クラスに渡し、データのキャプチャまたは記録は行いません。このモードは、簡単に Parasoft JDBC ドライバーをオフにし、Parasoft JDBC ドライバーが介在していない元の構成に近い状態にするために存在します。ただし、依然として JDBC 呼び出しはドライバーを経由し、Parasoft JDBC ドライバーが中間に存在していることに注意してください。
hybrid: このモードでは、Parasoft JDBC ドライバーは対応する仮想データが見つからなった場合を除くと Virtualize モードと同じように動作します。仮想データが見つからなかった場合、Parasoft JDBC ドライバーは JDBC 呼び出しを元のドライバー実装クラスに渡し、データのキャプチャまたは記録は行いません。
failover: このモードでは、失敗 (SQL 例外) が発生しない限り、Parasoft JDBC ドライバーは JDBC 呼び出しを元のドライバー実装クラスに渡します。失敗が発生した場合、Parasoft JDBC ドライバーが受け取った JDBC 呼び出しは Parasoft Virtualize サーバーにリルートされ、Virtualize サーバーから受け取った ResultSet データがアプリケーションに返されます。
logFilePath
ログの出力先の種類にファイルが指定されており、ログ レベルが 1 以上の場合に適用できます。Parasoft JDBC ドライバー ロギングが保存されるテキスト ファイルへのフル パスを指定します。これは内部的なドライバーのロギング情報の場所であり、データベースのデータが記録される場所ではありません。
このオプションは、実際の JDBC ドライバーから取得されたイベントや例外など、デバッグ目的で出力されるローカルなログ ファイルの場所を指定します。記録されたデータが保存されるファイルの場所ではありません。記録されたデータのファイルは常に仮想アセット プロジェクトに保存されます。
logDestinationType
ログの出力先の種類設定は、ドライバーのロギング データを保存または出力する場所を指定します。これは内部的なドライバーのロギング情報の場所であり、データベースのデータが記録される場所ではありません。このオプションを設定すると、以降のドライバーのロギング データは指定された出力先に送られます。
file: logFilePath プロパティで指定された場所に保存します。
server: ロギング データをリモートの Parasoft Virtualize サーバーに送信し、送信先のサーバーでデータを参照できるようにします。このオプションは、Parasoft JDBC ドライバーがインストールされたアプリケーション サーバーのローカルなログ ファイルにアクセスしなくても構成のデバッグを行えるため便利です。ロギング イベントはバッファーされ、5 秒ごとにまとめて送信されま す。詳細については「JDBC 操作のロギング設定」を参照してください。
stdout: コンソールの標準出力に Parasoft JDBC ドライバーのロギング イベントを転送します。
stderr: コンソールの標準エラー出力に Parasoft JDBC ドライバーのロギング イベントを転送します。
logLevel
Parasoft JDBC ドライバーのロギングの詳細レベル (冗長性) を指定します。logDestinationType プロパティで指定された場所にログが出力されます。
0: オフです。どこにもロギングされません。
1: エラーだけをログに記録します。エラーにはスタック トレースが含まれます。
2: エラーおよび問題のデバッグや解決に役立つ通知イベントをログに記録します。
3: 各ロギング エントリにスタック トレースを含めます。
4: Parasoft JDBC ドライバーと Virtualize サーバーの間で通信されたトラフィックを含めます。ただし、スタック トレースは含めません。
5: 3 と 4 を合わせたデータを含めます。
レベル 3 または 5 を使用する場合はよく注意して、限られた環境およびシナリオでだけ使用してください。各通知ログ エントリにスタック トレースを含めると、ログ ファイルのサイズが短期間で大きくなりがちです。
virtualizeServerUrl
Parasoft Virtualize Server のホスト名を指定します。書式は http://[Virtualize Server host name or IP address]:9080 です。
9080 はデフォルトのポート番号です。Virtualize サーバーを別のポート番号で構成している場合にだけ、このポート番号を変更してください。
ドライバー固有の構成
Parasoft JDBC ドライバーが記録中に正しく元のドライバーに処理を委譲できるよう、以下のプロパティを指定する必要があります。プロパティは、使用されているベンダーによって異なります。
IBM DB2 JCC Driver
まず、Parasoft JDBC ドライバーの JDBC プロバイダーの設定を参照し、( 元のドライバーのデータ ソースからコピーしたとおりに) クラスパスが追加されていることを確認します。一般的に、次のようになります。
${DB2UNIVERSAL_JDBC_DRIVER_PATH}/db2jcc.jar
${UNIVERSAL_JDBC_DRIVER_PATH}/db2jcc_license_cu.jar
${DB2UNIVERSAL_JDBC_DRIVER_PATH}/db2jcc_license_cisuz.jar
同様に、ネイティブ ライブラリのパスもコピーする必要があります。デフォルトは
${DB2UNIVERSAL_JDBC_DRIVER_NATIVEPATH} です。
次に、Parasoft JDBC ドライバーのデータ ソース構成のカスタム プロパティに最低でも以下のプロパティが定義されていることを確認します。
- databaseName (string)
- driverType (integer)
- portNumber (integer)
- serverName (string)
プロパティの値は元のドライバーの JDBC プロバイダー設定から取得できます。DB2 ドライバー プロパティの詳細については http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/ad/rjvdsprp.htm を参照してください。
Apache Derby
Parasoft JDBC ドライバーのデータ ソース設定のカスタム プロパティに最低でも以下のプロパティが定義されている必要があります。
- databaseName (string)
プロパティの値は元のドライバーの JDBC プロバイダー設定のカスタムプロパティ セクションから取得できます。
汎用的な実装で使用するプロパティ
「汎用的な/ その他のドライバー」を使用している場合、Parasoft JDBC ドライバー実装は次のシステム プロパティを使用します。
システム プロパティ | 対応するドライバープロパティ (詳細は前述のとおり) |
---|---|
parasoft.virtualize.configuration.provider | 対応なし |
parasoft.virtualize.mode | virtualizeMode |
parasoft.virtualize.log.file.location | logFilePath |
parasoft.virtualize.log.destination | logDestinationType |
parasoft.virtualize.log.level | logLevel |
parasoft.virtualize.server.url | virtualizeServerUrl |
parasoft.virtualize.driver.proxy.direct | true|false (システムプロパティ固有) |
parasoft.virtualize.driver.register.jdbcproxydriver.in.drivermanager | 対応なし |
各プロパティの詳細については、上の表で対応するドライバー プロパティを確認し、前のセクション (「ドライバーの実装クラスで使用するプロパティ」) の該当プロパティを参照してください。
parasoft.virtualize.configuration.provider
Virtualize GUI からリモートで構成するのではなく、ローカルで Parasoft JDBC ドライバーを設定する場合、local
に設定します。
parasoft.virtualize.driver.proxy.direct
デフォルトは false です。このプロパティは、Parasoft JDBC ドライバーが元のドライバーへの委譲動作を確立する方法を指定します。このプロパティは、次の条件にしたがって設定します。
- アプリケーションが java.sql.DriverManager を使用して java.sql.Driver のインスタンスを作成している場合、
false
が一般的な設定です。 - ドライバーが直接インスタンス化している場合、
true
が一般的な設定です。
parasoft.virtualize.driver.register.jdbcproxydriver.in.drivermanager
デフォルトは false です。このプロパティは、Parasoft JDBC ドライバーが DriverManager.registerDriver() メソッドを使用して自身をランタイムの java.sql.DriverManager に登録するかどうかを指定します。このプロパティは、次の条件にしたがって設定します。
- アプリケーションが java.sql.DriverManager を使用して java.sql.Driver のインスタンスを作成している場合、true が一般的な設定です。ParaBank サンプルアプリケーションはこれにあてはまるため、このプロパティを
true
に設定します。 - ドライバーが WebSphere や WebLogic などの Web アプリケーション環境で使用されている場合、このプロパティは
false
のままにしておくべきです。
ローカル モードでの仮想化モードの切り替え
ローカル モードでは、仮想化モードの切り替え手順は使用しているアプリケーション サーバーによって異なります。
- WebSphere
- WebLogic 9.2
- webMethods
- WebLogic 10.3 (11g)
- Stand-Alone Applications or Other Application Servers
WebSphere
Parasoft JDBC ドライバーを使用するデータ ソースを設定すると、仮想化モードまたは記録モードの間で切り替えを行うことができます。モードを切り替えた後は、アプリケーション サーバーを再起動する必要があります (または、再起動の必要をなくすために追加の手順を行う必要があります)。
WebSphere アプリケーション サーバーのデータ ソースは、JDBC 接続のプールを作成します。そのため、Parasoft JDBC ドライバーはモードを直ちに切り替えることができますが、切り替えはドライバーから要求される新しい接続にしか適用されません。既存の接続は切り替える前のモードのままです。この問題を回避して、接続がリサイクルされるのを待ったりサーバーを再起動させることなく Parasoft JDBC ドライバーモードの変更が直ちに適用されるようにするには、開発環境でアイドル接続が破棄される周期を短くします。
- WebSphere の管理コンソールで Parasoft JDBC ドライバー データ ソースに移動します。
- [Connection Pool Properties] をクリックします。
- [Reap time] および [Unused timeout] プロパティをより小さい値 (たとえば 15 秒以下など) に変更して [OK] をクリックします。
- 変更が反映されるようサーバーを再起動します。
接続プールの設定の変更が反映されたら、カスタム プロパティ virtualizeMode を変更し、再起動を行わずに Parasoft JDBC ドライバー モードの変更を適用できます。ただし、以下の条件があります。
- プロパティの変更をドライバーに適用するために [Test connection] をクリックする必要があります。
- 古いモードが設定された既存の接続が破棄されるまでの最低 15 秒間、このデータ ソースを経由して JDBC アクティビティが実行されないこと。
WebLogic 9.2
WebLogic 9.2 ではサーバーの再起動が必要です。
- WebLogic をシャットダウンします。
- 「WebLogic 環境のセットアップ」で編集した startWebLogic 起動スクリプトを編集します。
parasoft.virtualize.mode
プロパティの値を任意のモードに変更します (詳細については「ドライバーの実装クラスで使用するプロパティ」を参照してください)。- 起動スクリプトを使用して WebLogic サーバーを起動します。
webMethods
Parasoft JDBC ドライバーを使用するデータ ソースを設定すると、次の操作を行ってモード (または他の任意のドライバー プロパティ) を変更できます。
- IS 管理 Web インターフェイスに移動します。
- [Adapters] セクションを展開し、[JDBC Adapter] をクリックします。
- JDBC アダプター接続を無効にします。
- [Edit] アイコンをクリックします。
- 必要に応じてプロパティを変更します。
- モード (record/virtualize/passthrough/hybrid/failover) は
virtualizeMode
プロパティによって制御されます。詳細については「virtualizeMode」を参照してください。
- モード (record/virtualize/passthrough/hybrid/failover) は
- JDBC アダプターを再び有効にします。
サーバーを再起動する必要はありません。
WebLogic 10.3 (11g)
WebLogic 10.3 ではサーバーを再起動する必要はありません。
- [Data Sources] セクションの下で新しく作成されたデータ ソースをクリックします。
- [Connection Pool] タブを開き、必要に応じ
virtualizeMode
プロパティ (またはその他の任意のプロパティ) を変更します。 - 次のメッセージが表示されたら、
Change Center に進んでデータ ソースを再開します。
変更がアクティブになります。
データ ソース接続をテストしたとき、Virtualize サーバーが停止していたり (Parasoft JDBC ドライバーが記録、仮想化、またはハイブリッドモードの場合)、設定に誤りがあるにもかかわらず「Connection test succeeded」が表示される場合があります。Virtualize コンソールを参照し、記録モードで SQL クエリーが受信されていることを確認するか、Parasoft JDBC ドライバー ログ ファイルを参照してエラーがないことを確認してください。
スタンドアロン アプリケーションまたはその他のアプリケーション サーバー
必要な設定を行ったら、parasoft.virtualize.mode
プロパティを変更して記録または仮想化モードの間でモードを切り替えることができます。
システム プロパティを使用した Parasoft JDBC ドライバーの設定
使用しているデータ ソース コンテナーではカスタム プロパティを設定できない場合、システム プロパティを使用して Parasoft JDBC ドライバーを構成できます。この場合も Parasoft JDBC ドライバーは Virtualize サーバーに登録されます。Virtualize サーバービューまたは Environment Manager から Parasoft JDBC ドライバーを制御できます。
システム プロパティを使用して Parasoft JDBC ドライバーを設定するには、次の操作を行います。
- システムプロパティ
parasoft.virtualize.configuration.provider
を設定します。 parasoft.virtualize.group.id
およびparasoft.virtualize.server.url
システム プロパティを設定します。詳細については、「汎用的な実装で使用するプロパティ」を参照してください。- 記録の用意ができたら、[Virtualize サーバー] ビューまたは Environment Manager を使用して Parasoft JDBC ドライバー モードを切り替えます (切り替えの手順については「Parasoft JDBC ドライバー モードの切り替え」を参照してください)。
JDBC URL を使用した Parasoft JDBC ドライバー データ ソースの構成
使用しているデータ ソース コンテナーではカスタム プロパティを設定できない場合、JDBC URL にプロパティを追加することで JDBC データ ソースを構成できます。次のパターンを使用すると、すべての環境で必要なドライバー/システム プロパティを JDBC URL に指定できます。
jdbc:parasoft:proxydriver:<property name>=<property value>&<property name>=<property value>:@<original jdbc url>
URL の先頭に次を追加する必要があります。
jdbc:parasoft:proxydriver:
- プロパティはアンパサンド (
&
) で区切られた名前と値のペアです。Parasoft プロパティの末尾にはコロンおよびアットマーク (:@
) を付ける必要があります。 - URL の最後のアイテムは元の JDBC URL でなければなりません。
たとえば、プロパティを指定したデータ ソースを使用して Oracle に接続するための URL は次のようになります (必須プロパティ virtualizeGroupId
および virtualizeServerUrl
が設定されていることを前提とします)。
jdbc:parasoft:proxydriver:virtualizeGroupId=parasoft&virtualizeServerUrl=http://localhost:9080:@jdbc:oracle:thin:scott/tiger@localhost:1521:orcl