2012-02-09 50 views
8

Tomcatでmysql databeへの接続プーリングを設定しようとしています。私のシンプルなアプリは、Apache/confに/カタリナの私Projekt.xmlで、PROJEKTと呼ばれる/ localhostの私はTomcatとJDBC接続プール

<Context docBase="Projekt.war" path="/Projekt"> 
    <Resource name="jdbc/mysqldb" 
     auth="Container" 
    factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 
     type="javax.sql.DataSource" 
     driverClassName="com.mysql.jdbc.Driver" 
     url="jdbc:mysql://localhost:3306/Music" 
     username="andrzej" 
     password="qazxsw" 
     maxActive="20" 
     maxIdle="30" 
     maxWait="5" 
    /> 
</Context> 

私のアプリのweb.xmlの

<servlet> 
    <servlet-name>HelloServlet</servlet-name> 
    <servlet-class>org.jtp.HelloServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>HelloServlet</servlet-name> 
    <url-pattern>/Hai</url-pattern> 
</servlet-mapping> 

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

と私はApache/libフォルダに持っているI

mysql-connector-java-5.1.18-bin.jar 

を持っているが、私はこのコードを実行すると:

Context initContext = new InitialContext(); 
dataSource = (DataSource)initContext.lookup("java:comp/env/jdbc/mysqldb"); 
System.out.println(dataSource.getConnection().createStatement(). 
      execute("select * from Users")); 

私はいくつかの場所で私はドライバーをテストしたときので、それはTomcatの/ libにドライバを配置しないことによって引き起こされるかもしれないが、私はそれを持って、それが動作することを読んで、私は今、困惑しています例外

org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null' 

を取得手動で接続すると機能しました。私のセットアップについては

私は従うことをしようとしていた http://people.apache.org/~fhanik/jdbc-pool/jdbc-pool.html

EDIT: は、最後にそれが働いてしまった、私がそれので、ので、彼は他の属性をオーバーライドパースのいずれかのファイルにいくつかの左のコンテキストタグを持っていたようでした最後にすべて私のせいです。 http://tomcat.apache.org/tomcat-7.0-doc/jndi-resources-howto.htmlから

// Obtain our environment naming context 
Context initCtx = new InitialContext(); 
Context envCtx = (Context) initCtx.lookup("java:comp/env"); 

// Look up our data source 
DataSource ds = (DataSource) envCtx.lookup("jdbc/EmployeeDB"); 

// Allocate and use a connection from the pool 
Connection conn = ds.getConnection(); 

ドキュメント:

答えて

10

あなたはContext envCtx = (Context) initCtx.lookup("java:comp/env");
JNDIルックアップが欠落しているように見えますが、このように行われるべきです。

+0

まだ同じエラーですが、以前はこの構造を使用していましたが、どこかで私が引用したものが見つかりましたが、いずれにしても同じエラーが返されます。 – Andna

+0

この男のような音は同じ問題を抱えていて、解決策を投稿しましたhttp://blogs.agilefaqs.com/2009/11/23/cannot-create-jdbc-driver-of-class-for-connect-url-null/ – drobson

+0

まだ何も、私はこのフォルダに書き込むことができます、私はまだWebアプリケーション内のcontex.xmlを作成し、同じエラーです。 – Andna

13

TomcatでJDBC接続プーリングを実現するには、XML構成ファイルの代わりにがあります。私はそれらを得ることができたことがないの文脈のリソース参照タグが動作する。さらに、実際にJNDIの機能が必要ない場合、これらのタグは過剰です。

代わりにJavaコードを使用して設定します TomcatのJDBC接続プーリング。 Tomcat 7ドキュメントページのPlain Ol 'Javaセクションのサンプルコードを参照してください。The Tomcat JDBC Connection Pool

基本的に、あなた:

  1. は、あなたの設定(データベースへのURL、DBユーザー名、パスワード、DB、および、そのような)を格納するためのPoolPropertiesオブジェクトをインスタンス化します。
  2. 上記の手順1のPoolPropertiesオブジェクトを渡しながら、Tomcat DataSourceオブジェクトをインスタンス化します。

Easy peasy。このように...

PoolProperties p = new PoolProperties(); 
p.setUrl(jdbc:postgresql://localhost:5432/" + "my_database_name"); 
p.setDriverClassName("org.postgresql.Driver"); 
p.setUsername("someUserName"); 
p.setPassword("somePassword"); 
… 
DataSource datasource = new org.apache.tomcat.jdbc.pool.DataSource(p); 
datasource.setPoolProperties(p); 

データソースを使用するには...

Connection conn = null; 
try { 
    conn = datasource.getConnection(); 
    … 

のDataSourceインスタンスを保存することができます。

  • あなたのサーブレットのメンバーフィールドとして。
  • 別の答えのコメントに記載されているシングルトンとして。
  • ~Objectの組み込みマッピングを使用するServletContextの「属性」として、an Answer of mineに記載されており、質問How to get and set a global object in Java servlet contextで説明したとおりです。
+0

これは素晴らしいです。ありがとう。 –

+0

これは3日以上を探しています....! :) 感謝しています。 – Saedawke

関連する問題