在Spring AOP代理过的对象上支持dubbo annotation配置事物失效问题
2018-03-20 10:03
661 查看
在Spring AOP代理过的对象上支持dubbo annotation配置
dubbo annotation方式配置 在A.insert服务中有两个@resource注入的service.insert 第二个inert报错,期望两个service操作回滚,使用xml申明式事物,实际没有回滚,dubbo改成xml配置,正常回滚。
整理了testcase:https://pan.baidu.com/s/1sZG9tsUTQQvlE2fFqnsQeQ
1、解决方案:1.1、dubbo 2.5.9 解决了。1.2、修改成xml配置。 1.3、新增中间一层接口实现类调用。
2、但是 dubbo 2.6.0 问题依旧存在 打印日志如,发布的服务接口为SpringProxy ,之前的版本也有此问题,由于不想每次注解中指定接口名称,于是修改了如下:
//修复 代理类发布的服务接口为 SpringProxy
Class<?> clazz = bean.getClass();
if (org.springframework.aop.support.AopUtils.isAopProxy(bean)) {
clazz = org.springframework.aop.support.AopUtils.getTargetClass(bean);
}
serviceConfig.setInterface(clazz.getInterfaces()[0]);
[com.alibaba.dubbo.registry.integration.RegistryProtocol]- [DUBBO] subscribe url: provider://192.168.2.77:20880/org.springframework.aop.SpringProxy?anyhost=true&application=dubbo-rss-provider&category=configurators&check=false&default.delay=-1&default.retries=0&default.timeout=60000&delay=-1&dubbo=2.6.0&generic=false&interface=org.springframework.aop.SpringProxy&methods=&pid=10752&revision=4.2.5.RELEASE&side=provider×tamp=1521424569991&version=1.0.0, override urls: [empty://192.168.2.77:20880/org.springframework.aop.SpringProxy?anyhost=true&application=dubbo-rss-provider&category=configurators&check=false&default.delay=-1&default.retries=0&default.timeout=60000&delay=-1&dubbo=2.6.0&generic=false&interface=org.springframework.aop.SpringProxy&methods=&pid=10752&revision=4.2.5.RELEASE&side=provider×tamp=1521424569991&version=1.0.0], dubbo version: 2.6.0, current host: 127.0.0.1
[com.alibaba.dubbo.config.model.ApplicationModel]- [DUBBO] already register the provider service: org.springframework.aop.SpringProxy:1.0.0, dubbo version: 2.6.0, current host: 127.0.0.13、2.6.1 启动报错
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/curator/RetryPolicy
at com.alibaba.dubbo.remoting.zookeeper.curator.CuratorZookeeperTransporter.connect(CuratorZookeeperTransporter.java:26)
at com.alibaba.dubbo.remoting.zookeeper.ZookeeperTransporter$Adaptive.connect(ZookeeperTransporter$Adaptive.java)
at com.alibaba.dubbo.registry.zookeeper.ZookeeperRegistry.(ZookeeperRegistry.java:69)
at com.alibaba.dubbo.registry.zookeeper.ZookeeperRegistryFactory.createRegistry(ZookeeperRegistryFactory.java:37)
at com.alibaba.dubbo.registry.support.AbstractRegistryFactory.getRegistry(AbstractRegistryFactory.java:95)
at com.alibaba.dubbo.registry.RegistryFactory$Adaptive.getRegistry(RegistryFactory$Adaptive.java)
at com.alibaba.dubbo.registry.integration.RegistryProtocol.getRegistry(RegistryProtocol.java:200)
at com.alibaba.dubbo.registry.integration.RegistryProtocol.export(RegistryProtocol.java:134)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper.export(ProtocolFilterWrapper.java:91)
at com.alibaba.dubbo.rpc.protocol.ProtocolListenerWrapper.export(ProtocolListenerWrapper.java:54)
at com.alibaba.dubbo.qos.protocol.QosProtocolWrapper.export(QosProtocolWrapper.java:54)
at com.alibaba.dubbo.rpc.Protocol$Adaptive.export(Protocol$Adaptive.java)
at com.alibaba.dubbo.config.ServiceConfig.doExportUrlsFor1Protocol(ServiceConfig.java:505)
at com.alibaba.dubbo.config.ServiceConfig.doExportUrls(ServiceConfig.java:357)
at com.alibaba.dubbo.config.ServiceConfig.doExport(ServiceConfig.java:316)
at com.alibaba.dubbo.config.ServiceConfig.export(ServiceConfig.java:215)
at com.alibaba.dubbo.config.spring.ServiceBean.onApplicationEvent(ServiceBean.java:121)
at com.alibaba.dubbo.config.spring.ServiceBean.onApplicationEvent(ServiceBean.java:50)
dubbo annotation方式配置 在A.insert服务中有两个@resource注入的service.insert 第二个inert报错,期望两个service操作回滚,使用xml申明式事物,实际没有回滚,dubbo改成xml配置,正常回滚。
整理了testcase:https://pan.baidu.com/s/1sZG9tsUTQQvlE2fFqnsQeQ
1、解决方案:1.1、dubbo 2.5.9 解决了。1.2、修改成xml配置。 1.3、新增中间一层接口实现类调用。
2、但是 dubbo 2.6.0 问题依旧存在 打印日志如,发布的服务接口为SpringProxy ,之前的版本也有此问题,由于不想每次注解中指定接口名称,于是修改了如下:
//修复 代理类发布的服务接口为 SpringProxy
Class<?> clazz = bean.getClass();
if (org.springframework.aop.support.AopUtils.isAopProxy(bean)) {
clazz = org.springframework.aop.support.AopUtils.getTargetClass(bean);
}
serviceConfig.setInterface(clazz.getInterfaces()[0]);
[com.alibaba.dubbo.registry.integration.RegistryProtocol]- [DUBBO] subscribe url: provider://192.168.2.77:20880/org.springframework.aop.SpringProxy?anyhost=true&application=dubbo-rss-provider&category=configurators&check=false&default.delay=-1&default.retries=0&default.timeout=60000&delay=-1&dubbo=2.6.0&generic=false&interface=org.springframework.aop.SpringProxy&methods=&pid=10752&revision=4.2.5.RELEASE&side=provider×tamp=1521424569991&version=1.0.0, override urls: [empty://192.168.2.77:20880/org.springframework.aop.SpringProxy?anyhost=true&application=dubbo-rss-provider&category=configurators&check=false&default.delay=-1&default.retries=0&default.timeout=60000&delay=-1&dubbo=2.6.0&generic=false&interface=org.springframework.aop.SpringProxy&methods=&pid=10752&revision=4.2.5.RELEASE&side=provider×tamp=1521424569991&version=1.0.0], dubbo version: 2.6.0, current host: 127.0.0.1
[com.alibaba.dubbo.config.model.ApplicationModel]- [DUBBO] already register the provider service: org.springframework.aop.SpringProxy:1.0.0, dubbo version: 2.6.0, current host: 127.0.0.13、2.6.1 启动报错
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/curator/RetryPolicy
at com.alibaba.dubbo.remoting.zookeeper.curator.CuratorZookeeperTransporter.connect(CuratorZookeeperTransporter.java:26)
at com.alibaba.dubbo.remoting.zookeeper.ZookeeperTransporter$Adaptive.connect(ZookeeperTransporter$Adaptive.java)
at com.alibaba.dubbo.registry.zookeeper.ZookeeperRegistry.(ZookeeperRegistry.java:69)
at com.alibaba.dubbo.registry.zookeeper.ZookeeperRegistryFactory.createRegistry(ZookeeperRegistryFactory.java:37)
at com.alibaba.dubbo.registry.support.AbstractRegistryFactory.getRegistry(AbstractRegistryFactory.java:95)
at com.alibaba.dubbo.registry.RegistryFactory$Adaptive.getRegistry(RegistryFactory$Adaptive.java)
at com.alibaba.dubbo.registry.integration.RegistryProtocol.getRegistry(RegistryProtocol.java:200)
at com.alibaba.dubbo.registry.integration.RegistryProtocol.export(RegistryProtocol.java:134)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper.export(ProtocolFilterWrapper.java:91)
at com.alibaba.dubbo.rpc.protocol.ProtocolListenerWrapper.export(ProtocolListenerWrapper.java:54)
at com.alibaba.dubbo.qos.protocol.QosProtocolWrapper.export(QosProtocolWrapper.java:54)
at com.alibaba.dubbo.rpc.Protocol$Adaptive.export(Protocol$Adaptive.java)
at com.alibaba.dubbo.config.ServiceConfig.doExportUrlsFor1Protocol(ServiceConfig.java:505)
at com.alibaba.dubbo.config.ServiceConfig.doExportUrls(ServiceConfig.java:357)
at com.alibaba.dubbo.config.ServiceConfig.doExport(ServiceConfig.java:316)
at com.alibaba.dubbo.config.ServiceConfig.export(ServiceConfig.java:215)
at com.alibaba.dubbo.config.spring.ServiceBean.onApplicationEvent(ServiceBean.java:121)
at com.alibaba.dubbo.config.spring.ServiceBean.onApplicationEvent(ServiceBean.java:50)
相关文章推荐
- 在Spring AOP代理过的对象上支持dubbo annotation配置事物失效问题
- Spring 代理对象,cglib,jdk的问题思考,AOP 配置注解拦截 的一些问题.为什么不要注解在接口,以及抽象方法.
- spring aop自动代理注解配置失效问题及原理机制整理总结
- 【学习】Spring 的 AOP :基于Annotation 的“零配置”方式
- 加强2注解。泛型。类加载器及其委托机制。代理的概念与作用原理,AOP概念。实现AOP功能的封装与配置。类似Spring。
- spring AOP标注型切点(@annotation)的问题
- spring AOP 配置事务不起作用的问题(用Junit测试service)
- Spring Aop实现——Annotation方式(注解式)and Schema-based式(xml配置)
- Spring AOP代理机制以及方法调用在同一个类的另一个方法的问题
- 8.4.5: Spring的AOP---基于Annotation的零配置方式
- spring 注入问题 (AOP 动态代理)
- spring中配置<aop:aspectj-autoproxy/>与<mvc:annotation-driven/>作用以及国际化配置
- [原]spring学习笔记9.2-Spring对Aop的支持-annotation的方式
- spring aop 失效问题
- spring aop xml方式的配置案例 以及 annotation方式的配置aop
- spring对AOP的支持(采用配置方式)
- Spring Aop实现——Annotation方式(注解式)and Schema-based式(xml配置)
- 黑马程序员--09.动态与代理AOP--06【动态代理实例化的过程升级--目标对象+系统功能的参数化】【实现类似Spring的可配置AOP框架】
- springAOP——代理对象的产生及方法调用
- Spring中AOP基于Annotation配置常用声明