JBoss 4.2.1のデータソースの設定
参考:http://www.jbug.jp/cgi-bin/fswiki/wiki.cgi?page=JBoss%20DataSource
JDBCライブラリの配置
ojdbc14.jarなどのライブラリを「C:\jboss-4.2.1.GA\server\default\lib」に配置する。
データソースの設定
Oracleの場合、「C:\jboss-4.2.1.GA\docs\examples\jca」にある「oracle-ds.xml」をコピーしてデスクトップなどに保存して編集する。その他DBの場合もサンプルがあるはず。
<datasources> <local-tx-datasource> <jndi-name>OracleDS</jndi-name> <connection-url>jdbc:oracle:thin:@youroraclehost:1521:yoursid</connection-url> <driver-class>oracle.jdbc.driver.OracleDriver</driver-class> <user-name>x</user-name> <password>y</password> <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name> <metadata> <type-mapping>Oracle9i</type-mapping> </metadata> </local-tx-datasource></datasources>
この内容を書き換えてわかりやすい名前にリネーム(ほにゃらら-ds.xmlにすること)。「C:\jboss-4.2.1.GA\server\default\deploy」にコピーすると自動的にデプロイされる。
データソースの確認
「http://localhost:19863/jmx-console/」を開いて「jboss.jdbc」というところに「datasource=fujiharaDBDS,service=metadata」と表示されれば登録されたと判断できる。
また、一回JBossを再起動させてログに
[ConnectionFactoryBindingService] Bound ConnectionManager 'jboss.jca:service=DataSourceBinding,name=fujiharaDS' to JNDI name 'java:fujiharaDS'
とでれば成功。
JNDI名でデータソースを取得してみる
ためしにJSPでデータソースを使えるか調べてみた。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" errorPage="/Error50X.jsp" %>
<%@page import="javax.naming.InitialContext"%> <%@page import="javax.sql.DataSource"%> <%@page import="java.sql.Connection"%> <%@page import="java.sql.Statement"%> <%@page import="java.sql.ResultSet"%>
<% InitialContext context = new InitialContext(); DataSource ds = null;
System.out.println("LookUP:[fujiharaDBDS]"); try{ ds = (DataSource)context.lookup("fujiharaDBDS"); }catch(Exception e){ e.printStackTrace(); } System.out.println("LookUP:"); try{ ds = (DataSource)context.lookup("java:fujiharaDBDS"); }catch(Exception e){ e.printStackTrace(); } System.out.println("LookUP:"); try{ ds = (DataSource)context.lookup("java:/fujiharaDBDS"); }catch(Exception e){ e.printStackTrace(); }
System.out.println("getConnetction"); Connection con = ds.getConnection();
System.out.println("createStatement"); Statement st = con.createStatement();
System.out.println("excecute"); ResultSet rs = st.executeQuery("select id from test_table");
if(rs != null){ if(rs.next()){ out.println(rs.getString("ID")); } }
rs.close(); st.close(); %>
ログには以下のように出る。(スタックトレースは省略している)
11:53:09,156 INFO [STDOUT] LookUP:[fujiharaDBDS] 11:53:09,156 ERROR [STDERR] javax.naming.NameNotFoundException: fujiharaDBDS not bound 11:53:09,156 ERROR [STDERR] at org.jnp.server.NamingServer.getBinding(NamingServer.java:529) 11:53:09,171 INFO [STDOUT] LookUP: 11:53:09,171 INFO [STDOUT] LookUP: 11:53:09,171 INFO [STDOUT] getConnetction 11:53:09,812 INFO [STDOUT] createStatement 11:53:09,968 INFO [STDOUT] excecute
結果、
- fujiharaDBDSではとれません
- java:fujiharaDBDSではとれます
- java:/fujiharaDBDSではとれます
ということがわかった。




