BeanNameAutoProxyCreator总结并测试事务异常
2008年04月25日 星期五 15:36
-----------------------------------------------------------------------------------------------------------
不处于事务控制下
无论是否发生导常
都 不提交记录
-----------------------------------------------------------------------------------------------------------
处于事务控制下
发生导常
不提交记录
-----------------------------------------------------------------------------------------------------------
配置文件最好分开
<prop key="hibernate.show_sql">true</prop>
-----------------------------------------------------------------------------------------------------------
drop TABLE sampledb.orders;
CREATE TABLE sampledb.orders(
`ID` BIGINT NOT NULL,
`ORDER_NUMBER` VARCHAR(15),
`CUSTOMER_ID` BIGINT,
PRIMARY KEY(`ID`)
)
ENGINE = InnoDB;
drop TABLE `sampledb`.`customers`;
CREATE TABLE `sampledb`.`customers` (
`ID` BIGINT NOT NULL,
`NAME` VARCHAR(45),
PRIMARY KEY(`ID`)
)
ENGINE = InnoDB;
alter table sampledb.orders
add constraint constraint_constraint_fk
foreign key (CUSTOMER_ID)
references sampledb.customers(ID);
-----------------------------------------------------------------------------------------------------------
用BeanNameAutoProxyCreator测试事务异常
BeanNameAutoProxyCreator总结
配置文件分开
-----------------------------------------------------------------------------------------------------------
先添加Spring Capabilities
再添加Hibernate Capabilities
-----------------------------------------------------------------------------------------------------------
package service;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class ServiceFactory {
public static ApplicationContext ctx;
public static ApplicationContext getApplicationContext() {
if (ctx == null) {
ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
}
return ctx;
}
}
-----------------------------------------------------------------------------------------------------------
package service;
import db.Customers;
public interface CustomersService {
public void save(Customers c);
}
-----------------------------------------------------------------------------------------------------------
package service;
import javax.sql.DataSource;
import org.springframework.jdbc.datasource.DataSourceUtils;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.support.TransactionTemplate;
import db.Customers;
import db.CustomersDAO;
public class CustomersServiceImpl extends HibernateDaoSupport implements
CustomersService {
private TransactionTemplate transactionTemplate;
public void setTransactionManager(
PlatformTransactionManager transactionManager) {
this.transactionTemplate = new TransactionTemplate(transactionManager);
}
public void save(Customers c) {
CustomersDAO dao = (CustomersDAO) ServiceFactory
.getApplicationContext().getBean("CustomersDAO");
dao.save(c);
// 下面两行代码没有实际意义,仅仅为了引发数据库异常
//DataSource ds = null;
//DataSourceUtils.getConnection(ds);
}
}
-----------------------------------------------------------------------------------------------------------
package test;
import service.CustomersService;
import service.ServiceFactory;
import db.Customers;
public class Demo {
public static void main(String[] args) {
CustomersService service = (CustomersService) ServiceFactory
.getApplicationContext().getBean("CustomersServiceImpl");
Customers c = new Customers();
c.setId(1l);
c.setName("xiong");
service.save(c);
System.out.println("END");
}
}
-----------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean
>
<property
value="file:src/hibernate.cfg.xml">
</property>
</bean>
<bean >
<property >
<ref bean="localSessionFactory" />
</property>
</bean>
<bean >
<property >
<ref bean="localSessionFactory" />
</property>
</bean>
<bean >
<property >
<ref bean="localSessionFactory" />
</property>
</bean>
<!-- 定义事务管理器,使用适用于Hibernte的事务管理器-->
<bean
>
<property >
<ref bean="localSessionFactory" />
</property>
</bean>
<!-- 配置事务拦截器-->
<bean
>
<!-- 事务拦截器bean需要依赖注入一个事务管理器 -->
<property ref="transactionManager" />
<property >
<!-- 下面定义事务传播属性-->
<props>
<!-- <prop key="save">PROPAGATION_REQUIRED</prop> -->
<prop key="save*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<!-- 定义BeanNameAutoProxyCreator,该bean是个bean后处理器,无需被引用,因此没有id属性
这个bean后处理器,根据事务拦截器为目标bean自动创建事务代理
<bean >
指定对满足哪些bean name的bean自动生成业务代理 -->
<bean
>
<property >
<!-- 下面是所有需要自动创建事务代理的bean-->
<list>
<!-- <value>CustomersServiceImpl</value>-->
<value>CustomersServiceImpl</value>
</list>
<!-- 此处可增加其他需要自动创建事务代理的bean-->
</property>
<!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器-->
<property >
<list>
<value>transactionInterceptor</value>
<!-- 此处可增加其他新的Interceptor -->
</list>
</property>
</bean>
</beans>
-----------------------------------------------------------------------------------------------------------
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<session-factory>
<property >root</property>
<property >
jdbc:mysql://localhost:3306/sampledb
</property>
<property >
org.hibernate.dialect.MySQLDialect
</property>
<property >
local_mysql
</property>
<property >
com.mysql.jdbc.Driver
</property>
<property >true</property>
<mapping resource="db/Orders.hbm.xml" />
<mapping resource="db/Customers.hbm.xml" />
</session-factory>
</hibernate-configuration>
-----------------------------------------------------------------------------------------------------------
不处于事务控制下
无论是否发生导常
都 不提交记录
-----------------------------------------------------------------------------------------------------------
处于事务控制下
发生导常
不提交记录
-----------------------------------------------------------------------------------------------------------
配置文件最好分开
<prop key="hibernate.show_sql">true</prop>
-----------------------------------------------------------------------------------------------------------
drop TABLE sampledb.orders;
CREATE TABLE sampledb.orders(
`ID` BIGINT NOT NULL,
`ORDER_NUMBER` VARCHAR(15),
`CUSTOMER_ID` BIGINT,
PRIMARY KEY(`ID`)
)
ENGINE = InnoDB;
drop TABLE `sampledb`.`customers`;
CREATE TABLE `sampledb`.`customers` (
`ID` BIGINT NOT NULL,
`NAME` VARCHAR(45),
PRIMARY KEY(`ID`)
)
ENGINE = InnoDB;
alter table sampledb.orders
add constraint constraint_constraint_fk
foreign key (CUSTOMER_ID)
references sampledb.customers(ID);
-----------------------------------------------------------------------------------------------------------
用BeanNameAutoProxyCreator测试事务异常
BeanNameAutoProxyCreator总结
配置文件分开
-----------------------------------------------------------------------------------------------------------
先添加Spring Capabilities
再添加Hibernate Capabilities
-----------------------------------------------------------------------------------------------------------
package service;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class ServiceFactory {
public static ApplicationContext ctx;
public static ApplicationContext getApplicationContext() {
if (ctx == null) {
ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
}
return ctx;
}
}
-----------------------------------------------------------------------------------------------------------
package service;
import db.Customers;
public interface CustomersService {
public void save(Customers c);
}
-----------------------------------------------------------------------------------------------------------
package service;
import javax.sql.DataSource;
import org.springframework.jdbc.datasource.DataSourceUtils;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.support.TransactionTemplate;
import db.Customers;
import db.CustomersDAO;
public class CustomersServiceImpl extends HibernateDaoSupport implements
CustomersService {
private TransactionTemplate transactionTemplate;
public void setTransactionManager(
PlatformTransactionManager transactionManager) {
this.transactionTemplate = new TransactionTemplate(transactionManager);
}
public void save(Customers c) {
CustomersDAO dao = (CustomersDAO) ServiceFactory
.getApplicationContext().getBean("CustomersDAO");
dao.save(c);
// 下面两行代码没有实际意义,仅仅为了引发数据库异常
//DataSource ds = null;
//DataSourceUtils.getConnection(ds);
}
}
-----------------------------------------------------------------------------------------------------------
package test;
import service.CustomersService;
import service.ServiceFactory;
import db.Customers;
public class Demo {
public static void main(String[] args) {
CustomersService service = (CustomersService) ServiceFactory
.getApplicationContext().getBean("CustomersServiceImpl");
Customers c = new Customers();
c.setId(1l);
c.setName("xiong");
service.save(c);
System.out.println("END");
}
}
-----------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean
>
<property
value="file:src/hibernate.cfg.xml">
</property>
</bean>
<bean >
<property >
<ref bean="localSessionFactory" />
</property>
</bean>
<bean >
<property >
<ref bean="localSessionFactory" />
</property>
</bean>
<bean >
<property >
<ref bean="localSessionFactory" />
</property>
</bean>
<!-- 定义事务管理器,使用适用于Hibernte的事务管理器-->
<bean
>
<property >
<ref bean="localSessionFactory" />
</property>
</bean>
<!-- 配置事务拦截器-->
<bean
>
<!-- 事务拦截器bean需要依赖注入一个事务管理器 -->
<property ref="transactionManager" />
<property >
<!-- 下面定义事务传播属性-->
<props>
<!-- <prop key="save">PROPAGATION_REQUIRED</prop> -->
<prop key="save*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<!-- 定义BeanNameAutoProxyCreator,该bean是个bean后处理器,无需被引用,因此没有id属性
这个bean后处理器,根据事务拦截器为目标bean自动创建事务代理
<bean >
指定对满足哪些bean name的bean自动生成业务代理 -->
<bean
>
<property >
<!-- 下面是所有需要自动创建事务代理的bean-->
<list>
<!-- <value>CustomersServiceImpl</value>-->
<value>CustomersServiceImpl</value>
</list>
<!-- 此处可增加其他需要自动创建事务代理的bean-->
</property>
<!-- 下面定义BeanNameAutoProxyCreator所需的事务拦截器-->
<property >
<list>
<value>transactionInterceptor</value>
<!-- 此处可增加其他新的Interceptor -->
</list>
</property>
</bean>
</beans>
-----------------------------------------------------------------------------------------------------------
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<session-factory>
<property >root</property>
<property >
jdbc:mysql://localhost:3306/sampledb
</property>
<property >
org.hibernate.dialect.MySQLDialect
</property>
<property >
local_mysql
</property>
<property >
com.mysql.jdbc.Driver
</property>
<property >true</property>
<mapping resource="db/Orders.hbm.xml" />
<mapping resource="db/Customers.hbm.xml" />
</session-factory>
</hibernate-configuration>
-----------------------------------------------------------------------------------------------------------
本篇日志被作者设置为禁止发表新评论
©2008 Baidu
引文来源 BeanNameAutoProxyCreator总结并测试事务异常_熊熊之家