Tomcatを使用してmysqldatabeへの接続プールを設定しようとしています。私のシンプルなアプリはProjektと呼ばれ、Apache/conf/Catalina/localhostのProjekt.xmlにあります。
<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フォルダに私は持っています
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"));
例外が発生します
org.Apache.Tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
ドライバーをTomcat/libに配置していないことが原因である可能性があると読んだところもありますが、手動接続でドライバーをテストしたときに機能したため、問題はありません。
私のセットアップでは、フォローしようとしていました http://people.Apache.org/~fhanik/jdbc-pool/jdbc-pool.html
編集:ついにそれが機能するようになりました、私はファイルの1つにいくつかの左コンテキストタグを持っていたようでしたので、解析するときに彼は他の属性をオーバーライドしました、それは最後にすべて私のせいです。
Context envCtx = (Context) initCtx.lookup("Java:comp/env");
が不足しているようです
JNDIルックアップは次のように実行する必要があります。
// 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();
http://Tomcat.Apache.org/Tomcat-7.0-doc/jndi-resources-howto.html からのドキュメント。
TomcatでJDBC接続プールを実現するために、XMLの代替構成ファイルがあります。これらのContextタグとresource-refタグを機能させることができませんでした。さらに、 [〜#〜] jndi [〜#〜] 機能が本当に必要ない場合、これらのタグはやり過ぎです。
別の方法は、構成するJavaコード TomcatのJDBC接続プールを使用することです。 Tomcat 7ドキュメントページのPlain Ol'Javaセクションのサンプルコードを参照してください。 Tomcat JDBC接続プール 。
基本的に、あなたは:
簡単なピーシー。このような…
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インスタンスは次のように保存できます。
ServletContext
からString
への組み込みマッピングを使用して、Object
の「属性」として質問について Javaサーブレットコンテキスト でグローバルオブジェクトを取得および設定する方法。