Cosminexus V9 アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)

[目次][用語][索引][前へ][次へ]

3.6.7 SQL Serverと接続する場合の前提条件と注意事項

ここでは,SQL Serverと接続する場合の前提条件と注意事項について説明します。

<この項の構成>
(1) SQL Serverの場合の前提条件
(2) SQL Serverと接続する場合の注意事項
(3) SQL Server 2005に接続時の注意事項
(4) SQL Server 2008またはSQL Server 2012に接続時の注意事項

(1) SQL Serverの場合の前提条件

SQL Serverの場合の前提条件について示します。

なお,SQL Serverと接続できるのはWindowsの場合だけです。

(2) SQL Serverと接続する場合の注意事項

ここでは,SQL Serverと接続する場合のシステムでの文字コード変換に関する注意事項とDB Connector設定時の注意事項について説明します。

(a) システムでの文字コード変換時の注意

SQL Server接続時,データベースに日本語文字コードを含むデータを格納する場合,システムでの文字コード変換について考慮する必要があります。ここでは,システムでの文字コード変換の概要と,文字化けを回避するために設定時に注意することについて説明します。

Javaでは日本語文字コードはUnicodeで表現されます。SQL Serverを使用する場合,Webクライアントとアプリケーションサーバ間,およびアプリケーションサーバとSQL Server間の処理で文字コード変換が実施されます。

SQL Serverを使用する場合の文字コード変換の概要を次の図に示します。

図3-19 SQL Serverを使用する場合の文字コード変換の概要

[図データ]

図中の1.〜4.について説明します。

  1. アプリケーションサーバがWebクライアントからデータを受信する時に,外部文字コードからUnicodeに変換されます。
  2. アプリケーションサーバがデータをSQL Serverに格納する時に,Unicodeからデータベース格納文字コードに変換されます。
  3. SQL Serverに格納されたデータをアプリケーションサーバが取得する時に,データベース格納文字コードからUnicodeに変換されます。
  4. アプリケーションサーバがデータをWebクライアントに送信する時に,Unicodeから外部文字コードに変換されます。

SQL Serverを使用する場合,外部文字コードとデータベース格納文字コードの組み合わせや,文字コード変換を実施する場合に使用されるコンバータの種類によっては,文字化けなどの問題が発生することがあります。このような文字化けを回避するためには,文字コードの設定に注意する必要があります。

SQL Serverでは次の表に示す文字データ型をサポートしています。SQL Serverを使用する場合,Unicodeデータ型を使用することによって,文字コード変換時に発生する文字化けを防ぐことができます。

表3-30 SQL Serverでサポートする文字データ型

カテゴリ 文字データ型
Unicodeデータ型 nchar,nvarchar,ntext
非Unicode文字データ型 char,varchar,text

次に,SQL Serverでのデータベース格納文字コードとして,Unicodeデータ型を使用する場合と,非Unicodeデータ型を使用する場合の文字コード変換について説明します。

Unicodeデータ型を使用する場合
DB ConnectorのプロパティのsendStringParametersAsUnicodeキーにtrue(デフォルト値)を設定している場合,文字化けは発生しません。falseを設定した場合,外部文字コードにShift_JIS,EUC-JP,ISO-2022-JP,またはUTF-8を使用すると文字化けが発生することがあります。

非Unicode文字データ型を使用する場合
外部文字コードの設定によって,文字化けが発生することがあります。
  • 外部文字コードにWindows-31Jを使用する場合
    文字化けは発生しません。
  • 外部文字コードにShift_JIS,EUC-JP,またはISO-2022-JPを使用する場合
    次に示す文字などで文字化けが発生します。

    [図データ]

  • 外部文字コードにUTF-8を使用する場合
    次に示す文字などで文字化けが発生します。

    [図データ]

(b) DB ConnectorのselectMethodプロパティ設定時の注意

DB ConnectorのselectMethodプロパティ(<config-property-name>の項目名)の値に「direct」を設定した場合の注意事項を次の表に示します。

表3-31  DB ConnectorのselectMethodプロパティ設定時の注意事項

条件 注意事項
コネクションの障害検知機能が有効 コネクションに障害が発生していても正常であると誤診することがあります。その結果,ユーザアプリケーションプログラムに障害が発生したコネクションを返すことがあるので,コネクションの障害検知機能を使用しないでください。障害が発生したら,cjclearpoolコマンドを実行してください。
Statement,PreparedStatement,CallableStatementを複数同時に生成 SQL ServerのJDBCドライバによって,同時に生成したステートメントごとにSQL Serverへの接続が生成されます。
また,ステートメントプーリング機能を使用する場合には,プールされているステートメントごとに接続が生成され,メモリを多く消費するので注意してください。

(3) SQL Server 2005に接続時の注意事項

SQL Server 2005に接続する場合,コネクションプーリング機能を必ず使用してください。

また,SQL Server JDBC Driver 3.0の挙動によって,次の現象が発生することがあります。

(a) データベースとのセッションが切断されないで,使用されないセッションが残ってしまう。

GC(ガーベージコレクション)が発生するまで,データベースとのセッションが切断されないで,使用されないセッションが残ってしまうことがあります。この現象を回避するため,javagcコマンドを実行してください。

なお,この現象は次の条件で発生します。

次の操作を行ったとき。
  • DB Connectorの接続テスト
  • DB Connectorの停止
  • cjclearpoolコマンドの実行

次の機能が働いたとき。
  • メソッドキャンセル機能
    メッセージKDJE31016-Wが出力されます。
  • トランザクションタイムアウト機能
    メッセージKDJE31002-Wが出力されます。
  • コネクション数調節機能
    メッセージKDJE49532-Iが出力されます。
  • コネクションスイーパ機能
    DB Connectorが出力するログ・トレースのレベルをWARNINGまたはINFORMATIONに設定することによって,コネクションスイーパ機能が働いたときを含め,マネージドコネクションが破棄されたときメッセージKDJE50010-Iが出力されます。
(b) コネクションの取得に失敗する。

上記(a)のデータベースとのセッションが切断されないことに起因して,データベースとのセッションの数がデータベースの同時ユーザ接続の最大数に達した場合には,新規セッションが生成できなくなります。ユーザプログラムからjavax.sql.DataSourceインタフェースのgetConnectionメソッドを実行したときに,java.sql.SQLExceptionが発生することがあります。この現象を回避するため,データベースの同時ユーザ接続の最大数を0(無制限)に設定してください。

なお,この現象はデータベースの同時ユーザ接続の最大数を1以上の値に設定した場合に発生します。

(4) SQL Server 2008またはSQL Server 2012に接続時の注意事項

SQL Server 2008またはSQL Server 2012に接続する場合の注意事項を次に示します。なお,SQL Server 2005使用時の注意事項はどれも該当しません。