2012-02-09 11 views
8

Tomcat을 사용하여 mysql databe에 대한 연결 풀링을 설정하려고합니다. 내 간단한 응용 프로그램은 아파치 내 Projekt.xml에, PROJEKT라고/conf의/카탈 리/나는 내 응용 프로그램의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> 

내 아파치/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")); 

내가 얻을 예외 지금 의아해입니다

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

, 나는 그것이 바람둥이/lib에 드라이버를 배치하지 않음으로써 발생하지만 드라이버를 테스트 할 때 때문에, 나는 그것을 가지고 작동 될 수 있음을 읽을 어떤 장소에서 수동 연결로 작동했습니다. 내 설치에 대한

내가 따르려고 http://people.apache.org/~fhanik/jdbc-pool/jdbc-pool.html

편집 : 는 마지막으로 작동있어, 내가 그것 때문에, 그래서 그는 다른 속성을 오버라이드 (override) 구문 분석 파일 중 하나에 일부 왼쪽 상황에 맞는 태그를 한 듯 결국 내 모든 잘못이다. 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(); 

문서를 : 당신이 Context envCtx = (Context) initCtx.lookup("java:comp/env");
JNDI 조회는 다음과 같이 수행해야 누락처럼

답변

10

보인다.

+0

여전히 같은 오류입니다. 이전에이 구조를 사용했지만 어딘가에서 동일한 오류를 반환하는 인용구를 찾았습니다. – Andna

+0

이 사람과 같은 소리에는 동일한 문제가있어 해결책을 게시했습니다. http://blogs.agilefaqs.com/2009/11/23/cannot-create-jdbc-driver-of-class-for-connect-url-null/ – drobson

+0

아직 아무것도,이 폴더에 쓸 수 있습니다, 심지어 내 webapp에 contex.xml을 만든, 여전히 같은 오류가 발생했습니다. – Andna

13

Tomcat에서 JDBC 연결 풀링을 구현하려면 XML 구성 파일 대신 이 있어야합니다. 나는 이들을 얻을 수 없었습니다. 컨텍스트resource-ref 태그가 작동합니다. 더 나아가 이러한 태그는 실제로 JNDI 기능이 필요하지 않은 경우 과잉 사용됩니다.

대안으로는 Java 코드를 사용하여 Tomcat의 JDBC 연결 풀링을 구성하는 것입니다. Tomcat 7 문서 페이지 Plain Ol 'Java 섹션의 예제 코드를 참조하십시오. The Tomcat JDBC Connection Pool.

기본적으로, 당신은 :

  1. 는 설정 저장하기 위해 PoolProperties 오브젝트를 인스턴스화 (데이터베이스, DB 사용자 이름, DB 암호 URL을, 등).
  2. 위의 1 단계에서 PoolProperties 개체를 전달하면서 Tomcat DataSource 개체를 인스턴스화합니다.

쉬운 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(); 
    … 

데이터 소스 인스턴스를 저장할 수 있습니다 : 당신의 서블릿의 멤버 필드로

+0

이것은 굉장합니다. 감사. –

+0

이것은 3 일 이상을 검색하는 것입니다 ....! :) 공유를위한 thankz ....! – Saedawke