2012-01-21 38 views
9

no puedo hacer que funcione para conseguir la conexión de origen de datos obtenidos a partir de JNDI en Tomcat 7.0, lo que resulta en error como este:Configuración de JNDI del origen de datos con Oracle en Tomcat

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

que he hecho en muchas maneras siguiente las sugerencias del doc y otras personas, pero aún no pueden arreglarlo. Aquí están mis ajustes:

En 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> 

En 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> 

Además, traté de poner eso en server.xml, tampoco trabajar

<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> 

Coloque las clases 12.jar y ojdbc14.jar en Tomcat 7.0 \ lib

¿Alguien puede indicarme el camino correcto?

Perdí tanto tiempo en esa configuración pero todavía no puedo hacer que funcione. ¡Gracias por adelantado!

John


Seguimiento de la pila de la siguiente manera:

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 

Y aquí está el código, excepto en ds.getConnection. (No es típica manera de conseguir DS, bcoz necesidad para que coincida con WebSphere camino ...)

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, Kindly post full StackTrace. –

+0

@DarkRider, stacktrace add, también adjunté el fragmento de código – John

Respuesta

2

han pasado por el mismo escenario mucho tiempo atrás.

Este enlace Here me ayudó.

+0

gracias por la ayuda, he leído ese enlace anteriormente, seguí muchas de las sugerencias allí, pero sigue siendo el mismo problema ... – John

4

Me di cuenta de que definí el recurso dos veces, una en mi TOMCAT_HOME/conf/context.xml y en mi applicationPath/META-INF/context.xml. Una vez que eliminé el recurso de TOMCAT_HOME/conf/context.xml, todo funcionó de maravilla.

Cuestiones relacionadas