MySQL Connection Pool nach Apache Example

Status
Nicht offen für weitere Antworten.

freez

Top Contributor
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:


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?
 

freez

Top Contributor
Ich habe eine Lösung gefunden. Warum es so funktioniert aber anders herum nicht, weiß ich nicht. Jedenfalls habe ich einen Context Block im Internet gefunden, den ich in eine xml Datei gepackt habe, welche im conf/catalina/localhost ordner gespeichert habe:

Code:
<Context path="/mysqltest" debug="5" reloadable="true" crossContext="true">
	<Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_mysqltest_log." suffix=".txt" timestamp="true"/>
	<Resource name="jdbc/mysqltest" auth="Container" type="javax.sql.DataSource" removeAbandoned="true" removeAbandonedTimeout="30"
	maxActive="50" maxIdle="20" maxWait="10000" username="root" password="" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/test"/>
</Context>

Das funzt nun auch mit meiner JSF Application /mysqltest. Kann mir jemand sagen, warum der andere Block nicht funktioniert hat?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Struts - Connection Pool - MySQL - JDeveloper Allgemeines EE 2
S JDBC Mysql Connection Problem - datasource null Allgemeines EE 3
2 Wildfly JPA Konfiguration für mysql Allgemeines EE 0
R Java EE 6, eclipse, maven, jsf, hibernate, mysql Allgemeines EE 8
F Mehrere Bilder aus MySQL DB via Servlet darstellen. Allgemeines EE 1
T J2EE, MySQL, Linux, Applikationsverfügbarkeit mangelhaft, Analyse Allgemeines EE 2
T Einloggen auf Seite + MYSQL, JSP Allgemeines EE 6
H Tomcat, MySQL Allgemeines EE 4
remus JBoss Authentifizierung mit MYSQL-Datenbank Allgemeines EE 4
G JSF | Hibernate | MySQL Allgemeines EE 17
M JSP, MySQL und JBoss "No suitable Driver" Allgemeines EE 3
V MYSQL JDBC;java.lang.ClassNotFoundException; Problem Eclipse Allgemeines EE 3
G JBoss + MySQL Allgemeines EE 8
I Sun App Server JDBC MySQL Allgemeines EE 2
M Tomcat, Hibernate, MySQL und die EOFException Allgemeines EE 7
K mysql treiber problem wenn import java.sql.* bei _servlet_ Allgemeines EE 2
E JSF, Hibernate & MySQL: Keine Datenbankaktualisierung Allgemeines EE 5
C CMS mit JSP und MySQL, irgendwann ein Nullpointer Allgemeines EE 5
A Hibernate-Problem mit MySQL-Cluster Allgemeines EE 6
S Java Enum in MySQL und Hibernate Allgemeines EE 3
P struts Hibernate MySQL Select Statement Allgemeines EE 24
P keine verbindung vom struts framework zu mysql Allgemeines EE 2
G MySQL Connector / MXJ Allgemeines EE 2
G "Access denied" bei Verbindung zu MySQL mittles JS Allgemeines EE 3
D Problem jsp- mysql Allgemeines EE 2
A JSP und MySQL Problem Allgemeines EE 4
P JavaMail SMTP Connection Allgemeines EE 2
A Listener oder Signal, dass Connection in übergebenen Handler fertig (MessageHandler) Allgemeines EE 1
W Keine Connection mit DB - ganz einfache Testanwendung Allgemeines EE 6
H java selenium test connection refused Allgemeines EE 6
Java.getSkill() verbindung / connection in session speichern Allgemeines EE 4
G DB Connection Timout Allgemeines EE 5
J Tomcat: "Unable to get connection, DataSource invalid&q Allgemeines EE 8
B Connection Poll ohne TomCat Allgemeines EE 5
G DB Connection mit Java Beans Allgemeines EE 6
P J2EE Struts - Database connection failed - Hilfe?:( Allgemeines EE 6
H JNDI Name für die Queue - Connection Factory in JBoss ändern Allgemeines EE 3
B DB Connection schliessen Allgemeines EE 8
K JAVA BEAN DB Connection Prob Allgemeines EE 5

Ähnliche Java Themen

Neue Themen


Oben