# Connection Pool + Tomcat + Oracle10g



## hunter1977 (14. Jan 2005)

Hallo,

ich versuche seit heute morge eine Verbindung vom Tomcat zu meiner Oracle10g Datenbank herzustellen,leider ohne Erfolg.

Hier die Fehlermeldung:

```
HTTP Status 500
exception

javax.servlet.ServletException: Unable to get connection, DataSource invalid: "org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'"
	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
	org.apache.jsp.index_jsp._jspService(index_jsp.java:85)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause

javax.servlet.jsp.JspException: Unable to get connection, DataSource invalid: "org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'"
	org.apache.taglibs.standard.tag.common.sql.QueryTagSupport.getConnection(QueryTagSupport.java:276)
	org.apache.taglibs.standard.tag.common.sql.QueryTagSupport.doStartTag(QueryTagSupport.java:159)
	org.apache.jsp.index_jsp._jspx_meth_sql_query_0(index_jsp.java:104)
	org.apache.jsp.index_jsp._jspService(index_jsp.java:61)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
```

Ich habe den Code von Jakarta Tomcat verwendet, aber hier nochmal mein Code.
server.xml

```
Resource name="jdbc/myoracle" auth="Container"
              type="javax.sql.DataSource"/> 

<ResourceParams name="jdbc/myoracle">
  <parameter>
    <name>factory</name>
    <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
  </parameter>
  <parameter>
    <name>driverClassName</name>
    <value>oracle.jdbc.driver.OracleDriver</value>
  </parameter>
  <parameter>
    <name>url</name>
    <value>jdbc:oracle:thin:@localhost:1521:Test</value>
  </parameter>
  <parameter>
    <name>username</name>
    <value>SYSTEM</value>
  </parameter>
  <parameter>
    <name>password</name>
    <value>linux</value>
  </parameter>
  <parameter>
    <name>maxActive</name>
    <value>20</value>
  </parameter>
  <parameter>
    <name>maxIdle</name>
    <value>10</value>
  </parameter>
  <parameter>
    <name>maxWait</name>
    <value>-1</value>
  </parameter>
</ResourceParams>
```

web.xml

```
<?xml version = '1.0' encoding = 'windows-1252'?>
<web-app 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" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee">
  <description>Empty web.xml file for Web Application</description>
  <session-config>
    <session-timeout>35</session-timeout>
  </session-config>
  <mime-mapping>
    <extension>html</extension>
    <mime-type>text/html</mime-type>
  </mime-mapping>
  <mime-mapping>
    <extension>txt</extension>
    <mime-type>text/plain</mime-type>
  </mime-mapping>
  <resource-ref>
 <description>Oracle Datasource example</description>
 <res-ref-name>jdbc/myoracle</res-ref-name>
 <res-type>javax.sql.DataSource</res-type>
 <res-auth>Container</res-auth>
</resource-ref>
</web-app>
```

index.jsp

```
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@ page contentType="text/html;charset=windows-1252"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>

<sql:query var="rs" dataSource="jdbc/myoracle">
select id, name, vorname from Testumgebung
</sql:query>

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"></meta>
    <title>
      Oracle DB-Test
    </title>
  </head>
  <body>
    <h2>Results</h2>
  
<c:forEach var="row" items="${rs.rows}">
    ID ${row.id}

    NAME ${row.name}

    VORNAME ${row.vorname}

</c:forEach>
  </body>
</html>
```

Kann mir jemand bei diesem Problem weiterhelfen. Ich habe den jdbc Treiber von Oracle nach common\lib kopiert so wie in der Anleitung von Jakarta.

Hunter


----------



## Bleiglanz (14. Jan 2005)

nur zur sicherheit Shareable machen

```
<Resource auth="Container"
        name="jdbc/myoracle"
        scope="Shareable"            
        type="javax.sql.DataSource"/>
```
wo liegt denn das Fragment -> in GlobalRessources oder der Webapp

Treiberdatei: welche, ggf. von .zip nach .jar umbenennen

catalina.out anschauen, möglcherweise Meldung beim Hochfahren?


----------



## hunter1977 (14. Jan 2005)

Hallo,

also ich habe die Datasource in /conf/server.xml eingetragen. Ich habe den JDBC Treiber von Oracle und der heißt classes12.jar und liegt in /common/lib.

Diese Fehlermeldung erscheint bei mir im log File:

```
2005-01-14 14:18:24 StandardWrapperValve[jsp]: Servlet.service() for servlet jsp threw exception
javax.servlet.jsp.JspException: Unable to get connection, DataSource invalid: "org.apache.commons.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:104)
	at org.apache.jsp.index_jsp._jspService(index_jsp.java:61)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
	at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
	at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
	at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
	at java.lang.Thread.run(Unknown Source)
```


----------



## hunter1977 (14. Jan 2005)

So, ich habe das ganze jetzt mal mit MySQL getestet und auch hier geht das Beispiel nicht.
Ich benutze das jdk1.4.2_06 habe kein J2EE installiert, der Tomcat ist die Version 5.0.28
und die Datenbanken werden im Tomcat Manager als DataSource angezeigt.

Hat jemand eine Idee woran das liegen kann.

Danke Hunter


----------



## Bleiglanz (14. Jan 2005)

tippe auf einen Fehler in der server.xml, s. oben

oder

hast du irgendwelche alten/neuen xml parser in /lib/ext?


----------



## Guest (15. Jan 2005)

Hallo,

ich habe die Einstellungen für den Manager aus dem Admin Tool von Tomcat gemacht, ich denke da werden keine Fehler passieren. Außerdem habe ich das Beispiel von Jakarta Tomcat kopiert.

Ich verwende keine alten XML Parser, diese sind doch bei der neuen Tomcat Version gar nicht mehr dabei.

Hat jemand eine Idee oder ein Beispiel was auf jeden Fall funktioniert?

Danke Hunter


----------



## Bleiglanz (17. Jan 2005)

>>ich habe die Einstellungen für den Manager
>>aus dem Admin Tool von Tomcat gemacht, 

oje, vergiss das Admin Tool, das nimmt kein Mensch her und ist fehlerhaft; am besten gleich löschen

editier alle conf-Dateien von Hand, damit sparst du dir viel ärger


----------



## hunter1977 (4. Feb 2005)

Okay, ich habe jetzt alles schon per Hand editiert. Leider kann ich immer noch nicht über einen Connection Pool auf die DB zugreifen.
Wenn ich die DB Zugriffe in die JSP schreibe, kann ich ohne Probleme auf die DB zugreifen.

Hat jemand eine Idee woran das liegen kann?

Danke Hunter


----------

