Tomcat 6データソース構成の詳細


TOMCAT 6を使うのはもうしばらく経ちましたが、これまでデータベースに接続するのは伝統的な方法でした.データ・ソースでデータベースに接続すると、パフォーマンスが向上するため、データ・ソースの構成方法を知っておく必要があります.以下はMYSQLデータベースのデータソースを構成し、ネット上で関連解決策を探し、その後、デバッグして以下のように解決する.
まず、以前のバージョンの構成を説明します.Tomcat 5のデータソース構成はTomcat 5.5のデータソース構成と多くの違いがあり、Tomcat 6のデータソース構成はTomcat 5.5の構成と基本的に同じです.従来のTomcat 5の構成はserver.xmlファイルで構成するか、conf/Catalina/localhostの下にある対応するコンテキストプロファイルで構成します.このような構成が不合理なのは、データベースが変更された場合、プログラマーがこれらのファイルを手動で修正する必要があり、チーム開発に不利であることです.また,この構成は一度に1つのWebアプリケーションにのみ適用され,多くのWebアプリケーションでは1つの構成が必要である.Tomcat 5.5とTomcat 6の構成は簡単です.すべてのWebアプリケーションのデータ・ソースを構成するには、%CATALINA_を変更するだけです.HOME%/conf/context.xmlファイル、次のコードを追加します.<Context reloadable="true">
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Resource name="jdbc/mysql" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000" logAbandoned="true"
username="root" password="root" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/dataBaseName"/>
</Context>

1つのWebアプリケーションに対してデータソースを構成する場合、ウェブアプリケーションのルートディレクトリの下にMETA-INFのディレクトリ(存在しない場合)を新規作成し、そのディレクトリの下にcontextを作成することができる.xmlファイル、context.xmlファイルは、上記のコードを追加します.(もちろんこの時
WEB-INF/web.xml不要)
または$CATALINA_HOME/conf/server.xmlファイルのラベルの間には、次のContextコードが追加されます.<Context path="/path" docBase="systemPath" reloadable="true">
<Resource
name="jdbc/mysql"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="root"
password="root"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/dataBaseName"/>
</Context>

各要素の意味を説明する:nameは指定するjndi名(自分で勝手に取れる)authは認証方式を表し、一般的にContainertypeはデータソースタイプを表し、標準的なjavaxを用いる.sql.DataSourcemaxActiveは接続プールの中で最大のデータベース接続maxIdleは最大の空き接続数maxWaitプールのデータベース接続が占有されている場合、最大待ち時間logAbandonedは廃棄されたデータベース接続が記録されているかどうかを示し、追跡usernameデータベースユーザ名passwordデータベースユーザを表すパスワードdriverClassName JDBC DRIVERurlデータベースURLアドレスを表す
(dataBaseNameを自分のデータベース名に変更)
MYSQLドライバをTOMCATのlibディレクトリまたはあるWebアプリケーションのWEB-INF下のlibディレクトリにコピーする(
mysql-connector-java-5.1.6-binを使っています.jar)
従来のtomcatでは、自分のウェブアプリケーションのWEB-INFディレクトリの下のウェブが必要である.xmlは対応するresourceを指定し、tomcat 5.5以降のバージョンでは書かなくてもよい.コード:
>
>DB Connection
<
/description
>
>jdbc
/mysql
<
/res-ref-name
>
>javax.sql.DataSource
<
/res-type
>
>Container
<
/res-auth
>
<
/resource-ref
>
JAvaで接続されたコードは次のとおりです.Context initCtx = new InitialContext();
javax.sql.DataSource ds = (javax.sql.DataSource)initCtx.lookup("java:comp/env/jdbc/mysql");
Connection conn = ds.getConnection();

また、Context要素は、特定の仮想ホスト上で実行されるWebアプリケーションを表します.1つのHost要素に任意の複数のContext要素をネストできます.各Contextのパスはpathプロパティによって定義される唯一のパスでなければなりません.
また、conf/Catalina/localhostの下の対応するコンテキストプロファイルを構成する方法では、Contextをに断片化することができます.xmlは%CATALINA%/conf///ファイルの下に保存されます.例えば、私がURLでアクセスしたアプリケーションのパスはhttp://localhost/test/です.では、Contextのファイル名はtestです.xml.text.xmlは%CATALINA%/conf/Catalina/localhostの下に保存されます.次のようになります.
  • %CATALINA%これはTomcatのルートディレクトリ
  • です.
  • はserver.xmlではタグのname属性で見ることができ、CatalinaはTomcatのデフォルト名
  • です.
  • localhostは仮想ホストの名前です.これはserverです.xmlでも表示できます.

  • また、私たちが応用すべきwebもあります.xml(tomcatルートディレクトリのconf/web.xmlではない)にリソースリファレンスを追加します:(Tomcat 5.5以降のバージョンは追加しなくてもいいです.)<resource-ref>
    <description>DB Connection</description>
    <res-ref-name>jdbc/TomcatHibernate</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    </resource-ref>


    はい、各書類を貼ってください.


    %CATALINA%/webapps/test/WEB-INF/web.xml
     
    
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version="2.5">

    <resource-ref>
    <description>DB Connection</description>
    <res-ref-name>jdbc/TomcatHibernate</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    </resource-ref>

    </web-app>


    %CATALINA%/conf/Catalina/localhost/test.xml
     
    
    <Context>
    <Resource name="jdbc/TomcatHibernate" auth="Container" type="javax.sql.DataSource"
    maxActive="100" maxIdle="30" maxWait="10000"
    username="root" password="admin" driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost:3306/hibernate"/>
    </Context>

    %CATALINA%/webapps/test/test.jsp
     
    <%@ page language="java" pageEncoding="GB2312"%>
    <%@ page import="java.sql.*, javax.sql.*, javax.naming.*" %>
    <%
    Connection conn = null;
    String url = "jdbc:mysql://localhost:3306/hibernate";
    String user = "root";
    String password = "admin";
    try {
    InitialContext ctx = new InitialContext();
    DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/TomcatHibernate");
    conn = ds.getConnection();
    if(conn != null) {
    out.println(" jdbc/hibernate !");
    }
    } catch(Exception e) {
    out.println(" jdbc/hibernate !" + e);
    } finally {
    if(conn != null)
    conn.close();
    }
    %>

    この実験は上に公表した環境で通過できる.
              :Context      ,    Tomcat   server.xml context.xml 。