JBossでデータソースを使う
Javaからデータベースを使うってのは誰でもやってるけど、接続情報(ユーザー名・パスワード・URL etc.)などを一元管理したいってのはごく普通の考えだと思う。そういった場合にJNDIデータソースを使うと色々と便利。JNDIがどういったものかというのは例によってGoogleなどで情報が出て来るので割愛。
ここではJBossで動くシステムからデータソースにアクセスする方法を簡単に説明。
○環境
JBoss 4.0.3 SP1 (プロジェクトで使ってるので。他のバージョンでも一緒のはず)
JDK 1.6.0
○データソースファイル
以下のようなXMLファイルを作成する。DBMSによって、設定項目が若干異なると思うので、詳しくはJDBCドライバのマニュアルなどを参照。JDBCドライバのクラス名やURLを手っ取り早く知りたい場合はこのページをどうぞ。
<datasources>
<xa-datasource>
<jndi-name>IfxDS</jndi-name>
<xa-datasource-class>com.informix.jdbcx.IfxXADataSource</xa-datasource-class>
<xa-datasource-property name=”IfxIFXHOST”>db.example.com</xa-datasource-property>
<xa-datasource-property name=”Description”>Informix connection</xa-datasource-property>
<xa-datasource-property name=”PortNumber”>1526</xa-datasource-property>
<xa-datasource-property name=”DatabaseName”>database</xa-datasource-property>
<xa-datasource-property name=”ServerName”>foo</xa-datasource-property>
<xa-datasource-property name=”User”>user</xa-datasource-property>
<xa-datasource-property name=”Password”>pass</xa-datasource-property>
<xa-datasource-property name=”IfxIFX_XASPEC”>Y</xa-datasource-property>
<user-name>user</user-name>
<password>pass</password>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.InformixExceptionSorter</exception-sorter-class-name>
<metadata>
<type-mapping>InformixDB</type-mapping>
</metadata>
</xa-datasource>
</datasources>
このファイルを$JBOSS_HOME/server/xxxx/deployディレクトリにコピー。JBossが起動していれば自動的にファイルが読み込まれて登録され、システムから使える状態になっている。上記の例ではIfxDSという名前でデータソースを参照できる。
○JDBCドライバのコピー
JDBCドライバは$JBOSS_HOME/server/xxxx/libにあらかじめコピーしておく。
ドライバがない時に以下のようなメッセージが出て結構はまった。単にドライバファイルがlibフォルダに入ってないだけ。ちょっとメッセージが分かりにくい気がする…。色々検索してこのページ(英語)をみて一発解決。
○Javaから使う
Javaからは以下のように使用(例外処理は省略)
DataSource ds = (DataSource) ctx.lookup(“java:/IfxDS”);
Connection conn = ds.getConnection();