/ / Nemožno získať prístup k databáze po inovácii z Tomcat 5.0.27 na Tomcat 7.0.30 - java, tomcat, zdroj údajov, jndi, tomcat7

Nie je možné získať prístup k databáze po inovácii z Tomcat 5.0.27 na Tomcat 7.0.30 - java, tomcat, datasource, jndi, tomcat7

Ak chcete vyriešiť ďalší problém, musím ho vymeniťskôr stará inštalácia tomcat 5 s inštaláciou tomcat 7. Moja aplikácia sa pripája k databáze pomocou zdroja údajov definovaného v aplikáciách context.xml. Ale po prechode na Tomcat 7, aj keď môj kód Zdá sa, že získanie zdroja údajov funguje bez chyby (nevyvolá výnimku ani nevráti nulovú hodnotu)

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

pokus o pripojenie zlyhal:

getDataSource.getConnection()

zlyhá

   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)

Zaujímalo by ma, či niečo nefunguje na tomcat7 alebo b> zabudol som niečo urobiť. To som urobil:

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

Zdá sa, že na tomcat5 nie je priečinok commons, takže som len vložil jar mysql do aplikačnej vojny, ale možno je to zle

Môj súbor jaikoz.xml je

<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>

odpovede:

0 pre odpoveď č. 1

Zdá sa, že ste našli ďalší ovládač JDBCna ceste triedy: ovládač ODBC (sun.jdbc.odbc.JdbcOdbcDriver). Je zrejmé, že sa nepáči MySQL JDBC URL, takže by ste ju mali odstrániť. Môže byť nainštalovaná buď v samotnom Tomcat, alebo vo vašej aplikácii.

Okrem toho, váš ovládač MySQL JDBC vyzerá ako starý (mysql-connector-java-3.1.4-beta-bin.jar). aktuálna verzia vodiča je 5.1.22 alebo 3.1.14 pre Séria 3.1, Možno budete chcieť upgradovať, najmä ak sa pripájate k novšej verzii MySQL ako 3.1.