Hallo,
ich versuche gerade einen Datenbankverbindungspool zu einer MySQL Datenbank aufzubauen. Ursprünglich wollte ich eine jsf DataTable mit Daten füllen. Aber als es nicht geklappt hat, habe ich das Example von Apache durchgespielt: tomcat.apache.org/tomcat-5.0-doc/jndi-datasource-examples-howto.html
Also, was habe ich gemacht:
- aktuelle mysql connector Jar File in commons/lib Verzeichniss von Tomcat abgelegt (ich habe auch einen Test mit WebInf/lib durchgespielt)
- server.xml bearbeitet: im Host Tag habe ich den Example Context Tag von der Apache Seite reinkopiert; Den URL Parameter habe ich dann meinen Bedürnissen angepasst
- In Eclipse ein Projekt für die /TestDB Applikation erstellt und jstl Libs eingefügt
- die web.xml mit den Daten aus der Apache Seite erweitert (copy & paste)
- eine index.jsp erstellt, wie bei Apache Seite angegeben (copy & paste) und SQL Befehl meinen Bedürfnissen angepasst
Nun ja, laut example sollte das reichen. das Ergebniss:
Mich verwirrt vor allem die Zeile:
Treiber ist in dem commons/lib Ordner. Und einen Test mit dem web-inf/lib habe ich auch gemacht. Username und Paswort für die DB passen. Standard Installation MySQL ("root" ohne PWD). In der JSP verwende ich die Datenbank test mit der Tabelle test. Diese existieren auch.
Der Vollständigkeit halber hier die wichtigsten Daten:
server.xml mit der Deklaration des Pools im Host Tag:
Web.xml mit der Deklaration der Ressourcen:
die index.jsp
Habe ich hier was vergessen? Fehlt mir was? Was habe ich übersehen?
ich versuche gerade einen Datenbankverbindungspool zu einer MySQL Datenbank aufzubauen. Ursprünglich wollte ich eine jsf DataTable mit Daten füllen. Aber als es nicht geklappt hat, habe ich das Example von Apache durchgespielt: tomcat.apache.org/tomcat-5.0-doc/jndi-datasource-examples-howto.html
Also, was habe ich gemacht:
- aktuelle mysql connector Jar File in commons/lib Verzeichniss von Tomcat abgelegt (ich habe auch einen Test mit WebInf/lib durchgespielt)
- server.xml bearbeitet: im Host Tag habe ich den Example Context Tag von der Apache Seite reinkopiert; Den URL Parameter habe ich dann meinen Bedürnissen angepasst
- In Eclipse ein Projekt für die /TestDB Applikation erstellt und jstl Libs eingefügt
- die web.xml mit den Daten aus der Apache Seite erweitert (copy & paste)
- eine index.jsp erstellt, wie bei Apache Seite angegeben (copy & paste) und SQL Befehl meinen Bedürfnissen angepasst
Nun ja, laut example sollte das reichen. das Ergebniss:
Code:
SCHWERWIEGEND: Servlet.service() for servlet jsp threw exception
javax.servlet.jsp.JspException: Unable to get connection, DataSource invalid: "org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'"
at org.apache.taglibs.standard.tag.common.sql.QueryTagSupport.getConnection(QueryTagSupport.java:276)
at org.apache.taglibs.standard.tag.common.sql.QueryTagSupport.doStartTag(QueryTagSupport.java:159)
at org.apache.jsp.index_jsp._jspx_meth_sql_query_0(index_jsp.java:102)
at org.apache.jsp.index_jsp._jspService(index_jsp.java:60)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:833)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:639)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1285)
at java.lang.Thread.run(Unknown Source)
Mich verwirrt vor allem die Zeile:
Code:
Cannot create JDBC driver of class '' for connect URL 'null'"
Treiber ist in dem commons/lib Ordner. Und einen Test mit dem web-inf/lib habe ich auch gemacht. Username und Paswort für die DB passen. Standard Installation MySQL ("root" ohne PWD). In der JSP verwende ich die Datenbank test mit der Tabelle test. Diese existieren auch.
Der Vollständigkeit halber hier die wichtigsten Daten:
server.xml mit der Deklaration des Pools im Host Tag:
Code:
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.core.AprLifecycleListener" />
<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.storeconfig.StoreConfigLifecycleListener"/>
<GlobalNamingResources>
<Environment name="simpleValue" type="java.lang.Integer" value="30"/>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
<Connector port="8009"
enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="/DBTest" docBase="DBTest"
debug="5" reloadable="true" crossContext="true">
<Logger className="org.apache.catalina.logger.FileLogger"
prefix="localhost_DBTest_log." suffix=".txt"
timestamp="true"/>
<Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/TestDB">
<parameter><name>factory</name><value>org.apache.commons.dbcp.BasicDataSourceFactory</value></parameter>
<parameter><name>maxActive</name><value>100</value></parameter>
<parameter><name>maxIdle</name><value>30</value></parameter>
<parameter><name>maxWait</name><value>10000</value></parameter>
<parameter><name>username</name><value>root</value></parameter>
<parameter><name>password</name><value></value></parameter>
<parameter><name>driverClassName</name><value>com.mysql.jdbc.Driver</value></parameter>
<parameter><name>url</name><value>jdbc:mysql://localhost:3306/test?autoReconnect=true</value></parameter>
</ResourceParams>
</Context>
</Host>
</Engine>
</Service>
</Server>
Web.xml mit der Deklaration der Ressourcen:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<description>MySQL Test App</description>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/TestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
die index.jsp
Code:
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<sql:query var="rs" dataSource="jdbc/TestDB">
select name, vorname, birthday from test
</sql:query>
<html>
<head>
<title>DB Test</title>
</head>
<body>
<h2>Results</h2>
<c:forEach var="row" items="${rs.rows}">
name ${row.name}
vorname ${row.vorname}
birthday ${row.birthday}
</c:forEach>
</body>
</html>
Habe ich hier was vergessen? Fehlt mir was? Was habe ich übersehen?