问题
I am trying to configure JTA Transactions with Atomkios in Tomcat 5.5 for jndi support I am using spring,jpa+hybernate when i m trying to access my database, i am getting the error like this
org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82)
org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:572)
org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:636)
org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:665)
org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:673)
org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:713)
com.evolvus.springsecurity.impl.CustomJdbcDaoImpl.loadUsersByUsername(CustomJdbcDaoImpl.java:78)
org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl.loadUserByUsername(JdbcDaoImpl.java:152)
com.evolvus.springsecurity.impl.UsernamePasswordAuthenticationProvider.authenticate(UsernamePasswordAuthenticationProvider.java:27)
org.springframework.security.authentication.ProviderManager.doAuthentication(ProviderManager.java:120)
org.springframework.security.authentication.AbstractAuthenticationManager.authenticate(AbstractAuthenticationManager.java:48)
com.evolvus.springsecurity.impl.LoginAuthenticationFilter.attemptAuthentication(LoginAuthenticationFilter.java:38)
org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:109)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:149)
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
my config.xml
<beans: bean id="dataSource"
class="org.springframework.jndi.JndiObjectFactoryBean" >
<beans: property name="jndiName">
<beans:value>java:comp/env/jdbc/welcome</beans:value>
</beans: property>
</beans: bean>
and i configure data source in tomcat5.5/config/context.xml
<Resource name="jdbc/welcome"
auth="Container"
type="com.atomikos.jdbc.AtomikosDataSourceBean"
factory="com.atomikos.tomcat.BeanFactory"
uniqueResourceName="jdbc/myDB"
xaDataSourceClassName="org.apache.derby.jdbc.EmbeddedXADataSource"
maxPoolSize="3"
minPoolSize="1"
xaProperties.databaseName="payhub"
xaProperties.url="jdbc\:mysql\://devserver\:3306/payhub"
/>
and in my application web.xml is
<resource-ref>
<description>PaymentsDatabase</description>
<res-ref-name>jdbc/welcome</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
what mistake i have done here?
回答1:
Must specify your Context like: for example:
META-INF/context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource
name="jdbc/database"
auth="Container"
type="javax.sql.DataSource"
maxActive="4"
maxIdle="2"
username="root"
maxWait="5000"
driverClassName="com.mysql.jdbc.Driver"
password="password"
url="jdbc:mysql://localhost:3306/database_name"/>
</Context>
WEB-INF/web.xml
<web-app>
...
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/app-context.xml</param-value>
</context-param>
...
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/database</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
app-context.xml
...
<jee:jndi-lookup id="dataSourcejndi" jndi-name="jdbc/database"
lookup-on-startup="false" proxy-interface="javax.sql.DataSource"
cache="true" resource-ref="true" />
...
<beans: bean id="dataSource"
class="org.springframework.jndi.JndiObjectFactoryBean" lazy-init="true">
<property name="dataSource" ref="dataSourcejndi" />
</beans: bean>
...
Hope helps...
来源:https://stackoverflow.com/questions/4256592/cannot-create-jdbc-driver-of-class-for-connect-url-null