如何在Spring中使用Tomcat 7提供的JNDI DataSource?

时间:2015-01-20 10:46:25

标签: java spring tomcat datasource jndi

我按照这个回答How to use JNDI DataSource provided by Tomcat in Spring?但是我得到以下例外:

java.lang.NullPointerException
at sun.jdbc.odbc.JdbcOdbcDriver.getProtocol(JdbcOdbcDriver.java:524)
at sun.jdbc.odbc.JdbcOdbcDriver.knownURL(JdbcOdbcDriver.java:493)
at sun.jdbc.odbc.JdbcOdbcDriver.acceptsURL(JdbcOdbcDriver.java:307)
at java.sql.DriverManager.getDriver(DriverManager.java:273)
at com.mchange.v2.c3p0.DriverManagerDataSource.driver(DriverManagerDataSource.java:224)
at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:120)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:143)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:132)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
at com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)
at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)

tomcat server.xml:

<GlobalNamingResources>
<Resource 
    name="jdbc/welcome-kit"
    global="jdbc/welcome-kit"       
    auth="Container" 
    type="javax.sql.DataSource" 
    username="name" 
    password="pass" 
    driverClassName="oracle.jdbc.driver.OracleDriver"
    url="host/port:test" 
    maxActive="8" 
    maxIdle="4"
/>

tomcat context.xml

<ResourceLink global="jdbc/welcome-kit" name="jdbc/welcome-kit" type="javax.sql.DataSource" />

web application web.xml:

<resource-ref>
 <description>DB Connection</description>
 <res-ref-name>jdbc/welcome-kit</res-ref-name>
 <res-type>javax.sql.DataSource</res-type>
 <res-auth>Container</res-auth>

弹簧context.xml中:

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/jdbc/welcome-kit">
</bean>

我还在tomcat / lib

中添加了ojdbc.jar

1 个答案:

答案 0 :(得分:0)

在web.xml中

<resource-ref>
    <res-ref-name>myDatasource</res-ref-name>
    <res-type>javax.sql.XADataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

在你的春季申请环境中:

<!-- Define the JNDI datasource -->
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:comp/env/myDatasource" />
</bean>
相关问题