Tomcat5.5のデータソースをコンテキスト間で共有する方法
念のため以下のTomcatで試したところ両方ともDataSourceの取得に成功
${TOMCAT_HOME}/conf/server.xmlのGlobalNamingResourcesにDataSourceの設定を追加。
<GlobalNamingResources 〜> : <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="admin" password="admin" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/TestDB"/> </GlobalNamingResources>
${CONTEXT_HOME}/META-INF/context.xml
<Context path="/jsp-examples" docBase="jsp-examples" debug="5" reloadable="true" crossContext="true"> <ResourceLink global="jdbc/TestDB" name="jdbc/TestDB" type="javax.sql.DataSource" /> </Context>
context.xmlってなんだこれ?Tomcatの拡張か!?用途的にapplication.xmlに似てる気が。
ま、context.xmlって言うのがあると言う事だけ覚えとこ。
${CONTEXT_HOME}/WEB-INF/web.xmlにresource-refを追加
: <resource-ref> <description>DB Connection</description> <res-ref-name>jdbc/TestDB</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> </web-app>
${CONTEXT_HOME}/test.jspにテストコードを記述
<%@page import="java.sql.*" %><%@page import="javax.naming.*" %><%@page import="javax.sql.*" %><% System.out.println("lookup"); try { InitialContext ic = new InitialContext(); System.out.println("lookup2"); DataSource ds = (DataSource)ic.lookup("java:comp/env/jdbc/TestDB"); System.out.println("lookup3"); Connection con = ds.getConnection(); System.out.println("got a DataSource"); } catch (Exception e) { e.printStackTrace(); } %>HelloDataSource