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:
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:
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:
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
bekomme ich diese Exception
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
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();
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: