spring transaction testing with hibernate

本文介绍了一个使用Spring框架进行事务管理的实例,包括编程式事务管理和声明式事务管理两种方式,并展示了具体的实现代码。
<beans  xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:aop="http://www.springframework.org/schema/aop" 
xmlns:tx="http://www.springframework.org/schema/tx" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation=" 
	http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
	http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-2.5.xsd 
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd  
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
    http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd"> 
    
   <description>Quick DAO Start for Spring</description>
    
   <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
     <property name="sessionFactory" ref="sessionFactory"></property>
   </bean>
   <!--programming transaction-->
   <bean id="tsService" class="com.transaction.SaveWithTs">
     <property name="hibernateTemplate" ref="hibernateTemplate"></property>
     <property name="transactionTemplate">
       <bean class="org.springframework.transaction.support.TransactionTemplate">
         <property name="transactionManager" ref="transactionManager">
         </property>
       </bean>
     </property>
   </bean>
   <!--declaring transaction-->
   <bean id="tsProxyService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
     <property name="target" ref="tsProxyTransactionImpl"></property>
     <property name="proxyInterfaces" value="com.transaction.TsProxyTransaction"></property>
     <property name="transactionManager" ref="transactionManager"></property>
     <property name="transactionAttributes">
       <props>
         <prop key="add*">PROPAGATION_REQUIRED</prop>
         <!--  <prop key="*">PROPAGATION_SUPPORTS</prop>-->
       </props>
     </property>
   </bean>
   <bean id="tsProxyTransactionImpl" class="com.transaction.TsProxyTransactionImpl">
     <!--  <property name="hibernateTemplate" ref="hibernateTemplate"></property>-->
     <property name="sessionFactory" ref="sessionFactory"></property>
   </bean>
   
 
     <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
       <property name="sessionFactory" ref="sessionFactory"></property>
     </bean>
     <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
       <property name="dataSource" ref="dataSource"></property>
       <property name="mappingResources">
         <list>
           <value>com/dao/Area.hbm.xml</value>
         </list>
       </property>
       <property name="hibernateProperties">
         <props>
           <prop key="hibernate.dialect">${hibernate.dialect}</prop>
         </props>
       </property>
     </bean>
     
     <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
       <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
       <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"></property>
       <property name="username" value="jil"></property>
       <property name="password" value="jil"></property>
     </bean> 


   </beans>

 <!--programming transaction class testing-->

package com.transaction;


import org.hibernate.HibernateException;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallback;
import org.springframework.transaction.support.TransactionTemplate;

import com.dao.Area;

public class SaveWithTs implements TransactionCallback {
	
	private TransactionTemplate transactionTemplate;
    private HibernateTemplate hibernateTemplate;

	public Object doInTransaction(TransactionStatus ts) {
		// TODO Auto-generated method stub
		return null;
	}
	public void saveWithTs(){
		transactionTemplate.execute(new TransactionCallback(){

			public Object doInTransaction(TransactionStatus ts) {
				// TODO Auto-generated method stub
				try{
					
					Area area = new Area();
					area.setAreaname("tanglei");
					area.setAreadetail("tanglei");
					area.setPid(new Long(10000));
					area.setAreaid(new Long(10000));
					area.setAreanum(new Long(10000));
					//jdbcTemplate.execute("insert into Area values(1000,'hehe','haha',100,100)");
					hibernateTemplate.save(area);
				    int j=1/0;
				} catch (HibernateException e) {
					ts.isRollbackOnly();
				}
				return null;
			}			
		});	
	}

	public void setTransactionTemplate(TransactionTemplate transactionTemplate) {
		this.transactionTemplate = transactionTemplate;
	}
	public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
		this.hibernateTemplate = hibernateTemplate;
	}
}

 <!--declaring transaction class testing-->

package com.transaction;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.dao.Area;

public class TsProxyTransactionImpl extends HibernateDaoSupport implements TsProxyTransaction {


	public void addArea() {
		// TODO Auto-generated method stub
		Area area = new Area();
		area.setAreaname("tanglei");
		area.setAreadetail("tanglei");
		area.setPid(new Long(10000));
		area.setAreaid(new Long(10000));
		area.setAreanum(new Long(10000));
		//hibernateTemplate.save(area);
		getHibernateTemplate().save(area);
		//int j=1/0;
	}
	public void saveArea() {
		// TODO Auto-generated method stub
		Area area = new Area();
		area.setAreaname("tanglei");
		area.setAreadetail("tanglei");
		area.setPid(new Long(10000));
		area.setAreaid(new Long(10000));
		area.setAreanum(new Long(10000));
		getHibernateTemplate().save(area);
		int j=1/0;
	}

}

 

物联网通信协议测试是保障各类设备间实现可靠数据交互的核心环节。在众多适用于物联网的通信协议中,MQTT(消息队列遥测传输)以其设计简洁与低能耗的优势,获得了广泛应用。为确保MQTT客户端与服务端的实现严格遵循既定标准,并具备良好的互操作性,实施系统化的测试验证至关重要。 为此,采用TTCN-3(树表结合表示法第3版)这一国际标准化测试语言构建的自动化测试框架被引入。该语言擅长表达复杂的测试逻辑与数据结构,同时保持了代码的清晰度与可维护性。基于此框架开发的MQTT协议一致性验证套件,旨在自动化地检验MQTT实现是否完全符合协议规范,并验证其与Eclipse基金会及欧洲电信标准化协会(ETSI)所发布的相关标准的兼容性。这两个组织在物联网通信领域具有广泛影响力,其标准常被视为行业重要参考。 MQTT协议本身存在多个迭代版本,例如3.1、3.1.1以及功能更为丰富的5.0版。一套完备的测试工具必须能够覆盖对这些不同版本的验证,以确保基于各版本开发的设备与应用均能满足一致的质量与可靠性要求,这对于物联网生态的长期稳定运行具有基础性意义。 本资源包内包含核心测试框架文件、一份概述性介绍文档以及一份附加资源文档。这些材料共同提供了关于测试套件功能、应用方法及可能包含的扩展工具或示例的详细信息,旨在协助用户快速理解并部署该测试解决方案。 综上所述,一个基于TTCN-3的高效自动化测试框架,为执行全面、标准的MQTT协议一致性验证提供了理想的技术路径。通过此类专业测试套件,开发人员能够有效确保其MQTT实现的规范符合性与系统兼容性,从而为构建稳定、安全的物联网通信环境奠定坚实基础。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值