質問
⚠️ この事例は公開されてから1年以上経過しています。 情報が古い可能性がありますので、ご注意ください。
🕓 事例公開日 : 2024-08-27
【背景】
現在、外部データベースへの接続にJDBCドライバを使用しており、従来はサーバー上の特定ディレクトリに配置していた。今後は推奨される方法として、WEB-INF/lib配下への配置とresin-web.xmlファイルでのデータソース設定に切り替えたい。この移行にあたり、ドライバのバージョンアップ方法、設定の詳細、プリペアドステートメントキャッシュの扱いについて確認したい。Q1. JDBCドライバのバージョンアップ手順について
Jugglingでドライバファイルをアップロードした後、バージョンアップする際の手順を知りたい。新しいファイルをセットしてデプロイすれば古いファイルは自動的に削除されるのか、それとも同じファイル名で上書きする必要があるのか。Q2. JDBCドライバのファイル名とデータベース製品の紐付けについて
JDBCドライバのファイル名は任意でよいのか。特定のデータベース製品(SQL Server等)がどのドライバファイルを使用するかは、どのような仕組みで決定されるのか。Q3. JNDI名の移行について
現在システム管理サイトのデータソース設定で使用しているJNDI名を、resin-web.xmlファイルに同じ名前で設定してよいか。また、既存のデータソース設定を削除する必要がある場合、その手順を教えてほしい。Q4. 詳細設定プロパティの移行先について
システム管理サイトで設定していた「詳細設定プロパティ」「接続検証プロパティ」「カスタムプロパティ」は、resin-web.xmlではどのように記述すればよいか。Q5. プリペアドステートメントキャッシュ設定について
SQL Serverのデータソースでprepared-statement-cache-sizeタグの設定は必須か。また、テナントデータソースで値が「0」に設定されているのはキャッシュによる弊害を避けるためか。製品アップデート時に毎回設定を変更する必要があるのか。Q6. resin-web.xmlで設定したデータソースの表示について
resin-web.xmlでシェアードデータベースを登録した場合、システム管理サイトのデータソース設定画面で「接続検証プロパティ」や「カスタムプロパティ」が表示されないが、これは正常な動作か。回答
A1. JDBCドライバのバージョンアップ手順について
Jugglingプロジェクト上で古いドライバファイルを削除し、新しいファイルを追加してください。その状態でWARファイルを出力し、モジュールリリースを実施することで、ファイルが置き換わりバージョンアップが完了します。A2. JDBCドライバのファイル名とデータベース製品の紐付けについて
JDBCドライバの仕様に関する内容は、ミドルウェア製品固有の仕様となるため、弊社サポート範囲外となります。詳細はJDBCドライバの提供元にご確認ください。参考:https://aws.accel-mart.com/support_inquiry_guide/texts/inquiry_process/support_range.html
A3. JNDI名の移行について
JNDI名はデータソース設定画面とresin-web.xmlの両方で設定可能ですが、重複しないように設定する必要があります。同じJNDI名を使用する場合は、既存のデータソース設定を削除してから、resin-web.xmlで設定してください。なお、データソース設定画面で登録したデータソースは、画面上からは更新・削除ができない仕様となっています。
削除手順:
1. ストレージファイルアクセス用ユーザでStorageサーバにアクセスし、以下のファイルをダウンロード(退避)後、削除してください。
・system/storage/conf/data-source-mapping-config.xml
・system/storage/conf/resin-resource-config.xml
2. APサーバを再起動してください。 参考:サーバを再起動する
作業前にオフラインバックアップの取得を推奨します。
A4. 詳細設定プロパティの移行先について
resin-web.xmlでの設定方法は以下のドキュメントをご参照ください。参考:intra-mart Accel Platform 設定ファイルリファレンス - resin-web 設定
SQL Serverのカスタムプロパティ(selectMethod、sendTimeAsDatetime等)については以下をご確認ください。
参考:Microsoft SQL Server
設定例:
<driver><type>com.microsoft.sqlserver.jdbc.SQLServerConnectionPoolDataSource</type><url>jdbc:sqlserver://HOSTNAME:PORT;DatabaseName=DB_NAME</url><user>username</user><password>password</password><selectMethod>cursor</selectMethod><sendTimeAsDatetime>false</sendTimeAsDatetime><encrypt>true</encrypt><trustServerCertificate>true</trustServerCertificate></driver>
接続検証プロパティについても、上記ドキュメントに記載されています。
A5. プリペアドステートメントキャッシュ設定について
プリペアドステートメントキャッシュ設定を「0」のまま運用することに問題はありません。この設定は推奨設定ですが必須ではありません。データベースのレスポンスに問題がない場合は、0のまま運用しても構いません。パフォーマンスチューニングの一つの手段として、必要に応じて適切な値をご検討ください。
テナントデータベースとシェアードデータベースの違い:
テナント環境セットアップ時に設定値を0に変更する対応が必要なのは、テナントデータベース(Accel-Mart Plus環境開通時に用意されたPostgreSQL上のDB)の場合です。
今回追加された外部データベースはシェアードデータベースとして登録されているため、テナント環境セットアップ時に設定を変更する対応は不要です。
参考:Resin で PreparedStatement の キャッシュサイズに大きな値を指定している場合にテナント環境セットアップが失敗する