JBossでデータソースを作成する。

まずはJBoss側の設定です。
サンプルファイルが、JBossを解凍したディレクトリ配下のdocs/examples/jcaにあるので利用します。ここではOracleXEを使用するので、oracle-ds.xmlをコピーして使用します。

<?xml version="1.0" encoding="UTF-8"?>
<datasources>
  <local-tx-datasource>
    <jndi-name>jdbc/testDS</jndi-name>
    <connection-url>jdbc:oracle:thin:@127.0.0.1:1521:xe</connection-url>
    <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
    <user-name>test</user-name>
    <password>test</password>
    <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
    <metadata>
        <type-mapping>Oracle10g</type-mapping>
    </metadata>
  </local-tx-datasource>

</datasources>

このファイルを、/opt/jboss/server/default/deployに配置します。
JDBCのドライバファイルは、/opt/jboss/server/default/libに配置します。

通常JNDIのデータソースをルックアップする場合、以下のようなコードを書くと思いますが、そのためにはもう少し設定が必要です。

(DataSource) ic.lookup("java:comp/env/jdbc/testDS");

WEB-INF/jboss-web.xmlとweb.xmlを修正(または作成)する必要があります。

WEB-INF/jboss-web.xml

<!DOCTYPE jboss-web PUBLIC
   "-//JBoss//DTD Web Application 5.0//EN"
   "http://www.jboss.org/j2ee/dtd/jboss-web_5_0.dtd">

<jboss-web>
  <resource-ref>
    <res-ref-name>jdbc/testDS</res-ref-name>
    <jndi-name>java:/jdbc/testDS</jndi-name>
  </resource-ref>
</jboss-web>

WEB-INF/web.xml

<resource-ref>
  <description>JDBC DataSource</description>
  <res-ref-name>jdbc/testDS</res-ref-name>
  <res-type>javax.sql.DataSource</res-type> 
  <res-auth>Container</res-auth>
</resource-ref>

ここまで準備ができればアプリ側からこのデータソースをルックアップして使用することができます。とりあえずこんな感じのものをサンプルで試したところうまくいきました。

InitialContext ic = new InitialContext();
DataSource ds = (DataSource)ic.lookup("java:comp/env/jdbc/testDS");
Connection con = ds.getConnection();

Statement stmt = con.createStatement();
	
ResultSet rs = stmt.executeQuery("select table_name from all_tables");
	
while( rs.next() ){
    out.println( rs.getString("table_name"));
}

con.close();