From 120334aaee7718379c4175eac6d304d066f53a33 Mon Sep 17 00:00:00 2001 From: RedKale <22250530@qq.com> Date: Thu, 14 Apr 2016 14:11:45 +0800 Subject: [PATCH] --- src/org/redkale/boot/NodeServer.java | 43 ++++------------------------ src/org/redkale/net/sncp/Sncp.java | 33 +++++++++++++++++++++ 2 files changed, 39 insertions(+), 37 deletions(-) diff --git a/src/org/redkale/boot/NodeServer.java b/src/org/redkale/boot/NodeServer.java index a5ecd5018..c091f300e 100644 --- a/src/org/redkale/boot/NodeServer.java +++ b/src/org/redkale/boot/NodeServer.java @@ -175,24 +175,9 @@ public abstract class NodeServer { application.dataSources.add(source); appResFactory.register(resourceName, DataSource.class, source); - SncpClient client = null; - Transport sameGroupTransport = null; - List diffGroupTransports = null; - try { - Field ts = src.getClass().getDeclaredField("_sameGroupTransport"); - ts.setAccessible(true); - sameGroupTransport = (Transport) ts.get(src); - - ts = src.getClass().getDeclaredField("_diffGroupTransports"); - ts.setAccessible(true); - diffGroupTransports = Arrays.asList((Transport[]) ts.get(src)); - - ts = src.getClass().getDeclaredField("_client"); - ts.setAccessible(true); - client = (SncpClient) ts.get(src); - } catch (Exception e) { - throw new RuntimeException(src.getClass().getName() + " not found _sameGroupTransport or _diffGroupTransports at " + field, e); - } + SncpClient client = Sncp.getSncpClient((Service) src); + Transport sameGroupTransport = Sncp.getSameGroupTransport((Service) src); + List diffGroupTransports = Arrays.asList(Sncp.getDiffGroupTransports((Service) src)); final InetSocketAddress sncpAddr = client == null ? null : client.getClientAddress(); if ((src instanceof DataSource) && sncpAddr != null && resourceFactory.find(resourceName, DataCacheListener.class) == null) { //只有DataSourceService 才能赋值 DataCacheListener Service cacheListenerService = Sncp.createLocalService(resourceName, getExecutor(), appResFactory, DataCacheListenerService.class, sncpAddr, sameGroupTransport, diffGroupTransports); @@ -216,25 +201,9 @@ public abstract class NodeServer { if (field.getAnnotation(Resource.class) == null) return; if ((src instanceof Service) && Sncp.isRemote((Service) src)) return; //远程模式不得注入 CacheSource - SncpClient client = null; - Transport sameGroupTransport = null; - List diffGroupTransports = null; - try { - Field ts = src.getClass().getDeclaredField("_sameGroupTransport"); - ts.setAccessible(true); - sameGroupTransport = (Transport) ts.get(src); - - ts = src.getClass().getDeclaredField("_diffGroupTransports"); - ts.setAccessible(true); - Transport[] dts = (Transport[]) ts.get(src); - if (dts != null) diffGroupTransports = Arrays.asList(dts); - - ts = src.getClass().getDeclaredField("_client"); - ts.setAccessible(true); - client = (SncpClient) ts.get(src); - } catch (Exception e) { - throw new RuntimeException(src.getClass().getName() + " not found _sameGroupTransport or _diffGroupTransports at " + field, e); - } + SncpClient client = Sncp.getSncpClient((Service) src); + Transport sameGroupTransport = Sncp.getSameGroupTransport((Service) src); + List diffGroupTransports = Arrays.asList(Sncp.getDiffGroupTransports((Service) src)); final InetSocketAddress sncpAddr = client == null ? null : client.getClientAddress(); final CacheSourceService source = Sncp.createLocalService(resourceName, getExecutor(), appResFactory, CacheSourceService.class, sncpAddr, sameGroupTransport, diffGroupTransports); Type genericType = field.getGenericType(); diff --git a/src/org/redkale/net/sncp/Sncp.java b/src/org/redkale/net/sncp/Sncp.java index 968299284..fd4891626 100644 --- a/src/org/redkale/net/sncp/Sncp.java +++ b/src/org/redkale/net/sncp/Sncp.java @@ -95,6 +95,39 @@ public abstract class Sncp { return dyn != null && dyn.remote(); } + public static SncpClient getSncpClient(Service service) { + if (service == null) return null; + try { + Field ts = service.getClass().getDeclaredField(FIELDPREFIX + "_client"); + ts.setAccessible(true); + return (SncpClient) ts.get(service); + } catch (Exception e) { + throw new RuntimeException(service + " not found " + FIELDPREFIX + "_client"); + } + } + + public static Transport getSameGroupTransport(Service service) { + if (service == null) return null; + try { + Field ts = service.getClass().getDeclaredField(FIELDPREFIX + "_sameGroupTransport"); + ts.setAccessible(true); + return (Transport) ts.get(service); + } catch (Exception e) { + throw new RuntimeException(service + " not found " + FIELDPREFIX + "_sameGroupTransport"); + } + } + + public static Transport[] getDiffGroupTransports(Service service) { + if (service == null) return null; + try { + Field ts = service.getClass().getDeclaredField(FIELDPREFIX + "_diffGroupTransports"); + ts.setAccessible(true); + return (Transport[]) ts.get(service); + } catch (Exception e) { + throw new RuntimeException(service + " not found " + FIELDPREFIX + "_diffGroupTransports"); + } + } + /** *
      * public class TestService implements Service{