5月 10th, 2008at 22:39

Tags: ,

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ではとれます
    ということがわかった。
このエントリーをはてなブックマークに追加