- 浏览: 238238 次
- 性别:
- 来自: 上海
最新评论
-
weigeshikebi:
不得不赞一个
解惑 spring 嵌套事务 -
siemens800:
Mac OS X 10.7.2 的光盘还有挖,帅锅帮刻个盘发来 ...
MacBook 升级内存记 -
cry615:
帖子很不错,java里任何一个东西都是一门学问,很有很强的逻辑 ...
理解 Java 的 GC 与 幽灵引用 -
sharkka:
sogo1986 写道楼主举的例 ...
解惑 spring 嵌套事务 -
sogo1986:
楼主举的例子并没用体 ...
解惑 spring 嵌套事务
在 spring 中, 事务管理一般是通过声明一个 txProxyTemplate, 然后业务 bean 中 parent = "txProxyTemplate", 这样做未免显得有些繁琐, 并且如果业务 bean 还需要其他拦截器, 配置也不太方便, 下面贴出我的配置, 用 DefaultAdvisorAutoProxyCreator 实现自动代理
这里利用 DefaultAdvisorAutoProxyCreator 实现了对容器中所有 bean 的自动代理, 增加一个需要事务的业务 bean 时只要在 transactionInterceptor 增加一行即可, 增加别的 interceptor 也非常方便,
极大减少了配置量
呵呵...都快一年了,版本都不一样了吧!
不是有意挖坟,确实有问题想交流。
为了尽量使接口简洁点,尝试把事务放在action中 (webwork),但是对action外面包一层事务处理后,action就不能用了,现在想到的也是自己做个拦截器,所有的方法都是 PROPAGATION_REQUIRED ,总觉得不太好,不知道有没有人有在action中处理事务的经验给介绍下。
啊!!!这个我还真的没有注意到,因为我所有的Service层都是*Service,我从来不用*Manager的。。。怪不得我的没问题,
关键是你的事务管理对象的名字是*Manager呀,怎么会没有问题出现呢?难道是我的人品问题??
我上面给的代码写的是*Service,*Manager,是为叻迎合大家的口味 我自己不用*Manager,只有*Service
啊!!!这个我还真的没有注意到,因为我所有的Service层都是*Service,我从来不用*Manager的。。。怪不得我的没问题,
关键是你的事务管理对象的名字是*Manager呀,怎么会没有问题出现呢?难道是我的人品问题??
啊!!!这个我还真的没有注意到,因为我所有的Service层都是*Service,我从来不用*Manager的。。。怪不得我的没问题,
受hongliang启发,我现在就用这个方法,但是发现一个Bug。里面代理匹配的名字有*Manager,就是想匹配所有的ManagerObject。但是好像没有注意到,这样配置会把transactionManager也匹配上,然后定义的是find以外的方法都是要事务的。也就说transactionManager执行getTransaction的时候还会要事务,然后就是死循环,造成溢出。。
我解决的办法就是transactionManager改称transactionManagerHibernate。这么做的时候一定要注意名字的问题。别一不小心,把一个不相关的东东给弄进来的。。。
对了,加Acegi的时候有很多*Manager,打算想一个比较好名字匹配。。
<beans> <!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"> <ref bean="sessionFactory"/> </property> </bean> <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> <property name="transactionManager" ref="transactionManager"/> <property name="transactionAttributeSource"> <value> com.skyon.user.manager.UserManager.*=PROPAGATION_REQUIRED #Add new defines here -> </value> </property> </bean> <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"> <property name="interceptorNames"> <list> <value>transactionInterceptor</value> <!-- 增加新的 Interceptor --> </list> </property> </bean> <bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor"> <property name="transactionInterceptor" ref="transactionInterceptor"/> </bean> </beans>
这里利用 DefaultAdvisorAutoProxyCreator 实现了对容器中所有 bean 的自动代理, 增加一个需要事务的业务 bean 时只要在 transactionInterceptor 增加一行即可, 增加别的 interceptor 也非常方便,
极大减少了配置量
评论
44 楼
flyeagle
2007-03-29
这个贴没人给跟一下吗?请大家指点一下
43 楼
flyeagle
2007-03-29
看来这个贴是没有人回复了,这个问题到底是怎么产生的呢?
42 楼
flyeagle
2007-03-29
我使用hongliang给出的配置方法出现了问题,请大家指点一下:
配置如下:
在不加入事务时,插入和查询没问题,在加入上面事务后,可以插入,但是在检索时出现如下问题:
这是为什么呢?
配置如下:
<bean id="userSortDao" class="com.hengji.dao.impl.UserSortDaoImpl"> <property name="sqlMapClient"> <ref bean="sqlMapClient" /> </property> </bean> <bean id="userSort[b]Service[/b]" class="com.hengji.service.impl.UserSortServiceImpl"> <property name="userSortDao"> <ref bean="userSortDao" /> </property> </bean> <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> <property name="transactionManager" ref="transactionManager" /> <property name="transactionAttributes"> <props> <prop key="save*">PROPAGATION_REQUIRED</prop> <prop key="update*">PROPAGATION_REQUIRED</prop> <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="*">PROPAGATION_REQUIRED,readOnly</prop> </props> </property> </bean> <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <property name="beanNames"> <value>*Service</value><!-- <value>*Service,*Manager</value> --> </property> <property name="interceptorNames"> <list> <value>transactionInterceptor</value> <!-- 此处增加新的Interceptor --> </list> </property> </bean> <bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor"> <property name="transactionInterceptor" ref="transactionInterceptor" /> </bean>
在不加入事务时,插入和查询没问题,在加入上面事务后,可以插入,但是在检索时出现如下问题:
The error occurred while applying a result map. --- Check the UserSort.resultUserSort. --- The error happened while setting a property on the result object. --- Cause: [b]java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Can't [/b]start a cloned connection while in manual transaction mode. at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryWithCallback(GeneralStatement.java:185) at com.ibatis.sqlmap.engine.mapping.statement.GeneralStatement.executeQueryForList(GeneralStatement.java:123) at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:615) at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForList(SqlMapExecutorDelegate.java:589) at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForList(SqlMapSessionImpl.java:118)
这是为什么呢?
41 楼
小疯子
2007-02-26
hermitte 写道
<aop:config>
<aop:advisor id="managerTx" advice-ref="txAdvice" pointcut="execution(* *..service.*Manager.*(..))" order="2"/>
</aop:config>
<tx:advice id="txAdvice">
<tx:attributes>
<tx:method name="get*" read-only="true"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
上面是appfuse里的,我觉得比LZ的要简洁点
下面的service也好配置
<bean id="roleManager" class="org.appfuse.service.impl.RoleManagerImpl">
<property name="roleDao" ref="roleDao"/>
</bean>
这样就可以了
<aop:advisor id="managerTx" advice-ref="txAdvice" pointcut="execution(* *..service.*Manager.*(..))" order="2"/>
</aop:config>
<tx:advice id="txAdvice">
<tx:attributes>
<tx:method name="get*" read-only="true"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
上面是appfuse里的,我觉得比LZ的要简洁点
下面的service也好配置
<bean id="roleManager" class="org.appfuse.service.impl.RoleManagerImpl">
<property name="roleDao" ref="roleDao"/>
</bean>
这样就可以了
呵呵...都快一年了,版本都不一样了吧!
40 楼
piaochunzhi
2007-02-26
我不懂 SPRING 感觉 配置文件真让人头疼 ,看了都疼!
39 楼
hermitte
2007-02-03
<aop:config>
<aop:advisor id="managerTx" advice-ref="txAdvice" pointcut="execution(* *..service.*Manager.*(..))" order="2"/>
</aop:config>
<tx:advice id="txAdvice">
<tx:attributes>
<tx:method name="get*" read-only="true"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
上面是appfuse里的,我觉得比LZ的要简洁点
下面的service也好配置
<bean id="roleManager" class="org.appfuse.service.impl.RoleManagerImpl">
<property name="roleDao" ref="roleDao"/>
</bean>
这样就可以了
<aop:advisor id="managerTx" advice-ref="txAdvice" pointcut="execution(* *..service.*Manager.*(..))" order="2"/>
</aop:config>
<tx:advice id="txAdvice">
<tx:attributes>
<tx:method name="get*" read-only="true"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
上面是appfuse里的,我觉得比LZ的要简洁点
下面的service也好配置
<bean id="roleManager" class="org.appfuse.service.impl.RoleManagerImpl">
<property name="roleDao" ref="roleDao"/>
</bean>
这样就可以了
38 楼
blackstreet
2007-02-02
org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor
这个起到什么用处
这个起到什么用处
37 楼
wuyingsong
2007-02-01
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<value>*Service,*Manager</value>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
<!--
此处增加新的Interceptor
-->
</list>
</property>
</bean>
其实你只是这儿<value>*Service,*Manager</value> 用了通配符而已
<property name="beanNames">
<value>*Service,*Manager</value>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
<!--
此处增加新的Interceptor
-->
</list>
</property>
</bean>
其实你只是这儿<value>*Service,*Manager</value> 用了通配符而已
36 楼
loaer
2007-01-31
<div class='code_title'>xml 代码</div>
<div class='dp-highlighter'>
<div class='bar'/>
<ol class='dp-xml'>
<li class='alt'><span><span class='tag'><</span><span class='tag-name'>bean</span><span> </span></span></li>
<li class=''><span> </span><span class='attribute'>class</span><span>=</span><span class='attribute-value'>"org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor"</span><span class='tag'>></span><span> </span></li>
<li class='alt'><span> </span><span class='tag'><</span><span class='tag-name'>property</span><span> </span><span class='attribute'>name</span><span>=</span><span class='attribute-value'>"transactionInterceptor"</span><span> </span></li>
<li class=''><span> </span><span class='attribute'>ref</span><span>=</span><span class='attribute-value'>"transactionInterceptor"</span><span> </span><span class='tag'>/></span><span> </span></li>
<li class='alt'><span> </span><span class='tag'></</span><span class='tag-name'>bean</span><span class='tag'>></span><span> </span></li>
</ol>
</div>
<br/>
是多余的吧?
<div class='dp-highlighter'>
<div class='bar'/>
<ol class='dp-xml'>
<li class='alt'><span><span class='tag'><</span><span class='tag-name'>bean</span><span> </span></span></li>
<li class=''><span> </span><span class='attribute'>class</span><span>=</span><span class='attribute-value'>"org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor"</span><span class='tag'>></span><span> </span></li>
<li class='alt'><span> </span><span class='tag'><</span><span class='tag-name'>property</span><span> </span><span class='attribute'>name</span><span>=</span><span class='attribute-value'>"transactionInterceptor"</span><span> </span></li>
<li class=''><span> </span><span class='attribute'>ref</span><span>=</span><span class='attribute-value'>"transactionInterceptor"</span><span> </span><span class='tag'>/></span><span> </span></li>
<li class='alt'><span> </span><span class='tag'></</span><span class='tag-name'>bean</span><span class='tag'>></span><span> </span></li>
</ol>
</div>
<br/>
是多余的吧?
35 楼
loaer
2007-01-31
<bean
class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
<property name="transactionInterceptor"
ref="transactionInterceptor" />
</bean>
是多余的吧?
class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
<property name="transactionInterceptor"
ref="transactionInterceptor" />
</bean>
是多余的吧?
34 楼
loaer
2007-01-31
<!--
增加新的 Interceptor
-->
请问这个是用来干什么的?
增加新的 Interceptor
-->
请问这个是用来干什么的?
33 楼
Leapiny
2007-01-25
Feiing 写道
呵呵, 想不到大家反响这么激烈, 我说一下自己的想法
3. 说到事务控制, 其实我的项目是放在 Action 做的, 可能要被鄙视了, 我们用 xwork Interceptor 实现, 再加上 webwork
<default-interceptor-ref name="defaultStack" /> 的功能, 基本上完全不用再管事务, 当然策略只能是 PROPAGATION_REQUIRED 了
3. 说到事务控制, 其实我的项目是放在 Action 做的, 可能要被鄙视了, 我们用 xwork Interceptor 实现, 再加上 webwork
<default-interceptor-ref name="defaultStack" /> 的功能, 基本上完全不用再管事务, 当然策略只能是 PROPAGATION_REQUIRED 了
不是有意挖坟,确实有问题想交流。
为了尽量使接口简洁点,尝试把事务放在action中 (webwork),但是对action外面包一层事务处理后,action就不能用了,现在想到的也是自己做个拦截器,所有的方法都是 PROPAGATION_REQUIRED ,总觉得不太好,不知道有没有人有在action中处理事务的经验给介绍下。
32 楼
差沙
2006-04-07
autowire="byName"会自动根据你的属性的名字帮你注入你要的bean,要不就要手动写明。
31 楼
liuyifan.com
2006-04-07
autowire="byName" 不是必需的吧
30 楼
cnsdl
2006-04-04
如果想PROPAGATION_REQUIRED,readOnly,写了接口也不方便,支持feiing
29 楼
hongliang
2006-03-30
差沙 写道
hongliang 写道
啊!!!这个我还真的没有注意到,因为我所有的Service层都是*Service,我从来不用*Manager的。。。怪不得我的没问题,
关键是你的事务管理对象的名字是*Manager呀,怎么会没有问题出现呢?难道是我的人品问题??
我上面给的代码写的是*Service,*Manager,是为叻迎合大家的口味 我自己不用*Manager,只有*Service
28 楼
差沙
2006-03-30
hongliang 写道
啊!!!这个我还真的没有注意到,因为我所有的Service层都是*Service,我从来不用*Manager的。。。怪不得我的没问题,
关键是你的事务管理对象的名字是*Manager呀,怎么会没有问题出现呢?难道是我的人品问题??
27 楼
hongliang
2006-03-30
差沙 写道
受hongliang启发,我现在就用这个方法,但是发现一个Bug。里面代理匹配的名字有*Manager,就是想匹配所有的ManagerObject。但是好像没有注意到,这样配置会把transactionManager也匹配上,然后定义的是find以外的方法都是要事务的。也就说transactionManager执行getTransaction的时候还会要事务,然后就是死循环,造成溢出。。
我解决的办法就是transactionManager改称transactionManagerHibernate。这么做的时候一定要注意名字的问题。别一不小心,把一个不相关的东东给弄进来的。。。
对了,加Acegi的时候有很多*Manager,打算想一个比较好名字匹配。。
我解决的办法就是transactionManager改称transactionManagerHibernate。这么做的时候一定要注意名字的问题。别一不小心,把一个不相关的东东给弄进来的。。。
对了,加Acegi的时候有很多*Manager,打算想一个比较好名字匹配。。
啊!!!这个我还真的没有注意到,因为我所有的Service层都是*Service,我从来不用*Manager的。。。怪不得我的没问题,
26 楼
差沙
2006-03-30
hongliang 写道
完整版来叻!!
下面的是Feiing给出的更好的方案,我有一些修改:
以后每次的增量是这一段:
跟配置普通bean的方法一样,非常简洁、直观。对现有的Service接口也无须任何修改
我把Feiing的transactionAttributesSource改成叻transactionAttributes,并且将DefaultAdvisorAutoProxyCreator改成了BeanNameAutoProxyCreator,我觉得毕竟不是context下的每个bean都需要事务,只要在Service层做AOP就可以叻。
和Robbin一致认为,Feiing的做法非常可取,因为它分离叻XML配置文件关注点
下面的是Feiing给出的更好的方案,我有一些修改:
<beans> <!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA); --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"> <ref bean="sessionFactory"/> </property> </bean> <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> <property name="transactionManager" ref="transactionManager"/> <property name="transactionAttributes"> <props> <prop key="*">PROPAGATION_REQUIRED</prop> <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop> </props> </property> </bean> <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <property name="beanNames"> <value>*Service,*Manager</value> </property> <property name="interceptorNames"> <list> <value>transactionInterceptor</value> <!-- 此处增加新的Interceptor --> </list> </property> </bean> <bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor"> <property name="transactionInterceptor" ref="transactionInterceptor"/> </bean> <bean id="userManager" class="some.package.UserManagerImpl" autoWire="byName"/> </beans>
以后每次的增量是这一段:
<bean id="userManager" class="some.package.UserManagerImpl" autoWire="byName"/>
跟配置普通bean的方法一样,非常简洁、直观。对现有的Service接口也无须任何修改
我把Feiing的transactionAttributesSource改成叻transactionAttributes,并且将DefaultAdvisorAutoProxyCreator改成了BeanNameAutoProxyCreator,我觉得毕竟不是context下的每个bean都需要事务,只要在Service层做AOP就可以叻。
和Robbin一致认为,Feiing的做法非常可取,因为它分离叻XML配置文件关注点
受hongliang启发,我现在就用这个方法,但是发现一个Bug。里面代理匹配的名字有*Manager,就是想匹配所有的ManagerObject。但是好像没有注意到,这样配置会把transactionManager也匹配上,然后定义的是find以外的方法都是要事务的。也就说transactionManager执行getTransaction的时候还会要事务,然后就是死循环,造成溢出。。
我解决的办法就是transactionManager改称transactionManagerHibernate。这么做的时候一定要注意名字的问题。别一不小心,把一个不相关的东东给弄进来的。。。
对了,加Acegi的时候有很多*Manager,打算想一个比较好名字匹配。。
25 楼
sunandrain
2006-03-27
这样配置,在单独测试usermanager时,没有问题.
但当放到tomcat中,通过action调用usermanager时却出现异常,用以前的那种配法没有出现问题.
Exception:
但当放到tomcat中,通过action调用usermanager时却出现异常,用以前的那种配法没有出现问题.
Exception:
2006-03-27 12:35:21,377 ERROR [com.opensymphony.webwork.dispatcher.DispatcherUtils] - Could not execute action java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method); at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39); at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25); at java.lang.reflect.Method.invoke(Method.java:585); at com.opensymphony.xwork.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:353); at com.opensymphony.xwork.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:208); at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:182); at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:32); at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:180); at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:32); at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:180); at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:32); at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:180); at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:32); at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:180); at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:32); at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:180); at com.opensymphony.xwork.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:94); at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:180); at com.opensymphony.xwork.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:94); at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:180); at com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:119); at com.opensymphony.webwork.dispatcher.DispatcherUtils.serviceAction(DispatcherUtils.java:183); at com.opensymphony.webwork.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:182); at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202); at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173); at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213); at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178); at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126); at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105); at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107); at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148); at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869); at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:667); at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527); at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80); at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684); at java.lang.Thread.run(Thread.java:595); Caused by: java.lang.StackOverflowError at java.lang.System.identityHashCode(Native Method); at java.util.IdentityHashMap.hash(IdentityHashMap.java:283); at java.util.IdentityHashMap.get(IdentityHashMap.java:313); at org.springframework.aop.framework.HashMapCachingAdvisorChainFactory.getInterceptorsAndDynamicInterceptionAdvice(HashMapCachingAdvisorChainFactory.java:44); at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:154); at $Proxy1.getTransaction(Unknown Source); at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:217); at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:89); at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144); at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:174); at $Proxy1.getTransaction(Unknown Source); ......
发表评论
-
Bookmarks
2010-07-07 16:42 1495Architecture J2EE cluster htt ... -
XML validation error on request: cvc-complex-type
2010-04-15 21:45 1346see http://72.5.124.102/threa ... -
Spring LoadTimeWeaver 的那些事儿
2009-10-05 00:39 3997DDD 现在越来越流行了, 不管正确与否, new U ... -
理解 Java 的 GC 与 幽灵引用
2009-06-04 03:02 3206理解 Java 的 GC 与 幽灵引用 J ... -
基于 Apache Mina 的 RPC 实现 (长连接 webservice)
2008-11-27 23:26 4353写了一个基于 Apache Mina 和 SpringRemo ... -
Atomikos JTA for Hibernate3
2007-11-22 14:52 3329http://wiki.atomikos.org/bin/vi ... -
Spring AOP 概览与细节
2007-08-05 03:21 5948@王政 @2007-08-04 @转载请注明 ... -
解惑 spring 嵌套事务
2006-11-25 01:03 36044解惑 spring 嵌套事务 /** * @au ... -
使用 FactoryBean 让你的 spring 配置动起来
2006-11-01 17:43 10460看到不少朋友讨论 spring 配置时认为 spring 配置 ... -
一个可能的列级权限控制方案讨论
2006-05-25 18:45 17944最近的项目需要做到列级权限控制, 大意如下 publi ... -
再论 Acegi 权限存储策略
2006-02-18 00:17 12782本文原出处 http://starcraft.blogdriv ... -
以前写的一篇介绍 Acegi 的文档
2006-01-05 09:51 13266半年前写的, 版本是 0.8.3, 主要是翻译了一些 ref ... -
Acegi 资源配置动态扩展实现
2005-12-13 16:21 19163本文原出处 : http://starcr ...
相关推荐
Spring Boot专注于Spring平台和第三方开发库,简化了基于Spring的产品开发。让你在开始Spring应用开发时,不会被各种繁杂的事务困扰。通过Spring Boot,开发时只需少量的Spring配置就可以完成项目结构的初始搭建。
spring-1 演示了使用setter方式及构造器方式创建bean,util:list标签创建集合,p标签简化配置 和依赖注入, 以及bean的autowire和继承与依赖,以及bean的作用域。 spring-2 演示了外部配置文件的引入(connection)...
只需要通过配置就可以完成对事务的管理,而无需手动编程 方便程序的测试 Spring对Junit4支持,可以通过注解方便的测试Spring程序 方便集成各种优秀框架 Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀...
Java SSM项目是一种使用Java语言和SSM框架(Spring + Spring MVC + ...它提供了一种将数据库操作与Java对象映射起来的方式,避免了手动编写繁琐的SQL语句,并提供了事务管理和缓存等功能,简化了数据库访问的过程
2.4.1. 在XML里更为简单的声明性事务配置 2.4.2. JPA 2.4.3. 异步的JMS 2.4.4. JDBC 2.5. Web层 2.5.1. Spring MVC的表单标签库 2.5.2. Spring MVC合理的默认值 2.5.3. Portlet 框架 2.6. 其他特性 2.6.1. 动态语言...
2.4.1. 在XML里更为简单的声明性事务配置 2.4.2. JPA 2.4.3. 异步的JMS 2.4.4. JDBC 2.5. Web层 2.5.1. Spring MVC的表单标签库 2.5.2. Spring MVC合理的默认值 2.5.3. Portlet 框架 2.6. 其他特性 2.6.1. ...
Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。 Spring AOP:通过配置管理特性,Spring AOP 模块...
spring-beans.jar(必须):这 个jar 文件是所有应用都要用到的,它包含访问配置文件、创建和管理bean 以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类。如果应用只需基本的IoC/DI ...
2.4.1. 在XML里更为简单的声明性事务配置 2.4.2. 对Websphere 事务管理的完整支持 2.4.3. JPA 2.4.4. 异步的JMS 2.4.5. JDBC 2.5. Web层 2.5.1. Spring MVC合理的默认值 2.5.2. Portlet 框架 2.5.3. 基于...
2.4.1. 在XML里更为简单的声明性事务配置 2.4.2. 对Websphere 事务管理的完整支持 2.4.3. JPA 2.4.4. 异步的JMS 2.4.5. JDBC 2.5. Web层 2.5.1. Spring MVC合理的默认值 2.5.2. Portlet 框架 2.5.3. 基于...
2.4.1. 在XML里更为简单的声明性事务配置 2.4.2. JPA 2.4.3. 异步的JMS 2.4.4. JDBC 2.5. Web层 2.5.1. Spring MVC的表单标签库 2.5.2. Spring MVC合理的默认值 2.5.3. Portlet 框架 2.6. 其他特性 2.6.1. ...
方便的事务管理:Spring提供的声明式事务处理可以全面有效地处理事务。 异常包装:Spring能够包装Hibernate的异常,使开发者可以选择恰当的层来处理异常。 24.2 管理SessionFactory Hibernate的SessionFactory,是...
纯spring多数据库事务,是spring和atomikos组合使用。有spring注解设置数据源,由atomikos负责数据源管理,负责事务管理。追求零配置。大大简化工作量。供参考
4.4.7 简化配置方式 4.4.8 自动装配 4.5 方法注入 4.5.1 lookup方法注入 4.5.2 方法替换 4.6 之间的关系 4.6.1 继承 4.6.2 依赖 4.6.3 引用 4.7 整合多个配置文件 4.8 Bean作用域 4.8.1 singleton作用域 4.8.2 ...
2.8 用Java Config简化XML配置 77 2.8.1 问题 77 2.8.2 解决方案 77 2.8.3 工作原理 77 2.9 使Bean感知容器 81 2.9.1 问题 81 2.9.2 解决方案 81 2.9.3 工作原理 82 2.10 加载外部资源 82 2.10.1...
Spring是一个开源的Java应用框架,它旨在简化...Spring Boot是Spring框架的一个子项目,它提供了自动配置、简化依赖管理和内置Web服务器等功能,使得开发者能够更快地构建和部署Spring应用程序。Spring Cloud则是一系列
- chapter3-2-2:[使用Spring-data-jpa简化数据访问层(推荐)](http://blog.didispace.com/springbootdata2/) - chapter3-2-3:[多数据源配置(一):JdbcTemplate]...
附录A介绍如何开始自己的Spring应用系统,如何下载Spring以及如何编写Ant配置文件。附录B介绍一些与Spring有关的其他开源框架。本书的每一部分既是建立在前一部分的基础上,同时也都是独立存在的,所以,读者不必...
事务管理:Spring提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)。 异常处理:Spring提供方便的API把具体技术相关的异常(比如由JDBC,HibernateorJDO抛出的)转化为一致的...
│ 12 配置中心:基于 Naco 集中管理应用配置.mp4 │ 15 应用性能监控:通过 SkyWalking 实施链路追踪.mp4 │ 16 分布式事务:Alibaba Seata 如何实现分布式事务.mp4 │ 17 消息队列:基于 RocketMQ 实现服务...