2

Tomcat でアプリケーション用のデータ ソースをセットアップしようとして、髪を引っ張っていました。私が取った手順は

  1. 次の内容で META-INF/context.xml を作成します

    <Context>
     <Resource name="jdbc/mydb"
      auth="Container"
      type="javax.sql.DataSource"
      driverClassName="oracle.jdbc.OracleDriver"
      url="jdbc:oracle:thin:@gpqa6.myserver.com:1526:gpqa6"
      username="foo"
      password="foobar"
      maxActive="20"
      maxIdle="30"
      maxWait="-1" />           
    </Context>
    
  2. WEB-INF/web.xml に次のテキストを入力します。

    <resource-ref>
        <description>Datasource</description>
        <res-ref-name>jdbc/mydb</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>
    
  3. コードでの使用

    public class MyServlet extends HttpServlet {
    
      private DataSource ds;             
    
      public void init() {
    
        try {
        Context ctx = new InitialContext();
        ds = (DataSource) ctx.lookup("java:comp/env/jdbc/mydb");
    
        } catch (NamingException e) {           
            e.printStackTrace();
        }
     }
    
      protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException {
        //this is where the exception is thrown
        Connection conn = ds.getConnection(); 
    
        //...do stuff with the connection
    }
    

しかし、次のエラーが発生し続けます

「マッピング中に例外が発生しました。エラー: PoolableConnectionFactory を作成できません (ORA-01017: 無効なユーザー名/パスワード; ログオンが拒否されました) org.apache.tomcat.dbcp.dbcp.SQLNestedException: PoolableConnectionFactory を作成できません (ORA-01017: 無効なユーザー名/パスワード; ログオン拒否された"

ユーザー名とパスワードが正しいことはわかっています。次のコードが機能するため

    Class.forName("oracle.jdbc.OracleDriver").newInstance(); 
    conn = DriverManager.getConnection(
    "jdbc:oracle:thin:@gpqa6.myserver.com:1526:gpqa6", "foo", "foobar");

無効な URL を入力しようとしましたが、それでも同じエラーが発生します。どうしたの???

また、Tomcat には、WebLogic や Glassfish と同様に、データ ソースをテストする何らかの方法がありますか?

4

1 に答える 1

4

今それは働いています。次のコードで接続を確立した後のようです

    Class.forName("oracle.jdbc.OracleDriver").newInstance(); 
    conn = DriverManager.getConnection(
    "jdbc:oracle:thin:@gpqa6.myserver.com:1526:gpqa6", "foo", "foobar");

その後、データソースの使用に戻すと、問題ありません。多分それはキャッシュの問題ですか?

--更新--これはキャッシュの問題です。\ conf\Catalinaフォルダを削除する必要があります。

このリンクは本当に役に立ちました。 http://pwu-developer.blogspot.com/2010/02/why-isnt-my-datasource-configuration.html

于 2012-05-02T14:14:04.987 に答える