2012-01-21 36 views
9

Tôi không thể làm cho nó hoạt để có được kết nối từ DataSource thu được từ JNDI trong tomcat 7.0, dẫn đến lỗi như thế này:Thiết lập JNDI Datasource với oracle trong Tomcat

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

tôi đã thực hiện trong nhiều cách sau đây tài liệu và đề xuất của những người khác, nhưng vẫn không thể khắc phục được. Dưới đây là các thiết lập của tôi:

Trong web.xml:

<resource-ref> 
    <description>MyDataSource</description> 
    <res-ref-name>jdbc/MyDataSource</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
</resource-ref> 

Trong context.xml:

<Context> 
    <Resource name="jdbc/MyDataSource" auth="Container" type="javax.sql.DataSource" 
       maxActive="100" maxIdle="30" maxWait="10000" 
       username="abc" password="abc" driverClassName="oracle.jdbc.OracleDriver" 
       url="jdbc:oracle:thin:@123.123.123.123:1521:xe"/> 
       <!-- // tried both driver class names but all not work driverClassName="oracle.jdbc.driver.OracleDriver" --> 
</Context> 

Ngoài ra, tôi đã cố gắng để đưa rằng trong server.xml, cũng không hoạt động

<Resource name="jdbc/MyDataSource" auth="Container" type="javax.sql.DataSource" 
    driverClassName="oracle.jdbc.driver.OracleDriver" 
    url="jdbc:oracle:thin:@123.123.123.123:1521:xe" 
    servicename="MyDataSource" username="abc" password="abc" 
    maxActive="20" maxIdle="10" maxWait="20000"/> 

<ResourceParams name="jdbc/MyDataSource"> 
    <parameter> 
     <name>user</name> 
     <value>abc</value> 
    </parameter> 
    <parameter> 
     <name>password</name> 
     <value>abc</value> 
    </parameter> 
    <parameter> 
     <name>driverClassName</name> 
     <value>oracle.jdbc.driver.OracleDriver</value> 
    </parameter> 
</ResourceParams> 

Đặt lớp12.jar cũng như ojdbc14.jar trong Tomcat 7.0 \ lib

Có ai có thể chỉ cho tôi đúng cách không?

Tôi lãng phí quá nhiều thời gian vào cấu hình đó nhưng vẫn không thể làm cho nó hoạt động. Cảm ơn trước!

John


Stack Trace như sau:

DS: [email protected] 
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null' 
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1452) 
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371) 
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) 
    at DBTest.doGet(DBTest.java:70) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.NullPointerException 
    at sun.jdbc.odbc.JdbcOdbcDriver.getProtocol(Unknown Source) 
    at sun.jdbc.odbc.JdbcOdbcDriver.knownURL(Unknown Source) 
    at sun.jdbc.odbc.JdbcOdbcDriver.acceptsURL(Unknown Source) 
    at java.sql.DriverManager.getDriver(Unknown Source) 
    at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1437) 
    ... 21 more 

Và đây là mã, ngoại trừ tại ds.getConnection. (Nó không phải là cách điển hình để có được DS, bcoz cần phải phù hợp với cách WebSphere ...)

Properties env = new Properties(); 
env.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.naming.java.javaURLContextFactory"); 
initCtx = new InitialContext(env); 
DataSource ds = (DataSource) initCtx.lookup("java:comp/env/jdbc/MyDataSource"); 
System.err.println("DS: " + ds.toString()); 
Connection conn = ds.getConnection(); 
+0

John, Vui lòng đăng đầy đủ StackTrace. –

+0

@DarkRider, stacktrace add, cũng đính kèm đoạn mã – John

Trả lời

2

Đã trải qua cùng một viễn cảnh lâu dài.

Liên kết này Here đã giúp tôi.

+0

cảm ơn vì sự trợ giúp, tôi đã đọc liên kết đó trước đây, theo sau nhiều đề xuất ở đó, nhưng vẫn cùng một vấn đề ... – John

4

Tôi nhận ra rằng tôi đã xác định tài nguyên hai lần, một lần trong TOMCAT_HOME/conf/context.xml và trong tệp applicationPath/META-INF/context.xml của tôi. Khi tôi đã xóa tài nguyên khỏi TOMCAT_HOME/conf/context.xml, mọi thứ hoạt động tốt.

Các vấn đề liên quan