- Home
- » よくある質問(FAQ)
- » 技術情報
- » Enterprise版での JNDIを利用したデータソース接続の参考情報
本ページの内容に関する参考情報について
注意)本FAQ記事の内容は、ColdFusion 2016 Enterprise版で、Oracle JDBC Driverを利用してOracleへのJNDI接続を試した限りの内容を参考情報として紹介しているものです。本ページの内容の正確さや推奨を保証するものではなく、参考先のサイトに関する詳細も不明です。データベースに関するセットアップや設定等、各種情報はデータベースベンダーにご確認ください。
ColdFusion 10以降のEnterprise版では、ベースエンジンのTomcatを利用したJNDIの接続が可能です。ここでは、以下の方法でJNDIを利用して接続する方法を試してみましたので、その際の設定内容などをご参考までにご案内いたします。
今回はJNDI接続を行うことにより、従来のColdFusion独自のコネクションプールではなく、Tomcatで用意されているDBCPを始め、3つのコネクションプールを使ってOracleへ接続を試しました。
(参考)
(参考手順)
- ColdFusion Application Server Serviceを停止します
- データベースに対応したJDBCドライバをダウンロードし、以下の場所に配置します。今回は、ColdFusion2016が使用するJava1.8に合わせて下記の Oracle Driverを利用した接続を試しています。
配置先: [cf_root]/cfusion/wwwroot/WEB-INF/lib
例①の場合:ojdbc7.jar
例②の場合:ojdbc7.jar
例③の場合:ojdbc7.jar, ucp.jar
- [cf_root]/cfusion/runtime/conf/content.xmlファイルをテキストエディタ・メモ帳で開き、以下の設定を末尾の </Context>前に追記します(作業前に context.xmlファイルをバックアップされることをお勧めします)
例①の設定例:
<Resource name="jdbc/ora" auth="Container" type="javax.sql.DataSource"
maxTotal="100" maxIdle="50" minIdle="10"
username="xxxxx" password="xxxxxx"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@(IPaddress or HostName):(Port)/(SID)" />
(参考)https://hotchpotchj37.wordpress.com/2016/06/16/tomcat7-tomcat8-dbcpまわり変更点備忘録/
例②の設定例:
<Resource name="jdbc/TomPool" auth="Container" type="javax.sql.DataSource"
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
maxActive="100" maxWait="10000" minIdle="10" initialSize="10"
username="xxxxx" password="xxxxxx"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@(IPaddress or HostName):(Port)/(SID)"
testWhileIdle="true" testOnBorrow="true" testOnReturn="false"
validationQuery="SELECT 1 from DUAL" validationInterval="30000"
removeAbandonedTimeout="60" removeAbandoned="true" logAbandoned="true"
jmxEnabled="true"
jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer" />
例③の設定例:
<Resource name="jdbc/UCPPool" auth="Container" type="oracle.ucp.jdbc.PoolDataSource"
factory="oracle.ucp.jdbc.PoolDataSourceImpl"
connectionFactoryClassName="oracle.jdbc.pool.OracleDataSource"
minPoolSize="2" maxPoolSize="5" inactiveConnectionTimeout="20"
user="xxxxx" password="xxxxxx"
url="jdbc:oracle:thin:@(IPaddress or HostName):(Port)/(SID)" />
connectionPoolName="UCPPool" validateConnectionOnBorrow="true"
sqlForValidateConnection="select 1 from DUAL" />
- [cf_root]/cfusion/runtime/conf/web.xmlファイルをテキストエディタ・メモ帳で開き、以下の設定を </web-app>前に追記します(作業前に web.xmlファイルをバックアップされることをお勧めします)
例①の設定例:
<resource-ref>
<description>Oracle JNDI Datasource</description>
<res-ref-name>jdbc/ora</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
例②の設定例:
<resource-ref>
<description>Oracle JNDI Tomcat Pool</description>
<res-ref-name>jdbc/TomPool</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
例③の設定例:
<resource-ref>
<description>Oracle JNDI UCPool</description>
<res-ref-name>jdbc/UCPPool</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
- ColdFusion Application Server Serviceを起動します
- ColdFusion Administratorにログインし、[データとサービス] > [データソース]で、データソースを追加します。
データソース名:任意のデータソース名
ドライバ:J2EE Datasource (JNDI)
JNDI名:「java:comp/env/」 + resource名(res-ref-name)
ユーザー名/パスワード: (Resourceに指定されているため、空白)
例①の設定例:
データソース名:jndi1
ドライバ:J2EE Datasource (JNDI)
JNDI名:java:comp/env/jdbc/ora
ユーザー名/パスワード:未指定
例②の設定例:
データソース名:jndi2
ドライバ:J2EE Datasource (JNDI)
JNDI名:java:comp/env/jdbc/TomPool
ユーザー名/パスワード:未指定
例③の設定例:
データソース名:jndi3
ドライバ:J2EE Datasource (JNDI)
JNDI名:java:comp/env/jdbc/UCPPool
ユーザー名/パスワード:未指定
- データソースの登録が完了し、設定したデータソース名でDB処理が行えることを確認して下さい。
- 念のため content.xml と web.xml をバックアップします。次期Update適応の際は、これらのファイルの設定が初期化されていないかを念のため確認して下さい。
(jconsoleを利用した確認方法についての参考手順)
今回の設定内容を確認する方法として、ColdFusionの機能ではなく、Javaの一般的な方法としてJDKに含まれている監視ツールの jconsole を使用する方法があります。今回はColdFusionと同じサーバーでjconsoleを使用して確認する方法をご紹介します(参考手順中のパラメーターは、セキュリティなどは考慮していません。運用環境などでは、下記のサイトの内容などをご確認の上、使用するかしないかの判断と適切な認証等を設定下さい)
https://docs.oracle.com/javase/jp/8/docs/technotes/guides/management/jconsole.html
サービスとして起動しているColdFusionにはローカルプロセスとして接続ができず、リモートプロセスとして接続するための設定をJVM引数に追加して下さい。
http://qiita.com/uzresk/items/72f42030332ad517f953
- ColdFusionに同梱されているのは Server JREであり、jconsoleを使用するためにはColdFusionが使用するJavaと同じバージョンのJDK(リビジョンまでは合わせる必要が無いようです)を別途インストールする必要があります。OracleのサイトからJDKをダウンロードして、ColdFusionと同じサーバーにインストールします
(ColdFusionが使用する Server JREを JDKに変更する必要はありません)
- リモートプロセスとして接続するための設定は、ColdFusion Administrator の [サーバーの設定] の[Java と JVM] の 「JVM 引数」に、以下のような設定をJVM引数に追加します
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=7900
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
(必ず一行で入力して下さい。余分な改行は入れないでください)
- ColdFusion Application Server Serviceを再起動します
- [JDKのインストール先]\lib\に置かれている jconsole.jar をダブルクリックして起動します
- リモート・プロセスを選択し、ホスト名(同じコンピューターであればlocalhostや127.0.0.1)と手順2.で指定したポート(上記の例では7900)を指定して(「localhost:7900」等)接続します。(今回の設定例だとユーザー名・パスワードは不要で、SSL接続でもありません)
- 先程登録した JNDIデータソースを利用した <cfquery>を実行したり、データソース設定で該当するデータソースの確認などを行い、ColdFusionからJNDIを経由したデータベース処理を実行します。
- jconsoleの[MBeans]の画面を見て、項目や現在の値を確認して下さい。
例えば、「CatalinaのDataSource」や「tomcat.jdbc」、「oracle.ucp.admin.UniversalConnectionPoolMBean」など
記事公開日:2018年02月07日
最終更新日:2018年02月14日