JNDI DataSource mit Tomcat 6.0

kwyjibo_84

Mitglied
Hallo zusammen,

ich würde gerne in einer Java-Webanwendung meine Datenbankverbindung über JNDI holen.
Nach den How-To Seiten soll das mal wieder ganz einfach funktionieren. Aber irgendwie bekomme ich das nicht hin.

in meiner web.xml soll ich also angeben, auf welche DataSource ich referenzieren will:
XML:
<resource-ref>
   <description>DB Connection</description>
   <res-ref-name>jdbc/sampledb</res-ref-name>
   <res-type>javax.sql.DataSource</res-type>
   <res-auth>Container</res-auth>
</resource-ref>

Ok. Ist das aber denn wirklich nötig wenn ich per JNDI zugreifen will. Braucht man das nicht nur z.B. wenn man sql-taglibs verwenden will. Wie auch immer, ich habs mal mit angegeben.

Der Zugriff in z.B. einem Servlet sollte ja so ausschauen:
Java:
Context initCtx = new InitialContext();
DataSource db = (DataSource) initCtx.lookup("java:comp/env/jdbc/sampledb");
Connection conn = db.getConnection();

Nun muss man ja aber noch angeben wie man auf die Datenbank zugreifen kann. Hier wird in den How-Tos und in vielen Foren immer von der context.xml und der server.xml gesprochen.

Wo trage ich nun meine Informationen für den Datenbankzugriff ein? Es wird auch manchmal davon gesprochen eine context.xml im META-INF der Webapplikation anzugeben. Hmm...
Irgendwo muss also das hier hin (In diesem Fall für eine DB2 Datenbank:
XML:
<Resource 
   name="jdbc/sampledb" 
   auth="Container"
   type="javax.sql.DataSource"
   factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
   maxActive="30" maxIdle="10" maxWait="10000"
   url="jdbc:db2://localhost:50000/SAMPLEDB"
   driverClassName="com.ibm.db2.jcc.DB2Driver"
   username="db2admin"
   password="db2admin"
   connectionProperties="currentSchema=SAMPLEDB;"
   description="DB2 Datasource" />

Ich hab das schon an einige Stellen hingeschrieben. Es scheint aber nichts auszumachen wo ich das hinschreibe. Ich kann zwar ein lookup machen und ich bekomme eine Instanz von BasicDataSource zurück aber bei der Zeile
Java:
Connection conn = db.getConnection();
bekomme ich diese Exception
Java:
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
	at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1150)
	at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
	at se.studieren.db.ms.wahlsystem.web.persistenz.DBConnection.getDBConnection(DBConnection.java:24)
	at org.apache.jsp.jsp.index_jsp._jspService(index_jsp.java:96)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	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.createDataSource(BasicDataSource.java:1143)
	... 21 more

Das ist verständlich, wenn man sich mal das BasicDataSource Objekt anschaut. Da ist alles null.

Kann mir jemand helfen und sagen wo ich die Resource wie hinschreiben muss, damit mein JNDI lookup klappt.

Vielen Dank,
Sebastian
 
Zuletzt bearbeitet von einem Moderator:
Blind wie sonst noch was war ich mal wieder. Hab da ja alles in Eclipse ausprobiert und da auch meine Tomcat eingerichtet. Dann hab ich aber die context.xml im Tomcat-Ordner auf meinem Rechner geändert... Eclipse legt aber doch im Workspace nen eingenen "Server" Ordner an. Für den Tomcat natürlich auch mit einer context.xml die ich angepasst habe und schon funktioniert es.
 
Zurück