# Apache JNDI JDBC Treiber anbinden



## Marder1 (2. Sep 2009)

Hallo liebe Forumgemeinede,

ich habe ein Problem an dem ich schon mehrere Tage sitze. Wenn man dannach googelt findet man viele Menschen
mit dem gleichen Problem und viele Lösungen die den meisten Menschen nicht helfen.
Ich hoffe ihr könnt mir villeicht helfen.

Ich versuche Oracle JDBC Treiber über JNDI an einen Apache Tomcat 6 zu binden und erhalte ständig die Fehlermeldung:

org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'

Verwendeter Treiber:

Der ganz normale Oracle JDBC Treiber: ojdbc14.jar
An ihm kanns eigentlich nicht liegen, weil er unter JAVA SE Projekte, wenn man Ihn ganz normal einbindet funktioniert.
Der Treiber liegt bei mir in \apache-tomcat-6.0.20\lib

Meine context.xml
[XML]
<Context path="/Uebung" docBase="Uebung.war"
        debug="5" reloadable="true" crossContext="true">

  <Resource name="jdbc/myoracle" auth="Container"
              type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
              url="jdbcracle:thinSERVER:1521:WG05t"
              username="BENUTZERNAME" password="PASSWORT" maxActive="20" maxIdle="10"
              maxWait="-1"/>
</Context> 
[/XML]
mit den gleichen Verbindungsdaten lässt sich auch eine Verbindung von eine JAVA SE Projekt aus öffnen.
SERVER, BENUTZERNAME und PASSWORT natürlich geändert.

die context.xml liegt bei mir im Projektordner WEB-INF/lib
ich habe es auch schon versucht das Resouce-TAG in die context.xml in \apache-tomcat-6.0.20\conf reinzukopieren klappt aber auch nicht


meine web.xml:
[XML]
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">
	<display-name>Uebung</display-name>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>
	<servlet>
		<servlet-name>Faces Servlet</servlet-name>
		<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>/faces/*</url-pattern>
	</servlet-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>
[/XML]
so wie es auf der Apachewebseite im HOW-TO steht


Wie ich darauf zu greife:

Ich verwende Java Server Faces und hab ein Forumular an ein Handlerfunktion gebunden in einer ganz normalen Java Klasse
diese Funktion wird auch ausgeführt. Dort versuche ich folgendermaßen eine Verbindung zur Datenbank aufzubauen:

```
Context initContext = new InitialContext();
Context envContext  = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/myoracle");
Connection conn = ds.getConnection();
```

Wenn diese Funktion ausgeführt wird krieg ich folgende Fehlermeldung:


org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'

Ich denke den kompletten Stacktrace muss ich nicht posten.

Kann mir bitte einer Helfen.

Danke


----------



## sence (3. Sep 2009)

selbes Problem hab ich mit mysql :O

need help toooooo


----------



## realheat (17. Okt 2009)

Schon das Problem gelöst?


----------



## mvitz (17. Okt 2009)

Ich kenne es nur aus dem Servlet Umfeld und da funktionierte es bei mir bisher immer.

Die context.xml muss imho jedoch innerhalb der Web-App im META-INF Ordner liegen, evtl. ist das ja der Fehler.


----------



## sence (17. Okt 2009)

Jo, das Problem war, dass der Treiber auf dem TOMCAT Server in dem LIB Verzeichniss liegen musste. War in der Hoffnung eine lösung zu finden, dass diese mit im .war intigiriert werden kann, um "unabhängig" vom Server zu sein.

Dankeee


----------



## Unregistriert (27. Okt 2009)

Und dann muss dummerweise auch noch innerhalb des Context-Tags direkt das Resource-Tag folgen und nicht, wie in der Tomcat-Dokumentation beschrieben, erst das Resources-Tag. Finde ich wenig intuitiv - logischer wäre, die einzelnen Resourcen im Resources-Tag zu bündeln.

Also:
<Context>
<Resource name="..." .../>
<Context>

und nicht:
<Context>
<Resources>
<Resource name="..." .../>
</Resources>
<Context>

Komischerweise wird die Resource auch bei der zweiten Syntax offenbar richtig in den Namensraum eingebunden - sie kann eben bloß aus irgendeinem Grund nicht richtig erzeugt werden.


----------



## Unregistriert (27. Okt 2009)

Bei mir funktioniert es mit den oben beschriebenen Einstellungen einwandfrei. Sollte das ursprüngliche Problem immer noch existieren, kann das eigentlich nur daran liegen, dass die <webapp>.xml im conf/Catalina-Verzeichnis falsch ist. Diese aktualisiert sich nämlich nach einer war-Aktualisierung nicht automatisch.


----------



## Snape (14. Jun 2011)

> Sollte das ursprüngliche Problem immer noch existieren, *kann das eigentlich nur daran liegen, dass die <webapp>.xml im conf/Catalina-Verzeichnis falsch ist. Diese aktualisiert sich nämlich nach einer war-Aktualisierung nicht automatisch.*


Danke danke danke danke für diesen wertvollen Hinweis! Dieses Problem hat mich jetzt zwei Tage gekostet, um durch solch ein faules Ei gelöst zu werden. Ich war schon verzweifelt und wusste nicht mehr, was ich noch alles vergleichen und kontrollieren könnte.


----------

