解决dubbo的服务发布注解@service不能和事务注解不能共用的方案
最近在项目的开发中遇到了一个问题,就是服务提供方使用@service发布dubbo服务时候,服务消费方@Reference无法注入bean导致空指针异常的问题。分析原因为@service注解并没有将服务发布出去而导致的。所以解决问题的关键点在于如何将服务正确的发布出去。事务采用了aop技术,而aop默认采用的是基于JDK的动态代理(接口代理),所以在服务发布的时候无法确定使用接口类还是真实类,从而导致服务发布不成功。
故此,我们采用cglib代理,也就是子类代理的方式,需显式配置:<aop:aspectj-autoproxy proxy-target-class="true" />。此时又出现问题了,消费方调用服务时还是会出现空指针的问题。分析原因突然发现dubbo的@service注解不支持继承,也就是缺少了注解@Inherited。网上很多解决方案都是修改dubbo源码等等,个人认为并不可取,因为修改源码后需要将dubbo的jar上传到私服,然后重新下载依赖,过程比较繁杂,另一方面自己修改会不会引发其他的问题都是未知的。经过查阅资料发现dubbo的2.5.7及哟吼的版本修复了这个问题,所以直接使用2.5.7版本。
修改后测试发现依然会出现空指针的问题,这究竟是怎么回事呢?通过查看dubbo-admin管控台发现注册的服务竟然是spring的代理类,难怪找不到服务呢?因此在发布服务的时候直接指定服务接口就好了@Service(timeout = 5000,interfaceName="com.iservice.ByAgentCompanybillService")
解决dubbo的服务发布注解@service不能和事务注解不能共用的方案的更多相关文章
- Dubbo源代码分析(三):Dubbo之服务端(Service)
如上图所看到的的Dubbo的暴露服务的过程,不难看出它也和消费者端非常像,也须要一个像reference的对象来维护service关联的全部对象及其属性.这里的reference就是provider. ...
- 解决未能启动服务“VMware Authorization Service”
计算机-管理-服务--服务列表找到VMware Authorization Service 并双击 打开服务.
- dubbo源码分析二:服务发布
本文将深入分析dubbo的服务发布涉及到的流程及主要类的代码.首先,我们先从类的关系图来看一下dubbo发布服务涉及到的相关类. 1.类图 上图展示了部分服务发布过程中需要使用到的类和接口,其中: s ...
- Dubbo源码学习--服务发布(ServiceBean、ServiceConfig)
前面讲过Dubbo SPI拓展机制,通过ExtensionLoader实现可插拔加载拓展,本节将接着分析Dubbo的服务发布过程. 以源码中dubbo-demo模块作为切入口一步步走进Dubbo源码. ...
- 关于spring事务注解实战
1.概述 spring的事务注解@Transaction 相信很多人都用过,而@Transaction 默认配置适合80%的配置. 本篇文章不是对spring注解事务做详细介绍,而是解决一些实际场景下 ...
- 解决Dubbo无法发布被事务代理的Service问题
在HelloServiceImpl类上加入@Transactional注解后,虽然工程可以正常跑起来,但是通过dubbo管理控制台可以看到里面并没有服务发布上来. 此时启动服务提供者和服务消费者,并访 ...
- 使用dubbo分布式服务框架发布服务及消费服务
什么是DUBBO DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案. 准备工作 安装zookeeper ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服 ...
- Dubbo源码学习--服务发布(DubboProtocol、Exporter)
在Dubbo服务发布的整体流程一文中,只是分析了服务发布的整体流程,具体的细节还没有进一步分析.本节将继续分析服务暴露的过程.在ServiceConfig中通过一句话即可暴露服务,如下: Export ...
- dubbo rest服务 No provider available for the service 错误问题
1.版本 dubbo 2.6.2 2.描述 消费者调用dubbo rest服务报No provider available for the service错误 网络上有讲是实体类未实现Serializ ...
随机推荐
- EA888发动机系列
EA888发动机是一个发动机系列,有很多型号,比如从二代机开始,二代机叫做Evolution 2,简称EVO2,分别有CEA:1.8T 横置:CCU:1.8T 纵置:CGM:2.0T横置,CRH:2. ...
- 钉钉jsapi免登获取code中,出现对应企业没有某域名微应用
在使用jsapi中.出现 {"errorMessage":"对应企业没有某域名微应用",:"errorCode":"3" ...
- java Response 设置中文编码
response.setHeader("Content-type", "text/html;charset=UTF-8"); response.setChara ...
- Codeforces Round #305 (Div. 2) A
Description While Mike was walking in the subway, all the stuff in his back-bag dropped on the groun ...
- C:foreEach
c:forEach用法 <c:foreach>用法 <c:foreach>类似于for和foreach循环 以下是我目前见过的用法:1.循环遍历,输出所有的元素.& ...
- shell脚本:Ctrl+C终止的是哪个进程
aa.sh中的内容如下图: 运行sh aa.sh, 显示aa.txt后面几行, 此时开启了两个进程:一个sh运行,一个tail -f运行 按Ctrl+C 会终止此sh进程, 父进程死了,里面的tail ...
- /etc目录下重要的目录和文件
牢记: 1.*/etc/sysconfig/network-scripts/ifcfg-eth0 网卡的配置信息 重启网卡:1)/etc/init.d/network restart(所有网卡) ...
- js遇到的奇怪问题和坑1
if(window.confirm('你确定要删除此条信息么')){ // window.open('delete.php'); location.href='delete.php'; return ...
- angularJs(2)表单中下拉框单选多选
多选 <input type="checkbox" ng-model='game' ng-true-value="1" ng-false-value=&q ...
- 爬虫(GET)——传递要查询的关键字
工具:python3 目标:传递关键字,爬取任意关键字的页面 import urllib.request # 定义User-Agent,要爬取的url,以及要查询的关键字 headers = {&qu ...