被事务代理的spring service 不能使用注解方式发布dubbo服务的问题解决
问题:
使用 @com.alibaba.dubbo.config.annotation.Service 发布dubbo服务的时候,当服务类没有加入@Transactional的时候没有问题.
但是当加入事务后,spring bean 事务代理, dubbo的 AnnotationBean 扫描 类执行下面的代码的时候就获取不到对应的注解,也就发布不了服务:
Service service = bean.getClass().getAnnotation(Service.class); if (service != null) {
因为被cglib 或者 java proxy 代理的类获取不到该dubbo service注解.
解决办法:
思路: 让代理类可以获取@com.alibaba.dubbo.config.annotation.Service , name就需要在 该注解上加入
java.lang.annotation.Inherited 意思是: 使代理类继承该注解,使之可以通过bean.getClass().getAnnotation(Service.class) 获取到.
这样 dubbo的export() 发布逻辑可以正常执行 . 那么dubbo服务即可正常发布了.
缺点:
需要侵入dubbo的源码,不过貌似没别的好些的办法.否则就只能手动通过 javaconfig 或者 xml 去发布服务.
优点:
因为dubbo使用的spring 版本默认比较老. 所以通过dubbo.xml的 方式发布会跟默认的spring 上下文的bean加载冲突.报一些莫名其妙的问题. 比如 bean找不到之类的. 原因就是 因为dubbo的bean初始化和 现有的工程的spring 高版本的初始化机制冲突.
那么通过这种方式.就不侵入现有的spring bean上下文. 只是 加载了一个 AnnotationBean 这么个bean 由这个bean 去扫描有dubbo service注解的类,找到对应的bean并且export() 发布服务出去.
阅读更多- 被事务代理的spring service 不能使用注解方式发布dubbo服务
- 被事务代理的spring service 不能使用注解方式发布dubbo服务
- 被事务代理的spring service 使用注解方式发布Dubbo服务
- 被事务代理的spring service 使用注解方式发布Dubbo服务
- 使用注解方式实现Dubbo搭建,解决消费者调用接口出现空指针异常以及事务等问题
- 使用dubbo注解@Service注册服务后使用aop或者申明式事物导致无法注册的问题解决办法
- 使用Spring的RmiServiceExporter发布RMI服务设置registryHost报Connection refused to host问题解决
- Dubbo无法发布被事务代理的Service问题
- Dubbo无法发布被事务代理的Service问题
- 使用spring.net发布webservice时函数重名的问题的解决办法
- 关于更改ip后dbconsole服务不能启动(em不能使用)问题的根本解决方法
- Spring学习笔记(17)----使用Spring注解方式管理事务
- Spring 使用注解方式进行事务管理
- spring3 mvc使用注解方式时,不能扫描jar包里面的类
- Spring 使用注解方式进行事务管理
- Spring2.5.x以后使用注解方式的事务管理配置
- Spring MVC @Transactional注解方式事务失效的解决办法
- spring-mvc解决EL表达式不能使用问题
- 使用注解方式配置spring中的jdbc事务
- Spring 使用注解方式进行事务管理