不得不寫的一篇博客sturts2+spring3+hibernate4的問題

            最近花了一週的時間想弄弄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&amp;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;

java.lang.reflect.InvocationTargetException

部分代碼以下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

    就是那個錯誤讓我一週很頭疼,也很鬱悶。不過既然即覺了就多留意下。但願你們別犯一樣的錯誤,即便犯了也能夠能參考解決。解決不了能夠給我留言。我能及時回覆。。。數據庫

相關文章
相關標籤/搜索