能不能说的具体点啊 关键是我现在的配置方法,tomcat启动不了 报错啊 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jtaTransactionManager' defined in ServletContext resource [/WEB-INF/config/spring/spring-base.xml]: Invocation of init method failed; nested exception is org.springframework.transaction.TransactionSystemException: JTA UserTransaction is not available at JNDI location [java:comp/UserTransaction]; nested exception is javax.naming.NamingException: Cannot create resource instance Caused by: org.springframework.transaction.TransactionSystemException: JTA UserTransaction is not available at JNDI location [java:comp/UserTransaction]; nested exception is javax.naming.NamingException: Cannot create resource instance Caused by: javax.naming.NamingException: Cannot create resource instance at org.apache.naming.factory.TransactionFactory.getObjectInstance(TransactionFactory.java:113) at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304) at org.apache.naming.NamingContext.lookup(NamingContext.java:793) at org.apache.naming.NamingContext.lookup(NamingContext.java:140) at org.apache.naming.NamingContext.lookup(NamingContext.java:781) at org.apache.naming.NamingContext.lookup(NamingContext.java:153) at org.apache.naming.SelectorContext.lookup(SelectorContext.java:137) at javax.naming.InitialContext.lookup(InitialContext.java:351)
具体使用的例子吗?下边就是。1.x的配置方式,也许有点过时了,却一样实用,而且更容易理解。
只需要在Spring的文件中写配置即可,你的源代码中不需要任何与事务相关的语句。——这就是AOP的威力:可以在不改源代码的基础上加入新的功能。我担心的是,光看这个,一点都起不到作用。
楼主去网上搜搜AOP、声明式事务的介绍和示例吧,挺多的。呵呵。
<!-- 给业务类配置声明式事务 --> <bean abstract="true" name="serviceTemplate" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="txManager"></property>
<property name="transactionAttributes">
<props>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="del*">PROPAGATION_REQUIRED</prop>
<prop key="mod*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_SUPPORTS, readOnly</prop>
</props>
</property>
</bean>
<bean parent="serviceTemplate" name="userService" >
<property name="target" ref="userServiceTarget" />
</bean>
<bean name="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean name="userServiceTarget" class="biz.UserService">
<property name="userDao" ref="userDao" />
</bean>
class="org.springframework.transaction.jta.JtaTransactionManager" />
<bean id="baseTxProxy" lazy-init="true"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager">
<ref bean="jtaTransactionManager" />
</property>
<property name="transactionAttributes">
<props>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="del*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<bean id="testService" parent="baseTxProxy">
<property name="target">
<bean class="com.kuke.test.service.TestService">
<property name="testDAO" ref="testDAO"></property>
</bean>
</property>
</bean>
public class TestServiceImpl implements TestService { ... }
<bean id="testService" parent="baseTxProxy">
<property name="target">
<bean class="com.kuke.test.service.TestServiceImpl">
<property name="testDAO" ref="testDAO"></property>
</bean>
</property>
</bean>
最后调用:
TestService testService = (TestService)xxxx.getBean("testService");
testService.addXxxx(...);
1) SPRING的事务的执行,是以其配置的方法为单位
2) 想要借助SPRING的配置事务,只要继承自SPRING FRAMEWORK的DataAccessException,把其抛出,在SERVICE方法执行过程中,一旦遇到该类型异常,即回滚具体代码楼上已有类似的,就不再帖CODE了;
关键是我现在的配置方法,tomcat启动不了
报错啊
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jtaTransactionManager' defined in ServletContext resource [/WEB-INF/config/spring/spring-base.xml]: Invocation of init method failed; nested exception is org.springframework.transaction.TransactionSystemException: JTA UserTransaction is not available at JNDI location [java:comp/UserTransaction]; nested exception is javax.naming.NamingException: Cannot create resource instance
Caused by:
org.springframework.transaction.TransactionSystemException: JTA UserTransaction is not available at JNDI location [java:comp/UserTransaction]; nested exception is javax.naming.NamingException: Cannot create resource instance
Caused by:
javax.naming.NamingException: Cannot create resource instance
at org.apache.naming.factory.TransactionFactory.getObjectInstance(TransactionFactory.java:113)
at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304)
at org.apache.naming.NamingContext.lookup(NamingContext.java:793)
at org.apache.naming.NamingContext.lookup(NamingContext.java:140)
at org.apache.naming.NamingContext.lookup(NamingContext.java:781)
at org.apache.naming.NamingContext.lookup(NamingContext.java:153)
at org.apache.naming.SelectorContext.lookup(SelectorContext.java:137)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
<bean id="hibernateTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
<bean id="hibernateTransactionProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
abstract="true">
<property name="transactionManager" ref="hibernateTransactionManager" />
<property name="transactionAttributes">
<props>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="create*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="delete*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="update*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="save*">PROPAGATION_REQUIRED,-Exception</prop>
<prop key="dispatch*">PROPAGATION_REQUIRED</prop>
<prop key="receive*">PROPAGATION_REQUIRED</prop>
<prop key="revert*">PROPAGATION_REQUIRED</prop>
<prop key="*create">PROPAGATION_REQUIRED,-Exception</prop>
</props>
</property>
</bean><!-- /采价任务执行情况 事务在service层/ -->
<bean id="pcExecuteTaskService" parent="hibernateTransactionProxy">
<property name="target">
<bean class="com.zdvictory.wjj.pricegather.service.PcExecuteTaskServiceImpl">
<property name="pcExecuteTaskDao"><ref bean="pcExecuteTaskDao" /></property>
<property name="pcTaskInfoDao"><ref bean="pcTaskInfoDao" /></property>
<property name="pcCollectionPlaceDao"><ref bean="pcCollectionPlaceDao" /></property>
<property name="pcMerchandiseInfoDao"><ref bean="pcMerchandiseInfoDao" /></property>
<property name="pcParticularTargetDao"><ref bean="pcParticularTargetDao" /></property>
<property name="pcColParticularinfoDao"><ref bean="pcColParticularinfoDao" /></property>
<property name="priceGuideLineDao"><ref bean="priceGuideLineDao"/></property>
<property name="pcMerchandIsClassDao"><ref bean="pcMerchandIsClassDao"/></property>
<property name="logsDao"><ref bean="logsDao"/></property>
</bean>
</property>
</bean>