TransactionProxyFactoryBean来从基于配置的服务豆切换到基于注解服务豆
,当我读到有关使用TransactionProxyFactoryBean来从基于配置的服务豆切换到基于注解服务豆
<context:component-scan base-package="tld.mydomain.business">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
</context:component-scan>
和批注我的服务豆@Service(“为myService”),并认为伟大的,我会做那是因为我已经用我的控制器来做这件事了。我平时的服务bean的配置看起来像
<bean id="userService" parent="txProxyTemplate">
<property name="target">
<bean class="tld.mydomain.business.UserServiceImpl"/>
</property>
<property name="proxyInterfaces" value="tld.mydomain.business.UserService"/>
</bean>
所以现在,我产生他们,我该如何将它们包装在一个Hibernate代理诸如TransactionProxyFactoryBean来?还是有更好的方法来做到这一点?
我还没有走完一路,并使用@Repository以及是否需要?
干杯
聂
使用TransactionProxyFactoryBean来没有现代Spring应用程序鼓励,但它仍然有效。典型的做法现在是注释类与@Transactional,然后在你的应用程序上下文文件坚持这个元素:
<tx:annotation-driven transaction-manager="txManager"/>
这和其他策略discussed在参考文献中非常深入,甚至还有一个注意事项关于TransactionProxyFactoryBean。
没有必要对
<context:include-filter type="annotation"expression="org.springframework.stereotype.Service"/>
Spring将注册@Service, @Repository, @Component...
一旦他们在基础包中找到。
Like @Rob表示要么使用@Transactional
要么使用<aop:config>...</aop:config>
来处理服务级别的事务。
感谢您的提示,我已经删除了额外的混乱。你有什么建议,为什么我得到上面的BeanNotOfRequiredTypeException异常?或者如何处理多个事务管理器?我从文档中看到,我可以使用
通常'BeanNotOfRequiredType'当你注入一个错误类型的bean时,除非你发布堆栈跟踪,否则我不能进一步说话。那么你只需要1个'PlatformTransactionManager',除非你有2个'DataSource',否则不需要2个。 – 2009-10-29 15:50:04
如果您有两个不同的资源需要在同一个事务中,那么您将需要使用JTA。查看我对前面问题here的回答。你的配置需要看起来像:
<tx:annotation-driven transaction-manager="txManager"/>
<bean id="txManager"
class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManagerName" value="appserver/jndi/path" />
</bean>
凡appserver/jndi/path
需要使用随您的应用程序服务器(尽管你可以使用一个独立的JTA事务管理器,如JTA事务管理器的JNDI路径被替换JOTM)。如在2.5.x API提到典型路径是:
- 的 “java:COMP/UserTransaction的” 为树脂2.x的,甲骨文OC4J(猎户)纳斯(JOTM),BEA的WebLogic
- 的“java:COMP /事务管理“对于Resin 3。X
- 的 “java:应用服务器/事务管理” 为GlassFish的
- 的 “java:PM /事务管理” 为Borland Enterprise Server和太阳应用服务器(的Sun ONE 7或更高版本)
- 的 “java:/事务管理” 为JBoss应用程序服务器
嗨工具包,非常感谢您的意见。当我使用TransactionProxyFactoryBean时,我已经能够解决它,因为它并不是必须将它们保留在同一个事务中,我也可以有两个,其中一个是只读的。这就是为什么我问到说什么交易去哪里。将它们合并成一个似乎是最好的主意。但都是JDBC连接,我没有使用JNDI。但是我会在早上读你的建议(现在是午夜)Cheers-Nik – niklassaers 2009-10-27 23:21:17
非常感谢,我在Spring 2上推荐了一本关于TransactionProxyFactoryBean的书,我现在看到我应该更仔细地检查过这些文档。不过,只需要简单的跟进:这似乎只适用于只有一个事务管理器的情况。不幸的是,我有两个,因为我需要与两个不同的数据库一起工作。这是使用TransactionProxyFactoryBean没有问题。表9.2和9.3似乎并不建议我可以 – niklassaers 2009-10-27 19:41:34
嗯,当我这样做时,我在访问我的服务时遇到以下异常:org.springframework.beans.factory.BeanNotOfRequiredTypeException:Bean名为'org.springframework.transaction.interceptor .TransactionInterceptor#0'必须是[org.aopalliance.aop.Advice]类型,但实际上是[org.springframework.transaction.interceptor.TransactionInterceptor]类型 – niklassaers 2009-10-27 20:10:09
它可能是@Service(“myService”)和@交易注释冲突? – niklassaers 2009-10-27 20:37:00