最近花了一週的時間想弄弄sturts2+spring3+hibernate4組合,就在網上下載了最近的struts2(struts-2.3.4.1)、hibernate四、spring3。寫好類和配置文件其中配置文件代碼以下:java
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd" [ <!ENTITY contextInclude SYSTEM "org/springframework/web/portlet/context/WEB-INF/contextInclude.xml"> ]> <beans> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="com.mysql.jdbc.Driver"></property> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/defauction?useUnicode=true&characterEncoding=UTF-8"></property> <property name="user" value="root"></property> <property name="password" value="420322"></property> <!-- 指定鏈接數據庫鏈接池的最大鏈接數 --> <property name="maxPoolSize" value="20"/> <!-- 指定鏈接數據庫鏈接池的最小鏈接數 --> <property name="minPoolSize" value="1"/> <!-- 指定鏈接數據庫鏈接池的初始化鏈接數 --> <property name="initialPoolSize" value="1"/> <!-- 指定鏈接數據庫鏈接池的鏈接的最大空閒時間 --> <property name="maxIdleTime" value="20"/> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="mappingResources"> <list> <value>AuctionUser.hbm.xml</value> <value>Bid.hbm.xml</value> <value>Item.hbm.xml</value> <value>Kind.hbm.xml</value> <value>State.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props> <!-- <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop> --> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.generate_statistics">true</prop> <prop key="hibernate.connection.release_mode">auto</prop> <prop key="hibernate.autoReconnect">true</prop> <prop key="hibernate.cglib.use_reflection_optimizer">true</prop> <!--prop key="hibernate.current_session_context_class">thread</prop> --> <!--使用二級緩存 --> </props> </property> </bean> <!-- 配置數據庫的事務管理器--> <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager" abstract="false" lazy-init="default" autowire="default" dependency-check="default"> <property name="sessionFactory"> <ref bean="sessionFactory" /> </property> </bean> <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> <!-- 事務攔截器bean須要依賴注入一個事務管理器 --> <property name="transactionManager" ref="transactionManager"/> <property name="transactionAttributes"> <!-- 下面定義事務傳播屬性--> <props> <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="find*">PROPAGATION_REQUIRED</prop> <prop key="save*">PROPAGATION_REQUIRED</prop> <prop key="delete*">PROPAGATION_REQUIRED</prop> <prop key="update*">PROPAGATION_REQUIRED</prop> <prop key="*">PROPAGATION_REQUIRED</prop> </props> </property> </bean> <!-- 定義BeanNameAutoProxyCreator--> <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <!-- 指定對知足哪些bean name的bean自動生成業務代理 --> <property name="beanNames"> <!-- 下面是全部須要自動建立事務代理的bean--> <list> <value>mgr</value> </list> <!-- 此處可增長其餘須要自動建立事務代理的bean--> </property> <!-- 下面定義BeanNameAutoProxyCreator所需的事務攔截器--> <property name="interceptorNames"> <list> <!-- 此處可增長其餘新的Interceptor --> <value>transactionInterceptor</value> </list> </property> </bean> <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="host" value="smtp.163.com"/> <property name="javaMailProperties"> <props> <prop key="mail.smtp.auth">true</prop> <prop key="mail.smtp.timeout">25000</prop> </props> </property> <property name="username" value="dml124"/> <property name="password" value="dml420322"/> </bean> <bean id="mailMessage" class="org.springframework.mail.SimpleMailMessage"> <property name="from" value="spring_test@163.com"/> <property name="subject" value="競價通知"/> </bean> <bean id="mgr" class="com.service.impl.AuctionManagerImpl"> <property name="userDao" ref="auctionUserDao"/> <property name="bidDao" ref="bidDao"/> <property name="itemDao" ref="itemDao"/> <property name="kindDao" ref="kindDao"/> <property name="stateDao" ref="stateDao"/> <property name="mailSender" ref="mailSender"/> <property name="message" ref="mailMessage"/> </bean> <!-- <bean id="checkWiner" class="com.schedule.CheckWiner"> <property name="mgr" ref="mgr"/> </bean> <bean id="scheduledTask" class="org.springframework.scheduling.timer.ScheduledTimerTask"> <property name="delay" value="0"/> <property name="period" value="86400000"/> <property name="timerTask" ref="checkWiner"/> </bean> <bean id="timerFactory" class="org.springframework.scheduling.timer.TimerFactoryBean"> <property name="scheduledTimerTasks"> <list> <ref bean="scheduledTask"/> </list> </property> </bean> --> </beans>
寫好了 dao,service,action各類Java代碼。結果老是報錯。錯誤: java.lang.reflect.InvocationTargetExceptio;
部分代碼以下mysql
Session session = sessionFactory.openSession();
try {
Query query =sessionFactory.getCurrentSession().createQuery("from AuctionUser au where au.username= ? and au.userpass= ?"); query.setString(0, username);
query.setString(1, pass);
query.setMaxResults(1);
return (AuctionUser)query.uniqueResult();
}catch(Exception e){e.printStackTrace();} finally {
session.close();
}
紅色部分代碼報錯,這個錯誤不會拋出異常,只會在頁面顯示上面的代碼,研究好多天不知道爲何,實在沒辦法了就換各類jar包。將hibernate4的jar包換了,spring4的全都加進去了仍是報錯,最後將struts2的jar換爲以下圖
中的jar包就行了。並且我在想重現我用2.3.4包的報錯再也呈現不了了,很不理解爲何會出現這種錯誤。。web
不過在解決這個問題的過程當中學習了,spring的動態代理和aop切面方式管理事務,都是將TrasactionManager 做爲advise切入到被代理對象或者切入點。spring
hibernate4的事物可以獨立完成事物的管理,所以須要開啓事物級別爲 requaried。還有待學習。sql
就是那個錯誤讓我一週很頭疼,也很鬱悶。不過既然即覺了就多留意下。但願你們別犯一樣的錯誤,即便犯了也能夠能參考解決。解決不了能夠給我留言。我能及時回覆。。。數據庫