2014-09-03 89 views
2

我正在創建一個使用hibernate 4.1.4,struts 2.1和spring 3.1.1的web項目,而且我正面臨一個問題。我不知道爲什麼會出現這種情況: 當我使用 它讓我看到這樣的一個錯誤:java.sql.SQLException:沒有合適的驅動程序<tx:annotation-driven />

Cannot create JDBC driver of class '' for connect URL 'jdbc:mysql://localhost:3306/enrollment' 
java.sql.SQLException: No suitable driver 
at java.sql.DriverManager.getDriver(DriverManager.java:278) 
at org.apache.commons.dbcp.BasicDataSource.createConnectionFactory(BasicDataSource.java:1437) 
at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1371) 
at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044) 
at org.hibernate.service.jdbc.connections.internal.DatasourceConnectionProviderImpl.getConnection(DatasourceConnectionProviderImpl.java:141) 
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcServicesImpl.java:242) 
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:117) 
at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75) 
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159) 
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131) 
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:71) 
at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2277) 
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2273) 
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1742) 
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1782) 
at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:189) 
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:350) 
at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:335) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:567) 
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) 
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) 
at com.rpkavosh.actions.AddNewStudent.execute(AddNewStudent.java:44) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452) 
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254) 
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176) 
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263) 
at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) 
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:133) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207) 
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207) 
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:142) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:166) 
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) 
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) 
at com.opensymphony.xwork2.interceptor.AliasIntercep 

,並沒有通過我的春天層,如服務去了,但是當我刪除此從我的applicationContext.xml的代碼行,它會經過服務,然後道,但我不能創造任何會話: HibernateException的無會話發現當前線程, 我的applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<beans 
xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:p="http://www.springframework.org/schema/p" 
xmlns:aop="http://www.springframework.org/schema/aop" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
http://www.springframework.org/schema/tx 
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd" 
xmlns:tx="http://www.springframework.org/schema/tx"> 


<bean id="dataSource" 
    class="org.apache.commons.dbcp.BasicDataSource"> 
    <property name="url" 
     value="jdbc:mysql://localhost:3306/enrollment"> 
    </property> 
    <property name="username" value="root"></property> 
    <property name="password" value="root"></property> 
</bean> 
<bean id="sessionFactory" 
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="dataSource"> 
     <ref bean="dataSource" /> 
    </property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.dialect"> 
       org.hibernate.dialect.MySQLDialect 
      </prop> 
     </props> 
    </property> 
    <property name="mappingResources"> 
     <list> 
      <value>com/rpkavosh/hibernate/Students.hbm.xml</value> 
      <value>com/rpkavosh/hibernate/Enrollment.hbm.xml</value> 
      <value>com/rpkavosh/hibernate/Classroom.hbm.xml</value></list> 
    </property> 

    <!-- <property name="mappingLocations"> 
     <list> 
      <value>classpath*:/com/rpkavosh/hibernate/Students.hbm.xml</value> 
      <value>classpath*:/com/rpkavosh/hibernate/Enrollment.hbm.xml</value> 
      <value>classpath*:/com/rpkavosh/hibernate/Classroom.hbm.xml</value></list> 
    </property>--> 

</bean> 
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 

<!--<tx:advice id="txAdvice" transaction-manager="transactionManager" > 
    <tx:attributes> 
     <tx:method name="find*" read-only="true" /> 
     <tx:method name="*"/> 
    </tx:attributes> 
</tx:advice>--> 

<!--<aop:config>--> 
<!--<aop:pointcut id="serviceUpdateOperations" expression="execution(* *ServiceImpl.*(..))" />--> 
<!--<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceUpdateOperations"/>--> 
<!--</aop:config>--> 


<tx:annotation-driven transaction-manager="transactionManager"/> 
<bean 
    id="StudentsDAO" class="com.rpkavosh.hibernate.StudentsDAO"> 
    <property name="sessionFactory"> 
     <ref bean="sessionFactory" /> 
    </property> 
</bean> 

<bean id="StudentService" class="com.rpkavosh.service.StudentServiceImpl"> 
    <property name="dao" ref="StudentsDAO"/> 
</bean> 

<bean id="EnrollmentDAO" 
    class="com.rpkavosh.hibernate.EnrollmentDAO"> 
    <property name="sessionFactory"> 
     <ref bean="sessionFactory" /> 
    </property> 
</bean> 
<bean id="ClassroomDAO" 
    class="com.rpkavosh.hibernate.ClassroomDAO"> 
    <property name="sessionFactory"> 
     <ref bean="sessionFactory" /> 
    </property> 
</bean> 

,也許它是有用的,當我調試我的項目也將通過這一行動

public String execute() { 
    if(firstName.equals("") || lastName.equals("")){ 
     return ERROR; 
    } 

    ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); 
    Students student = new Students(); 
    student.setFirstName(firstName); 
    student.setLastName(lastName); 
    StudentService service = (StudentService) ctx.getBean("StudentService"); 
    service.addStudent(student); 
    return SUCCESS; 
} 

,當我使用TX:它要打開類JdkDynamicAopProxy註解,它不能,但是當我做不使用tx:annotations,它將轉到StudentServiceImpl.addStudent(學生)!

我很困惑,這是我第一個使用j2ee的項目,我應該在明天早上發佈:|,所以任何建議將不勝感激。

+3

您需要在數據源bean中定義'driverClass'屬性。 – 2014-09-03 12:40:33

+0

你能多解釋一下嗎?我怎樣才能做到這一點? – 2014-09-03 12:41:48

+3

與設置網址,用戶名和密碼的方式相同。 – 2014-09-03 12:44:16

回答

4

你的數據源豆應該像下面

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
     <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> 
     <property name="url" value="jdbc:mysql://localhost:3306/enrollment"></property> 
     <property name="username" value="root"></property> 
     <property name="password" value="root"></property> 
    </bean> 

注意你缺少的基礎數據源driverClassName屬性。

相關問題