0

データソースの切り替えに関してJavaでいくつかの問題に直面しています..アプリケーションがプロパティファイルで指定されたデフォルトのjndi名を使用しているにもかかわらず、データソースルックアップのコードを作成しました.ユーザーに別のデータベースへのアクセスを許可したい. .しかし、jndi名を使用して別のデータソースに切り替えることができません..データソース検索用に以下のコードを書いてください........

Context ctx = new InitialContext();
if (dataSource == null) 
{
 dataSource = (DataSource) ctx.lookup(jndi_name);
}
4

1 に答える 1

0

これは私のプロジェクトで行いました。Tomcat、サーブレット、および mysql データベースを使用しています。tomcat には server.xml ファイルがあり、以下の詳細を貼り付け、保存して tomcat を再起動する必要があります。サーブレット アプリでは、このコードを使用して 2 つの jndi が必要でした dataSource = (DataSource) ctx.lookup(jndi_name); jndi_name が異なる場合は、試してみてください。

  <Resource name="jdbc/name(any name --this will use in project(jndi)" auth="Container" type="javax.sql.DataSource"/>

  <ResourceParams name="jdbc/name(same)">
    <parameter>
      <name>factory</name>
      <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
    </parameter>

    <!-- Maximum number of dB connections in pool. Make sure you
     configure your mysqld max_connections large enough to handle
     all of your db connections. Set to 0 for no limit.
     -->
    <parameter>
      <name>maxActive</name>
      <value>100</value>
    </parameter>

    <!-- Maximum number of idle dB connections to retain in pool.
     Set to 0 for no limit.
     -->
    <parameter>
      <name>maxIdle</name>
      <value>30</value>
    </parameter>

    <!-- Maximum time to wait for a dB connection to become available
     in ms, in this example 10 seconds. An Exception is thrown if
     this timeout is exceeded.  Set to -1 to wait indefinitely.
     -->
    <parameter>
      <name>maxWait</name>
      <value>10000</value>
    </parameter>


    <!-- MySQL dB username and password for dB connections  -->
    <parameter>
     <name>username</name>
     <value>database username</value>
    </parameter>
    <parameter>
     <name>password</name>
     <value>database password</value>
    </parameter>

    <!-- Class name for MYSQL JDBC driver -->
    <parameter>
       <name>driverClassName</name>
       <value>com.mysql.jdbc.Driver</value>
    </parameter>

    <!-- The JDBC connection url for connecting to your MySQL dB.
     The autoReconnect=true argument to the url makes sure that the
     mm.mysql JDBC Driver will automatically reconnect if mysqld closed the
     connection.  mysqld by default closes idle connections after 8 hours.
     -->
    <parameter>
      <name>url</name>
      <value>jdbc:mysql://localhost:3306/database Name</value>
    </parameter>    

    <parameter>
      <name>validationQuery</name>
      <value>SELECT 1</value>
    </parameter>

  </ResourceParams> 

<Resource name="jdbc/name1" auth="Container" type="javax.sql.DataSource"/>

  <ResourceParams name="jdbc/name1">
    <parameter>
      <name>factory</name>
      <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
    </parameter>

    <!-- Maximum number of dB connections in pool. Make sure you
     configure your mysqld max_connections large enough to handle
     all of your db connections. Set to 0 for no limit.
     -->
    <parameter>
      <name>maxActive</name>
      <value>100</value>
    </parameter>

    <!-- Maximum number of idle dB connections to retain in pool.
     Set to 0 for no limit.
     -->
    <parameter>
      <name>maxIdle</name>
      <value>30</value>
    </parameter>

    <!-- Maximum time to wait for a dB connection to become available
     in ms, in this example 10 seconds. An Exception is thrown if
     this timeout is exceeded.  Set to -1 to wait indefinitely.
     -->
    <parameter>
      <name>maxWait</name>
      <value>10000</value>
    </parameter>


    <!-- MySQL dB username and password for dB connections  -->
    <parameter>
     <name>username</name>
     <value>database username</value>
    </parameter>
    <parameter>
     <name>password</name>
     <value>database Password</value>
    </parameter>
    <!-- Class name for MYSQL JDBC driver -->
    <parameter>
       <name>driverClassName</name>
       <value>com.mysql.jdbc.Driver</value>
    </parameter>

     <parameter>
      <name>url</name>
      <value>jdbc:mysql://localhost:3306/another databasename</value>
    </parameter>    

    <parameter>
      <name>validationQuery</name>
      <value>SELECT 1</value>
    </parameter>

  </ResourceParams> 

</Context>
于 2013-09-26T03:50:12.977 に答える