From 14b13f0c69e3523d3519db910156633ee08ace98 Mon Sep 17 00:00:00 2001 From: wentch <22250530@qq.com> Date: Fri, 15 Jan 2016 09:38:58 +0800 Subject: [PATCH] --- src/org/redkale/boot/NodeHttpServer.java | 6 ++++-- src/org/redkale/boot/NodeServer.java | 14 ++++++++----- src/org/redkale/util/ResourceFactory.java | 24 +++++++++++------------ 3 files changed, 25 insertions(+), 19 deletions(-) diff --git a/src/org/redkale/boot/NodeHttpServer.java b/src/org/redkale/boot/NodeHttpServer.java index 152dd5bf2..a96f6f882 100644 --- a/src/org/redkale/boot/NodeHttpServer.java +++ b/src/org/redkale/boot/NodeHttpServer.java @@ -70,8 +70,8 @@ public final class NodeHttpServer extends NodeServer { final ResourceFactory regFactory = application.getResourceFactory(); factory.add(WebSocketNode.class, (ResourceFactory rf, final Object src, final String resourceName, Field field, Object attachment) -> { //主要用于单点的服务 try { - if (field.getAnnotation(Resource.class) == null) return; - if (!(src instanceof WebSocketServlet)) return; + if (field.getAnnotation(Resource.class) == null) return null; + if (!(src instanceof WebSocketServlet)) return null; synchronized (regFactory) { Service nodeService = (Service) rf.find(resourceName, WebSocketNode.class); if (nodeService == null) { @@ -81,9 +81,11 @@ public final class NodeHttpServer extends NodeServer { logger.fine("[" + Thread.currentThread().getName() + "] Load Service " + nodeService); } field.set(src, nodeService); + return nodeService; } } catch (Exception e) { logger.log(Level.SEVERE, "WebSocketNode inject error", e); + return null; } }); } diff --git a/src/org/redkale/boot/NodeServer.java b/src/org/redkale/boot/NodeServer.java index 09715f0db..12e4b210c 100644 --- a/src/org/redkale/boot/NodeServer.java +++ b/src/org/redkale/boot/NodeServer.java @@ -158,8 +158,8 @@ public abstract class NodeServer { final ResourceFactory regFactory = application.getResourceFactory(); factory.add(DataSource.class, (ResourceFactory rf, final Object src, String resourceName, Field field, final Object attachment) -> { try { - if (field.getAnnotation(Resource.class) == null) return; - if ((src instanceof Service) && Sncp.isRemote((Service) src)) return; //远程模式不得注入 DataSource + if (field.getAnnotation(Resource.class) == null) return null; + if ((src instanceof Service) && Sncp.isRemote((Service) src)) return null; //远程模式不得注入 DataSource DataSource source = new DataDefaultSource(resourceName); application.dataSources.add(source); regFactory.register(resourceName, DataSource.class, source); @@ -195,15 +195,17 @@ public abstract class NodeServer { if (fine) logger.fine("[" + Thread.currentThread().getName() + "] Load Service " + wrapper.getService()); } field.set(src, source); - rf.inject(source, self); // 给 "datasource.nodeid" 赋值 + rf.inject(source, self); // 给 "datasource.nodeid" 赋值; + return source; } catch (Exception e) { logger.log(Level.SEVERE, "DataSource inject error", e); + return null; } }); factory.add(CacheSource.class, (ResourceFactory rf, final Object src, final String resourceName, Field field, final Object attachment) -> { try { - if (field.getAnnotation(Resource.class) == null) return; - if ((src instanceof Service) && Sncp.isRemote((Service) src)) return; //远程模式不得注入 CacheSource + if (field.getAnnotation(Resource.class) == null) return null; + if ((src instanceof Service) && Sncp.isRemote((Service) src)) return null; //远程模式不得注入 CacheSource SncpClient client = null; Transport sameGroupTransport = null; @@ -244,8 +246,10 @@ public abstract class NodeServer { if (finer) logger.finer("[" + Thread.currentThread().getName() + "] Load Service " + wrapper.getService()); } logger.finer("[" + Thread.currentThread().getName() + "] Load Source " + source); + return source; } catch (Exception e) { logger.log(Level.SEVERE, "DataSource inject error", e); + return null; } }); } diff --git a/src/org/redkale/util/ResourceFactory.java b/src/org/redkale/util/ResourceFactory.java index 098eedc27..c24368a1a 100644 --- a/src/org/redkale/util/ResourceFactory.java +++ b/src/org/redkale/util/ResourceFactory.java @@ -31,7 +31,7 @@ public final class ResourceFactory { private static final ResourceFactory instance = new ResourceFactory(null); - private final ConcurrentHashMap interceptmap = new ConcurrentHashMap(); + private final ConcurrentHashMap loadermap = new ConcurrentHashMap(); private final ConcurrentHashMap, ConcurrentHashMap> store = new ConcurrentHashMap(); @@ -61,9 +61,9 @@ public final class ResourceFactory { if (rs != null) register("", rs.getClass(), rs); } - public void add(final Type clazz, final ResourceHandler rs) { + public void add(final Type clazz, final ResourceLoader rs) { if (clazz == null || rs == null) return; - interceptmap.put(clazz, rs); + loadermap.put(clazz, rs); } public void register(final String name, final Object rs) { @@ -218,10 +218,10 @@ public final class ResourceFactory { } } if (rs == null) { - ResourceHandler it = findHandler(field.getGenericType(), field); - if (it != null) it.execute(this, src, rcname, field, attachment); - continue; + ResourceLoader it = findLoader(field.getGenericType(), field); + rs = it.load(this, src, rcname, field, attachment); } + if (rs == null) continue; if (!rs.getClass().isPrimitive() && classtype.isPrimitive()) { if (classtype == int.class) { rs = Integer.decode(rs.toString()); @@ -249,21 +249,21 @@ public final class ResourceFactory { } } - private ResourceHandler findHandler(Type ft, Field field) { - ResourceHandler it = this.interceptmap.get(ft); + private ResourceLoader findLoader(Type ft, Field field) { + ResourceLoader it = this.loadermap.get(ft); if (it != null) return it; Class c = field.getType(); - for (Map.Entry en : this.interceptmap.entrySet()) { + for (Map.Entry en : this.loadermap.entrySet()) { Type t = en.getKey(); if (t == ft) return en.getValue(); if (t instanceof Class && (((Class) t)).isAssignableFrom(c)) return en.getValue(); } - return parent == null ? null : parent.findHandler(ft, field); + return parent == null ? null : parent.findLoader(ft, field); } - public static interface ResourceHandler { + public static interface ResourceLoader { - public void execute(ResourceFactory factory, Object src, String resourceName, Field field, Object attachment); + public Object load(ResourceFactory factory, Object src, String resourceName, Field field, Object attachment); } }