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:[java language=":fujiharaDBDS"][/java]");
try{
ds = (DataSource)context.lookup("java:fujiharaDBDS");
}catch(Exception e){
e.printStackTrace();
}
System.out.println("LookUP:[java language=":/fujiharaDBDS"][/java]");
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:[java language=":fujiharaDBDS"][/java]
11:53:09,171 INFO [STDOUT] LookUP:[java language=":/fujiharaDBDS"][/java]
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ではとれます
    ということがわかった。