2012-09-13 2 views
0

다른 문제를 해결하려면 다소 오래된 tomcat 5 설치를 tomcat 7 installtion으로 교체해야합니다. 내 응용 프로그램은 응용 프로그램 context.xml에 정의 된 datasource를 사용하여 데이터베이스에 연결합니다. 그러나 데이터 소스를 가져 오는 내 코드 오류없이 작동하는 것 같다 있지만 톰캣 7로 이동 한 후Tomcat 5.0.27에서 Tomcat 7.0.30으로 업그레이드 한 후 데이터베이스에 액세스 할 수 없습니다.

Context ctx = new InitialContext(); 
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/jaikoz"); 

연결을 얻기 위해 시도합니다 (예외 또는 반환 널 (null)을 던져 나던) 실패

getDataSource.getConnection() 

그것은> 뭔가 tomcat7 다르게 작동하는지 궁금 해요 또는 b> 내가 뭔가를 잊어 버린

org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null' 
      at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1452) 
      at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371) 
      at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) 
      at com.jthink.appserver.jaikoz.util.db.DBManager.getConnection(DBManager.java:92) 
com.jthink.appserver.jaikoz.action.Check.handleRequest(CheckVersion2.java:145) 
      at com.jthink.appserver.jaikoz.Session.run(Session.java:66) 
      at com.jthink.appserver.jaikoz.Controller.doTask(Controller.java:68) 
      at com.jthink.appserver.jaikoz.Controller.doGet(Controller.java:61) 
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
      at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
      at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
      at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
      at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) 
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
      at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002) 
      at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585) 
      at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310) 
      at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885) 
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) 
      at java.lang.Thread.run(Thread.java:619) 
    Caused by: java.lang.NullPointerException 
      at sun.jdbc.odbc.JdbcOdbcDriver.getProtocol(JdbcOdbcDriver.java:507) 
      at sun.jdbc.odbc.JdbcOdbcDriver.knownURL(JdbcOdbcDriver.java:476) 
      at sun.jdbc.odbc.JdbcOdbcDriver.acceptsURL(JdbcOdbcDriver.java:307) 
      at java.sql.DriverManager.getDriver(DriverManager.java:253) 
      at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1437) 

실패합니다. 이것은 내가 무슨 짓을 :

Copy all webapps from tomcat5 to tomcat7 
Copy jaikoz.xml file from Conf/Catalina/localhost to tomcat7 
Copy common/lib/mysql-connector-java-3.1.4-beta-bin.jar into webapps/jaikoz/WEB-INF/lib 

난 그냥 응용 프로그램을 전쟁에 MySQL의 항아리를 넣어했습니다 있도록 tomcat5을에 공유지 폴더있을 것 같지 않습니다,하지만 어쩌면 그것은 잘못된 것입니다

내 ODBC 드라이버 (sun.jdbc.odbc.JdbcOdbcDriver) : jaikoz.xml 파일은 클래스 패스에서 발견 다른 JDBC 드라이버가 마치

<Context path="/jaikoz" displayname="jaikoz" docBase="../webapps/jaikoz" debug="0" privileged="true"> 

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

    <ResourceParams name="jdbc/jaikoz"> 
    <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>0</value> 
    </parameter> 

    <!-- Maximum number of idle dB connections to retain in pool. 
     Set to 0 for no limit. 
     --> 
    <parameter> 
     <name>maxIdle</name> 
     <value>0</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>********</value> 
    </parameter> 

    <parameter> 
    <name>password</name> 
    <value>**********</value> 
    </parameter> 

    <!-- Class name for mm.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/jaikoz?autoReconnect=true</value> 
    </parameter> 
    </ResourceParams> 

</Context> 

답변

0

입니다. 분명히 MySQL JDBC URL을 좋아하지 않으므로 제거해야합니다. Tomcat 자체 또는 응용 프로그램에 설치 될 수 있습니다.

게다가 MySQL JDBC 드라이버는 오래된 것 (mysql-connector-java-3.1.4-beta-bin.jar)처럼 보입니다. 드라이버의 current version은 5.1.22 또는 3.1 series의 경우 3.1.14입니다. 특히 3.1보다 최신 버전의 MySQL에 연결하는 경우 업그레이드 할 수 있습니다.

+0

안녕하세요, http://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html#DriverManager,_the_service_provider_mechanism_and_memory_leaks의 지침에 따라 작업하고 있습니다. Essentailly jaikoz.xml을 수정하고 web.xml에 섹션을 추가해야했습니다. 나중에 드라이버로 업데이트하겠습니다. –

관련 문제