305 Star 891 Fork 531

黄勇 / rpc

 / 详情

事务问题

待办的
创建于  
2017-09-13 15:00

实现类方法上注解 @Transactional以后,就会发生serviceBean.getClass().getAnnotation(RpcService.class)为空的问题,因为serviceBean.getClass()是代理类,拿不出真实的class,我需要的不是分布式事务,只是想远程调用的服务能够用spring原生的事务,请问下怎么解决??

评论 (1)

FaberWong 创建了任务
RpcService rpcService = serviceBean.getClass().getAnnotation(RpcService.class);
                if(rpcService == null){
                    try{
                        Field h = serviceBean.getClass().getSuperclass().getDeclaredField("h");
                        h.setAccessible(true);
                        AopProxy aopProxy = (AopProxy) h.get(serviceBean);

                        Field advised = aopProxy.getClass().getDeclaredField("advised");
                        advised.setAccessible(true);

                        Object target = ((AdvisedSupport)advised.get(aopProxy)).getTargetSource().getTarget();
                        rpcService = target.getClass().getAnnotation(RpcService.class);
                    }catch(Exception e){
                        e.printStackTrace();
                    }
                }
                if(rpcService == null){
                    System.out.println("========error,rpcService is null===================");
                }else{
                    String serviceName = rpcService.value().getName();
                    String serviceVersion = rpcService.version();
                    if (StringUtil.isNotEmpty(serviceVersion)) {
                        serviceName += "-" + serviceVersion;
                    }
                    handlerMap.put(serviceName, serviceBean);
                }

空指针的问题我已经解决了,但是只要加了事务,到RpcServerHandler中的反射调用,整个server就会家死住,应该是产生了死锁,麻烦问下怎么解决

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(1)
Java
1
https://gitee.com/huangyong/rpc.git
git@gitee.com:huangyong/rpc.git
huangyong
rpc
rpc

搜索帮助

53164aa7 5694891 3bd8fe86 5694891