データ・ソースの JNDI 直接検索方式および JNDI 間接検索方式
データ・ソースの検索では、Java™ Naming and Directory Interface (JNDI) 名 (jdbc/DataSource など) の直接方式または間接方式を使用することができます。
Direct
[10/5/07 11:40:38:468 CDT] 0000002e ConnectionFac W J2CA0294W: Direct JNDI lookup of resource jdbc/myDatasource.
次のデフォルト値が使用されます:
[Resource-ref CMConfigData key items]
res-auth: 1 (APPLICATION)
res-isolation-level: 0 (TRANSACTION_NONE)
res-sharing-scope: true (SHAREABLE)
loginConfigurationName: null
loginConfigProperties: null
[Resource-ref non-key items]
isCMP1_x: false (not CMP1.x)
isJMS: false (not JMS)
commitPriority 0
Java EE Name: not set
Resource ref name: not set
isCMP: false (not set)
これらの属性のうち、最初の属性 res-auth では、実行される認証タイプを規定します。このデフォルト設定が意味しているのは、 アクティベーション・スペックを指定しない場合、または getConnection 呼び出しでユーザー名とパスワードを指定しない場合に、 コンポーネント管理認証別名が使用されるということです。 すなわち、コンテナー管理別名が使用されないことを示します。
設定の 2 番目の res-isolation-level は、分離レベルが「デフォルト」に設定されていることを示します。エンタープライズ Bean の場合、これを Enterprise JavaBeans (EJB) の Bean 自体に設定することができます。接続を取得するサーブレットの場合、この結果は、分離レベル Repeatable_Read になります。これは、かなり制限された分離レベルです。これは、パフォーマンスの低下をもたらす可能性があります。 アプリケーション要求で、制限の少ない分離レベルを使用する場合よりも 多くの行がロックされるからです。
最後の res-sharing-scope は Shareable に設定されていますが、これは共有可能接続が使用されることを意味します。 アプリケーションのなかには、共有可能接続を使用できるものがあります。それ以外の アプリケーションでは、特に、単一の service() メソッド内で複数の接続を取得するサーブレットでは、 共有可能接続の使用は好ましくありません。
これらの設定に付随して起こりうるトラブル等を回避するためには、 直接 JNDI 名の代わりに間接 JNDI 名を使用するようにアプリケーションを変更することが必要です。 また、リソース参照を作成する必要もあります。
間接
デフォルト値とは異なる値を使用するには、アセンブリー・ツールを使用してリソース参照を定義します。リソース参照は、アセンブリー・ツールを使用して、EJB デプロイメント記述子 (ejb-jar.xml)、Web デプロイメント記述子 (web.xml)、またはアプリケーション・クライアント・デプロイメント記述子 (application-client.xml) エディターで作成することもできます。 リソース参照を定義した後で、(java:comp/env コンテキストを使用して) JNDI 間接検索を実行することができます。これで、リソース参照で定義されたリソース参照プロパティーの値が使用され、J2CA0122I メッセージは表示されなくなります。詳しくは、リソース参照の作成に関するトピックを参照してください。