From bd00591e79123836c7259a834e09e253a2b502cf Mon Sep 17 00:00:00 2001 From: wentch <22250530@qq.com> Date: Wed, 23 Dec 2015 10:33:59 +0800 Subject: [PATCH] --- src/org/redkale/net/http/WebSocketNode.java | 6 +- src/org/redkale/net/sncp/Sncp.java | 3 +- src/org/redkale/net/sncp/SncpClient.java | 93 ++-- src/org/redkale/net/sncp/SncpDynServlet.java | 7 +- src/org/redkale/net/sncp/SncpParamType.java | 22 - .../redkale/service/CacheSourceService.java | 83 +++- .../redkale/service/DataSourceService.java | 465 ++++++++++++++---- .../DynAttachment.java} | 7 +- .../SncpCall.java => service/DynCall.java} | 4 +- .../DynRemote.java} | 4 +- src/org/redkale/service/DynSourceAddress.java | 25 + src/org/redkale/service/DynTargetAddress.java | 25 + .../redkale/service/WebSocketNodeService.java | 3 +- src/org/redkale/source/CacheSource.java | 41 +- src/org/redkale/source/DataDefaultSource.java | 401 +++++++++++++-- src/org/redkale/source/DataSource.java | 140 +++++- 16 files changed, 1096 insertions(+), 233 deletions(-) delete mode 100644 src/org/redkale/net/sncp/SncpParamType.java rename src/org/redkale/{net/sncp/SncpParam.java => service/DynAttachment.java} (66%) rename src/org/redkale/{net/sncp/SncpCall.java => service/DynCall.java} (87%) rename src/org/redkale/{net/sncp/SncpRemote.java => service/DynRemote.java} (85%) create mode 100644 src/org/redkale/service/DynSourceAddress.java create mode 100644 src/org/redkale/service/DynTargetAddress.java diff --git a/src/org/redkale/net/http/WebSocketNode.java b/src/org/redkale/net/http/WebSocketNode.java index e51963add..3160df0e5 100644 --- a/src/org/redkale/net/http/WebSocketNode.java +++ b/src/org/redkale/net/http/WebSocketNode.java @@ -12,7 +12,7 @@ import java.util.*; import java.util.concurrent.*; import java.util.logging.*; import javax.annotation.*; -import org.redkale.net.sncp.*; +import org.redkale.service.*; import org.redkale.source.*; import org.redkale.util.*; @@ -30,7 +30,7 @@ public abstract class WebSocketNode { @Resource(name = "SERVER_ADDR") protected InetSocketAddress localSncpAddress; //为SncpServer的服务address - @SncpRemote + @DynRemote protected WebSocketNode remoteNode; //存放所有用户分布在节点上的队列信息,Set 为 sncpnode 的集合 @@ -55,7 +55,7 @@ public abstract class WebSocketNode { }); } - protected abstract int sendMessage(@SncpParam(SncpParamType.TargetAddress) InetSocketAddress targetAddress, Serializable groupid, boolean recent, Serializable message, boolean last); + protected abstract int sendMessage(@DynTargetAddress InetSocketAddress targetAddress, Serializable groupid, boolean recent, Serializable message, boolean last); protected abstract void connect(Serializable groupid, InetSocketAddress addr); diff --git a/src/org/redkale/net/sncp/Sncp.java b/src/org/redkale/net/sncp/Sncp.java index c15990d29..9536e71a8 100644 --- a/src/org/redkale/net/sncp/Sncp.java +++ b/src/org/redkale/net/sncp/Sncp.java @@ -21,6 +21,7 @@ import org.redkale.convert.bson.*; import org.redkale.net.*; import org.redkale.service.*; import org.redkale.util.*; +import org.redkale.service.DynRemote; /** * Service Node Communicate Protocol @@ -669,7 +670,7 @@ public abstract class Sncp { for (Field field : loop.getDeclaredFields()) { int mod = field.getModifiers(); if (Modifier.isFinal(mod) || Modifier.isStatic(mod)) continue; - if (field.getAnnotation(SncpRemote.class) != null) { + if (field.getAnnotation(DynRemote.class) != null) { field.setAccessible(true); if (remoteTransport == null) { List list = new ArrayList<>(); diff --git a/src/org/redkale/net/sncp/SncpClient.java b/src/org/redkale/net/sncp/SncpClient.java index d802e69c2..2f2e8bb4f 100644 --- a/src/org/redkale/net/sncp/SncpClient.java +++ b/src/org/redkale/net/sncp/SncpClient.java @@ -5,7 +5,6 @@ */ package org.redkale.net.sncp; -import static org.redkale.net.sncp.SncpRequest.*; import java.lang.annotation.*; import java.lang.reflect.*; import java.net.*; @@ -18,7 +17,10 @@ import java.util.logging.*; import org.redkale.convert.bson.*; import org.redkale.convert.json.*; import org.redkale.net.*; +import static org.redkale.net.sncp.SncpRequest.*; +import org.redkale.service.*; import org.redkale.util.*; +import org.redkale.service.DynCall; /** * @@ -39,9 +41,13 @@ public final class SncpClient { protected final Attribute[] paramAttrs; // 为null表示无SncpCall处理,index=0固定为null, 其他为参数标记的SncpCall回调方法 - protected final int targetAddressParamIndex; + protected final int handlerFuncParamIndex; - protected final int sourceAddressParamIndex; + protected final int handlerAttachParamIndex; + + protected final int addressTargetParamIndex; + + protected final int addressSourceParamIndex; public SncpAction(Method method, DLong actionid) { this.actionid = actionid; @@ -56,29 +62,36 @@ public final class SncpClient { Annotation[][] anns = method.getParameterAnnotations(); int targetAddrIndex = -1; int sourceAddrIndex = -1; + int handlerAttachIndex = -1; + int handlerFuncIndex = -1; boolean hasattr = false; Attribute[] atts = new Attribute[paramTypes.length + 1]; if (anns.length > 0) { Class[] params = method.getParameterTypes(); + for (int i = 0; i < params.length; i++) { + if (CompletionHandler.class.isAssignableFrom(params[i])) { + handlerFuncIndex = i; + break; + } + } for (int i = 0; i < anns.length; i++) { if (anns[i].length > 0) { for (Annotation ann : anns[i]) { - if (ann.annotationType() == SncpParam.class) { - SncpParam sncpParam = (SncpParam) ann; - if (sncpParam.value() == SncpParamType.TargetAddress && SocketAddress.class.isAssignableFrom(params[i])) { - targetAddrIndex = i; - } else if (sncpParam.value() == SncpParamType.SourceAddress && SocketAddress.class.isAssignableFrom(params[i])) { - sourceAddrIndex = i; - } + if (ann.annotationType() == DynAttachment.class) { + handlerAttachIndex = i; + } else if (ann.annotationType() == DynTargetAddress.class && SocketAddress.class.isAssignableFrom(params[i])) { + targetAddrIndex = i; + } else if (ann.annotationType() == DynSourceAddress.class && SocketAddress.class.isAssignableFrom(params[i])) { + sourceAddrIndex = i; } } for (Annotation ann : anns[i]) { - if (ann.annotationType() == SncpCall.class) { + if (ann.annotationType() == DynCall.class) { try { - atts[i + 1] = ((SncpCall) ann).value().newInstance(); + atts[i + 1] = ((DynCall) ann).value().newInstance(); hasattr = true; } catch (Exception e) { - logger.log(Level.SEVERE, SncpCall.class.getSimpleName() + ".attribute cannot a newInstance for" + method, e); + logger.log(Level.SEVERE, DynCall.class.getSimpleName() + ".attribute cannot a newInstance for" + method, e); } break; } @@ -86,9 +99,12 @@ public final class SncpClient { } } } - this.targetAddressParamIndex = targetAddrIndex; - this.sourceAddressParamIndex = sourceAddrIndex; + this.addressTargetParamIndex = targetAddrIndex; + this.addressSourceParamIndex = sourceAddrIndex; + this.handlerFuncParamIndex = handlerFuncIndex; + this.handlerAttachParamIndex = handlerAttachIndex; this.paramAttrs = hasattr ? atts : null; + if (this.handlerFuncParamIndex >= 0 && method.getReturnType() != void.class) throw new RuntimeException(method + " has CompletionHandler type parameter but return type is not void"); } @Override @@ -209,10 +225,13 @@ public final class SncpClient { } public T remote(final BsonConvert convert, Transport transport, final int index, final Object... params) { - Future future = remote(convert, transport, actions[index], params); + final SncpAction action = actions[index]; + final CompletionHandler handlerFunc = action.handlerFuncParamIndex >= 0 ? (CompletionHandler) params[action.handlerFuncParamIndex] : null; + if (action.handlerFuncParamIndex >= 0) params[action.handlerFuncParamIndex] = null; + Future future = remote0(handlerFunc, convert, transport, action, params); + if (handlerFunc != null) return null; final BsonReader in = convert.pollBsonReader(); try { - final SncpAction action = actions[index]; in.setBytes(future.get(5, TimeUnit.SECONDS)); byte i; while ((i = in.readByte()) != 0) { @@ -232,7 +251,7 @@ public final class SncpClient { if (!run || transports == null || transports.length < 1) return; remote(convert, transports[0], index, params); for (int i = 1; i < transports.length; i++) { - remote(convert, transports[i], actions[index], params); + remote0(null, convert, transports[i], actions[index], params); } } @@ -240,22 +259,16 @@ public final class SncpClient { if (!run || transports == null || transports.length < 1) return; if (executor != null) { executor.accept(() -> { - remote(convert, transports[0], index, params); - for (int i = 1; i < transports.length; i++) { - remote(convert, transports[i], actions[index], params); - } + remote(convert, transports, run, index, params); }); } else { - remote(convert, transports[0], index, params); - for (int i = 1; i < transports.length; i++) { - remote(convert, transports[i], actions[index], params); - } + remote(convert, transports, run, index, params); } } - private Future remote(final BsonConvert convert, final Transport transport, final SncpAction action, final Object... params) { + private Future remote0(final CompletionHandler handler, final BsonConvert convert, final Transport transport, final SncpAction action, final Object... params) { Type[] myparamtypes = action.paramTypes; - if (action.sourceAddressParamIndex >= 0) params[action.sourceAddressParamIndex] = this.address; + if (action.addressSourceParamIndex >= 0) params[action.addressSourceParamIndex] = this.address; final BsonWriter writer = convert.pollBsonWriter(transport.getBufferSupplier()); // 将head写入 writer.writeTo(DEFAULT_HEADER); for (int i = 0; i < params.length; i++) { @@ -264,7 +277,7 @@ public final class SncpClient { final int reqBodyLength = writer.count() - HEADER_SIZE; //body总长度 final long seqid = System.nanoTime(); final DLong actionid = action.actionid; - final SocketAddress addr = action.targetAddressParamIndex >= 0 ? (SocketAddress) params[action.targetAddressParamIndex] : null; + final SocketAddress addr = action.addressTargetParamIndex >= 0 ? (SocketAddress) params[action.addressTargetParamIndex] : null; final AsyncConnection conn = transport.pollConnection(addr); if (conn == null || !conn.isOpen()) { logger.log(Level.SEVERE, action.method + " sncp (params: " + jsonConvert.convertTo(params) + ") cannot connect " + (conn == null ? addr : conn.getRemoteAddress())); @@ -356,6 +369,24 @@ public final class SncpClient { future.set(this.body); transport.offerBuffer(buffer); transport.offerConnection(false, conn); + if (handler != null) { + final Object handlerAttach = action.handlerAttachParamIndex >= 0 ? params[action.handlerAttachParamIndex] : null; + final BsonReader in = convert.pollBsonReader(); + try { + in.setBytes(this.body); + byte i; + while ((i = in.readByte()) != 0) { + final Attribute attr = action.paramAttrs[i]; + attr.set(params[i - 1], convert.convertFrom(in, attr.type())); + } + Object rs = convert.convertFrom(in, action.resultTypes); + handler.completed(rs, handlerAttach); + } catch (Exception e) { + handler.failed(e, handlerAttach); + } finally { + convert.offerBsonReader(in); + } + } } @Override @@ -364,6 +395,10 @@ public final class SncpClient { future.set(new RuntimeException(action.method + " sncp remote exec failed")); transport.offerBuffer(buffer); transport.offerConnection(true, conn); + if (handler != null) { + final Object handlerAttach = action.handlerAttachParamIndex >= 0 ? params[action.handlerAttachParamIndex] : null; + handler.failed(exc, handlerAttach); + } } }); } diff --git a/src/org/redkale/net/sncp/SncpDynServlet.java b/src/org/redkale/net/sncp/SncpDynServlet.java index 5a0f11fad..d4a71451d 100644 --- a/src/org/redkale/net/sncp/SncpDynServlet.java +++ b/src/org/redkale/net/sncp/SncpDynServlet.java @@ -20,6 +20,7 @@ import jdk.internal.org.objectweb.asm.Type; import org.redkale.convert.bson.*; import org.redkale.service.*; import org.redkale.util.*; +import org.redkale.service.DynCall; /** * @@ -384,12 +385,12 @@ public final class SncpDynServlet extends SncpServlet { for (int i = 0; i < anns.length; i++) { if (anns[i].length > 0) { for (Annotation ann : anns[i]) { - if (ann.annotationType() == SncpCall.class) { + if (ann.annotationType() == DynCall.class) { try { - atts[i + 1] = ((SncpCall) ann).value().newInstance(); + atts[i + 1] = ((DynCall) ann).value().newInstance(); hasattr = true; } catch (Exception e) { - logger.log(Level.SEVERE, SncpCall.class.getSimpleName() + ".attribute cannot a newInstance for" + method, e); + logger.log(Level.SEVERE, DynCall.class.getSimpleName() + ".attribute cannot a newInstance for" + method, e); } break; } diff --git a/src/org/redkale/net/sncp/SncpParamType.java b/src/org/redkale/net/sncp/SncpParamType.java deleted file mode 100644 index c445dfcf4..000000000 --- a/src/org/redkale/net/sncp/SncpParamType.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package org.redkale.net.sncp; - -/** - * - * @see http://www.redkale.org - * @author zhangjx - */ -public enum SncpParamType { - /** - * SNCP协议中标记为来源地址参数, 该注解只能标记在类型为SocketAddress或InetSocketAddress的参数上。 - */ - SourceAddress, - /** - * SNCP协议中标记为目标地址参数, 该注解只能标记在类型为SocketAddress或InetSocketAddress的参数上。 - */ - TargetAddress; -} diff --git a/src/org/redkale/service/CacheSourceService.java b/src/org/redkale/service/CacheSourceService.java index 952e0d1ec..7e574c63b 100644 --- a/src/org/redkale/service/CacheSourceService.java +++ b/src/org/redkale/service/CacheSourceService.java @@ -7,6 +7,7 @@ package org.redkale.service; import java.io.*; import java.lang.reflect.*; +import java.nio.channels.*; import java.util.*; import java.util.concurrent.*; import java.util.function.*; @@ -165,6 +166,11 @@ public class CacheSourceService implements CacheSource, Service, AutoCloseable { return !entry.isExpired(); } + @Override + public void exists(final CompletionHandler handler, @DynAttachment final Serializable key) { + if (handler != null) handler.completed(exists(key), key); + } + @Override public T get(Serializable key) { if (key == null) return null; @@ -173,6 +179,11 @@ public class CacheSourceService implements CacheSource, Service, AutoCloseable { return (T) entry.getValue(); } + @Override + public void get(final CompletionHandler handler, @DynAttachment final Serializable key) { + if (handler != null) handler.completed(get(key), key); + } + @Override @MultiRun public T getAndRefresh(Serializable key) { @@ -183,6 +194,12 @@ public class CacheSourceService implements CacheSource, Service, AutoCloseable { return (T) entry.getValue(); } + @Override + public void getAndRefresh(final CompletionHandler handler, @DynAttachment final Serializable key) { + T rs = getAndRefresh(key); + if (handler != null) handler.completed(rs, key); + } + @Override @MultiRun public void refresh(Serializable key) { @@ -192,6 +209,12 @@ public class CacheSourceService implements CacheSource, Service, AutoCloseable { entry.lastAccessed = (int) (System.currentTimeMillis() / 1000); } + @Override + public void refresh(final CompletionHandler handler, final Serializable key) { + refresh(key); + if (handler != null) handler.completed(null, key); + } + @Override @MultiRun public void set(Serializable key, T value) { @@ -208,12 +231,9 @@ public class CacheSourceService implements CacheSource, Service, AutoCloseable { } @Override - @MultiRun - public void setExpireSeconds(Serializable key, int expireSeconds) { - if (key == null) return; - CacheEntry entry = container.get(key); - if (entry == null) return; - entry.expireSeconds = expireSeconds; + public void set(final CompletionHandler handler, @DynAttachment final Serializable key, final T value) { + set(key, value); + if (handler != null) handler.completed(null, key); } @Override @@ -231,6 +251,27 @@ public class CacheSourceService implements CacheSource, Service, AutoCloseable { } } + @Override + public void set(final CompletionHandler handler, final int expireSeconds, @DynAttachment final Serializable key, final T value) { + set(expireSeconds, key, value); + if (handler != null) handler.completed(null, key); + } + + @Override + @MultiRun + public void setExpireSeconds(Serializable key, int expireSeconds) { + if (key == null) return; + CacheEntry entry = container.get(key); + if (entry == null) return; + entry.expireSeconds = expireSeconds; + } + + @Override + public void setExpireSeconds(final CompletionHandler handler, @DynAttachment final Serializable key, final int expireSeconds) { + setExpireSeconds(key, expireSeconds); + if (handler != null) handler.completed(null, key); + } + @Override @MultiRun public void remove(Serializable key) { @@ -238,6 +279,12 @@ public class CacheSourceService implements CacheSource, Service, AutoCloseable { container.remove(key); } + @Override + public void remove(final CompletionHandler handler, @DynAttachment final Serializable key) { + remove(key); + if (handler != null) handler.completed(null, key); + } + @Override @MultiRun public void appendListItem(Serializable key, V value) { @@ -254,6 +301,12 @@ public class CacheSourceService implements CacheSource, Service, AutoCloseable { } } + @Override + public void appendListItem(final CompletionHandler handler, @DynAttachment final Serializable key, final T value) { + appendListItem(key, value); + if (handler != null) handler.completed(null, key); + } + @Override @MultiRun public void removeListItem(Serializable key, V value) { @@ -263,6 +316,12 @@ public class CacheSourceService implements CacheSource, Service, AutoCloseable { ((List) entry.getValue()).remove(value); } + @Override + public void removeListItem(final CompletionHandler handler, @DynAttachment final Serializable key, final T value) { + removeListItem(key, value); + if (handler != null) handler.completed(null, key); + } + @Override @MultiRun public void appendSetItem(Serializable key, V value) { @@ -279,6 +338,12 @@ public class CacheSourceService implements CacheSource, Service, AutoCloseable { } } + @Override + public void appendSetItem(final CompletionHandler handler, @DynAttachment final Serializable key, final T value) { + appendSetItem(key, value); + if (handler != null) handler.completed(null, key); + } + @Override @MultiRun public void removeSetItem(Serializable key, V value) { @@ -288,6 +353,12 @@ public class CacheSourceService implements CacheSource, Service, AutoCloseable { ((Set) entry.getValue()).remove(value); } + @Override + public void removeSetItem(final CompletionHandler handler, @DynAttachment final Serializable key, final T value) { + removeSetItem(key, value); + if (handler != null) handler.completed(null, key); + } + public static final class CacheEntry { public static class CacheEntryCreator implements Creator { diff --git a/src/org/redkale/service/DataSourceService.java b/src/org/redkale/service/DataSourceService.java index ababd8004..978c8870a 100644 --- a/src/org/redkale/service/DataSourceService.java +++ b/src/org/redkale/service/DataSourceService.java @@ -6,6 +6,7 @@ package org.redkale.service; import java.io.*; +import java.nio.channels.*; import java.util.*; import javax.annotation.*; import org.redkale.net.sncp.*; @@ -35,12 +36,18 @@ public class DataSourceService implements DataSource, Service, AutoCloseable { } @Override - public void insert(@SncpCall(DataCallArrayAttribute.class) T... values) { + public void insert(@DynCall(DataCallArrayAttribute.class) T... values) { source.insert(values); } @Override - public void insert(DataConnection conn, @SncpCall(DataCallArrayAttribute.class) T... values) { + public void insert(final CompletionHandler handler, @DynAttachment @DynCall(DataCallArrayAttribute.class) final T... values) { + source.insert(values); + if (handler != null) handler.completed(null, values); + } + + @Override + public void insert(DataConnection conn, @DynCall(DataCallArrayAttribute.class) T... values) { source.insert(conn, values); } @@ -49,26 +56,44 @@ public class DataSourceService implements DataSource, Service, AutoCloseable { source.delete(values); } + @Override + public void delete(final CompletionHandler handler, @DynAttachment final T... values) { + source.delete(values); + if (handler != null) handler.completed(null, values); + } + @Override public void delete(DataConnection conn, T... values) { source.delete(conn, values); } @Override - public void delete(Class clazz, Serializable... ids) { + public void delete(final Class clazz, final Serializable... ids) { source.delete(clazz, ids); } @Override - public void delete(DataConnection conn, Class clazz, Serializable... ids) { + public void delete(final CompletionHandler handler, final Class clazz, @DynAttachment final Serializable... ids) { + source.delete(clazz, ids); + if (handler != null) handler.completed(null, ids); + } + + @Override + public void delete(DataConnection conn, Class clazz, final Serializable... ids) { source.delete(conn, clazz, ids); } @Override - public void delete(Class clazz, FilterNode node) { + public void delete(final Class clazz, FilterNode node) { source.delete(clazz, node); } + @Override + public void delete(final CompletionHandler handler, final Class clazz, @DynAttachment final FilterNode node) { + source.delete(clazz, node); + if (handler != null) handler.completed(null, node); + } + @Override public void delete(DataConnection conn, Class clazz, FilterNode node) { source.delete(conn, clazz, node); @@ -79,139 +104,277 @@ public class DataSourceService implements DataSource, Service, AutoCloseable { source.update(values); } + @Override + public void update(final CompletionHandler handler, @DynAttachment final T... values) { + source.update(values); + if (handler != null) handler.completed(null, values); + } + @Override public void update(DataConnection conn, T... values) { source.update(conn, values); } @Override - public void updateColumn(Class clazz, Serializable id, String column, Serializable value) { + public void updateColumn(final Class clazz, final Serializable id, final String column, final Serializable value) { source.updateColumn(clazz, id, column, value); } @Override - public void updateColumn(DataConnection conn, Class clazz, Serializable id, String column, Serializable value) { + public void updateColumn(final CompletionHandler handler, final Class clazz, @DynAttachment final Serializable id, final String column, final Serializable value) { + source.updateColumn(clazz, id, column, value); + if (handler != null) handler.completed(null, id); + } + + @Override + public void updateColumn(DataConnection conn, Class clazz, final Serializable id, final String column, final Serializable value) { source.updateColumn(conn, clazz, id, column, value); } @Override - public void updateColumns(T value, String... columns) { - source.updateColumns(value, columns); - } - - @Override - public void updateColumns(DataConnection conn, T value, String... columns) { - source.updateColumns(conn, value, columns); - } - - @Override - public void updateColumnIncrement(Class clazz, Serializable id, String column, long incvalue) { + public void updateColumnIncrement(final Class clazz, final Serializable id, final String column, long incvalue) { source.updateColumnIncrement(clazz, id, column, incvalue); } @Override - public void updateColumnIncrement(DataConnection conn, Class clazz, Serializable id, String column, long incvalue) { + public void updateColumnIncrement(final CompletionHandler handler, final Class clazz, @DynAttachment final Serializable id, final String column, long incvalue) { + source.updateColumnIncrement(clazz, id, column, incvalue); + if (handler != null) handler.completed(null, id); + } + + @Override + public void updateColumnIncrement(DataConnection conn, Class clazz, final Serializable id, final String column, long incvalue) { source.updateColumnIncrement(conn, clazz, id, column, incvalue); } @Override - public void updateColumnAnd(Class clazz, Serializable id, String column, long incvalue) { + public void updateColumnAnd(final Class clazz, final Serializable id, final String column, long incvalue) { source.updateColumnAnd(clazz, id, column, incvalue); } @Override - public void updateColumnAnd(DataConnection conn, Class clazz, Serializable id, String column, long incvalue) { + public void updateColumnAnd(final CompletionHandler handler, final Class clazz, @DynAttachment final Serializable id, final String column, long incvalue) { + source.updateColumnAnd(clazz, id, column, incvalue); + if (handler != null) handler.completed(null, id); + } + + @Override + public void updateColumnAnd(DataConnection conn, Class clazz, final Serializable id, final String column, long incvalue) { source.updateColumnAnd(conn, clazz, id, column, incvalue); } @Override - public void updateColumnOr(Class clazz, Serializable id, String column, long incvalue) { + public void updateColumnOr(final Class clazz, final Serializable id, final String column, long incvalue) { source.updateColumnOr(clazz, id, column, incvalue); } @Override - public void updateColumnOr(DataConnection conn, Class clazz, Serializable id, String column, long incvalue) { + public void updateColumnOr(final CompletionHandler handler, final Class clazz, @DynAttachment final Serializable id, final String column, long incvalue) { + source.updateColumnOr(clazz, id, column, incvalue); + if (handler != null) handler.completed(null, id); + } + + @Override + public void updateColumnOr(DataConnection conn, Class clazz, final Serializable id, final String column, long incvalue) { source.updateColumnOr(conn, clazz, id, column, incvalue); } @Override - public Number getNumberResult(Class entityClass, FilterFunc func, String column) { + public void updateColumns(T value, final String... columns) { + source.updateColumns(value, columns); + } + + @Override + public void updateColumns(final CompletionHandler handler, @DynAttachment final T value, final String... columns) { + source.updateColumns(value, columns); + if (handler != null) handler.completed(null, value); + } + + @Override + public void updateColumns(DataConnection conn, T value, final String... columns) { + source.updateColumns(conn, value, columns); + } + + @Override + public Number getNumberResult(final Class entityClass, FilterFunc func, final String column) { return source.getNumberResult(entityClass, func, column); } @Override - public final Number getNumberResult(Class entityClass, FilterFunc func, String column, FilterBean bean) { + public void getNumberResult(final CompletionHandler handler, final Class entityClass, final FilterFunc func, @DynAttachment final String column) { + Number rs = source.getNumberResult(entityClass, func, column); + if (handler != null) handler.completed(rs, column); + } + + @Override + public final Number getNumberResult(final Class entityClass, FilterFunc func, final String column, FilterBean bean) { return getNumberResult(entityClass, func, column, FilterNodeBean.createFilterNode(bean)); } @Override - public Number getNumberResult(Class entityClass, FilterFunc func, String column, FilterNode node) { + public final void getNumberResult(final CompletionHandler handler, final Class entityClass, final FilterFunc func, final String column, final FilterBean bean) { + getNumberResult(handler, entityClass, func, column, FilterNodeBean.createFilterNode(bean)); + } + + @Override + public Number getNumberResult(final Class entityClass, FilterFunc func, final String column, FilterNode node) { return source.getNumberResult(entityClass, func, column, node); } @Override - public Map queryColumnMap(Class entityClass, String keyColumn, FilterFunc func, String funcColumn) { + public void getNumberResult(final CompletionHandler handler, final Class entityClass, final FilterFunc func, final String column, @DynAttachment final FilterNode node) { + Number rs = source.getNumberResult(entityClass, func, column, node); + if (handler != null) handler.completed(rs, node); + } + + @Override + public Map queryColumnMap(final Class entityClass, final String keyColumn, FilterFunc func, final String funcColumn) { return source.queryColumnMap(entityClass, keyColumn, func, funcColumn); } @Override - public final Map queryColumnMap(Class entityClass, String keyColumn, FilterFunc func, String funcColumn, FilterBean bean) { + public void queryColumnMap(final CompletionHandler, String> handler, final Class entityClass, final String keyColumn, final FilterFunc func, @DynAttachment final String funcColumn) { + Map map = source.queryColumnMap(entityClass, keyColumn, func, funcColumn); + if (handler != null) handler.completed(map, funcColumn); + } + + @Override + public final Map queryColumnMap(final Class entityClass, final String keyColumn, FilterFunc func, final String funcColumn, FilterBean bean) { return queryColumnMap(entityClass, keyColumn, func, funcColumn, FilterNodeBean.createFilterNode(bean)); } @Override - public Map queryColumnMap(Class entityClass, String keyColumn, FilterFunc func, String funcColumn, FilterNode node) { + public final void queryColumnMap(final CompletionHandler, FilterNode> handler, final Class entityClass, final String keyColumn, final FilterFunc func, final String funcColumn, final FilterBean bean) { + queryColumnMap(handler, entityClass, keyColumn, func, funcColumn, FilterNodeBean.createFilterNode(bean)); + } + + @Override + public Map queryColumnMap(final Class entityClass, final String keyColumn, FilterFunc func, final String funcColumn, FilterNode node) { return source.queryColumnMap(entityClass, keyColumn, func, funcColumn, node); } @Override - public T find(Class clazz, Serializable pk) { + public void queryColumnMap(final CompletionHandler, FilterNode> handler, final Class entityClass, final String keyColumn, final FilterFunc func, final String funcColumn, @DynAttachment final FilterNode node) { + Map map = source.queryColumnMap(entityClass, keyColumn, func, funcColumn, node); + if (handler != null) handler.completed(map, node); + } + + @Override + public T find(final Class clazz, final Serializable pk) { return source.find(clazz, pk); } @Override - public T find(Class clazz, SelectColumn selects, Serializable pk) { + public void find(final CompletionHandler handler, final Class clazz, @DynAttachment final Serializable pk) { + T rs = source.find(clazz, pk); + if (handler != null) handler.completed(rs, pk); + } + + @Override + public T find(final Class clazz, SelectColumn selects, final Serializable pk) { return source.find(clazz, selects, pk); } @Override - public T findByColumn(Class clazz, String column, Serializable key) { + public void find(final CompletionHandler handler, final Class clazz, final SelectColumn selects, @DynAttachment final Serializable pk) { + T rs = source.find(clazz, selects, pk); + if (handler != null) handler.completed(rs, pk); + } + + @Override + public T findByColumn(final Class clazz, final String column, final Serializable key) { return source.findByColumn(clazz, column, key); } @Override - public T find(Class clazz, FilterNode node) { - return source.find(clazz, node); + public void findByColumn(final CompletionHandler handler, final Class clazz, final String column, @DynAttachment final Serializable key) { + T rs = source.findByColumn(clazz, column, key); + if (handler != null) handler.completed(rs, key); } @Override - public final T find(Class clazz, FilterBean bean) { + public final T find(final Class clazz, FilterBean bean) { return find(clazz, FilterNodeBean.createFilterNode(bean)); } @Override - public boolean exists(Class clazz, Serializable pk) { + public final void find(final CompletionHandler handler, final Class clazz, final FilterBean bean) { + find(handler, clazz, FilterNodeBean.createFilterNode(bean)); + } + + @Override + public T find(final Class clazz, FilterNode node) { + return source.find(clazz, node); + } + + @Override + public void find(final CompletionHandler handler, final Class clazz, @DynAttachment final FilterNode node) { + T rs = source.find(clazz, node); + if (handler != null) handler.completed(rs, node); + } + + @Override + public final T find(final Class clazz, final SelectColumn selects, FilterBean bean) { + return find(clazz, selects, FilterNodeBean.createFilterNode(bean)); + } + + @Override + public final void find(final CompletionHandler handler, final Class clazz, final SelectColumn selects, final FilterBean bean) { + find(handler, clazz, selects, FilterNodeBean.createFilterNode(bean)); + } + + @Override + public T find(final Class clazz, final SelectColumn selects, final FilterNode node) { + return source.find(clazz, selects, node); + } + + @Override + public void find(final CompletionHandler handler, final Class clazz, final SelectColumn selects, @DynAttachment final FilterNode node) { + T rs = source.find(clazz, selects, node); + if (handler != null) handler.completed(rs, node); + } + + @Override + public boolean exists(final Class clazz, final Serializable pk) { return source.exists(clazz, pk); } @Override - public boolean exists(Class clazz, FilterNode node) { - return source.exists(clazz, node); + public void exists(final CompletionHandler handler, final Class clazz, @DynAttachment final Serializable pk) { + boolean rs = source.exists(clazz, pk); + if (handler != null) handler.completed(rs, pk); } @Override - public final boolean exists(Class clazz, FilterBean bean) { + public final boolean exists(final Class clazz, FilterBean bean) { return exists(clazz, FilterNodeBean.createFilterNode(bean)); } @Override - public HashSet queryColumnSet(String selectedColumn, Class clazz, String column, Serializable key) { + public final void exists(final CompletionHandler handler, final Class clazz, final FilterBean bean) { + exists(handler, clazz, FilterNodeBean.createFilterNode(bean)); + } + + @Override + public boolean exists(final Class clazz, FilterNode node) { + return source.exists(clazz, node); + } + + @Override + public void exists(final CompletionHandler handler, final Class clazz, @DynAttachment final FilterNode node) { + boolean rs = source.exists(clazz, node); + if (handler != null) handler.completed(rs, node); + } + + @Override + public HashSet queryColumnSet(String selectedColumn, Class clazz, final String column, final Serializable key) { return source.queryColumnSet(selectedColumn, clazz, column, key); } @Override - public HashSet queryColumnSet(String selectedColumn, Class clazz, FilterNode node) { - return source.queryColumnSet(selectedColumn, clazz, node); + public void queryColumnSet(final CompletionHandler, Serializable> handler, final String selectedColumn, final Class clazz, final String column, @DynAttachment final Serializable key) { + HashSet rs = source.queryColumnSet(selectedColumn, clazz, column, key); + if (handler != null) handler.completed(rs, key); } @Override @@ -220,13 +383,30 @@ public class DataSourceService implements DataSource, Service, AutoCloseable { } @Override - public List queryColumnList(String selectedColumn, Class clazz, String column, Serializable key) { + public final void queryColumnSet(final CompletionHandler, FilterNode> handler, final String selectedColumn, final Class clazz, final FilterBean bean) { + queryColumnSet(handler, selectedColumn, clazz, FilterNodeBean.createFilterNode(bean)); + } + + @Override + public HashSet queryColumnSet(String selectedColumn, Class clazz, FilterNode node) { + return source.queryColumnSet(selectedColumn, clazz, node); + } + + @Override + public void queryColumnSet(final CompletionHandler, FilterNode> handler, final String selectedColumn, final Class clazz, @DynAttachment final FilterNode node) { + HashSet rs = source.queryColumnSet(selectedColumn, clazz, node); + if (handler != null) handler.completed(rs, node); + } + + @Override + public List queryColumnList(String selectedColumn, Class clazz, final String column, final Serializable key) { return source.queryColumnList(selectedColumn, clazz, column, key); } @Override - public List queryColumnList(String selectedColumn, Class clazz, FilterNode node) { - return source.queryColumnList(selectedColumn, clazz, node); + public void queryColumnList(final CompletionHandler, Serializable> handler, final String selectedColumn, final Class clazz, final String column, @DynAttachment final Serializable key) { + List rs = source.queryColumnList(selectedColumn, clazz, column, key); + if (handler != null) handler.completed(rs, key); } @Override @@ -235,53 +415,19 @@ public class DataSourceService implements DataSource, Service, AutoCloseable { } @Override - public List queryList(Class clazz, String column, Serializable key) { - return source.queryList(clazz, column, key); + public final void queryColumnList(final CompletionHandler, FilterNode> handler, final String selectedColumn, final Class clazz, @DynAttachment final FilterBean bean) { + queryColumnList(handler, selectedColumn, clazz, FilterNodeBean.createFilterNode(bean)); } @Override - public List queryList(Class clazz, FilterNode node) { - return source.queryList(clazz, node); + public List queryColumnList(String selectedColumn, Class clazz, FilterNode node) { + return source.queryColumnList(selectedColumn, clazz, node); } @Override - public final List queryList(Class clazz, FilterBean bean) { - return queryList(clazz, FilterNodeBean.createFilterNode(bean)); - } - - @Override - public List queryList(Class clazz, SelectColumn selects, FilterNode node) { - return source.queryList(clazz, selects, node); - } - - @Override - public final List queryList(Class clazz, SelectColumn selects, FilterBean bean) { - return queryList(clazz, FilterNodeBean.createFilterNode(bean)); - } - - @Override - public List queryList(Class clazz, Flipper flipper, String column, Serializable key) { - return source.queryList(clazz, flipper, column, key); - } - - @Override - public List queryList(Class clazz, Flipper flipper, FilterNode node) { - return source.queryList(clazz, flipper, node); - } - - @Override - public final List queryList(Class clazz, Flipper flipper, FilterBean bean) { - return queryList(clazz, flipper, FilterNodeBean.createFilterNode(bean)); - } - - @Override - public List queryList(Class clazz, SelectColumn selects, Flipper flipper, FilterNode node) { - return source.queryList(clazz, selects, flipper, node); - } - - @Override - public final List queryList(Class clazz, SelectColumn selects, Flipper flipper, FilterBean bean) { - return queryList(clazz, selects, flipper, FilterNodeBean.createFilterNode(bean)); + public void queryColumnList(final CompletionHandler, FilterNode> handler, final String selectedColumn, final Class clazz, @DynAttachment final FilterNode node) { + List rs = source.queryColumnList(selectedColumn, clazz, node); + if (handler != null) handler.completed(rs, node); } @Override @@ -289,31 +435,170 @@ public class DataSourceService implements DataSource, Service, AutoCloseable { return queryColumnSheet(selectedColumn, clazz, flipper, FilterNodeBean.createFilterNode(bean)); } + @Override + public final void queryColumnSheet(final CompletionHandler, FilterNode> handler, final String selectedColumn, final Class clazz, final Flipper flipper, final FilterBean bean) { + queryColumnSheet(handler, selectedColumn, clazz, flipper, FilterNodeBean.createFilterNode(bean)); + } + @Override public Sheet queryColumnSheet(String selectedColumn, Class clazz, Flipper flipper, FilterNode node) { return source.queryColumnSheet(selectedColumn, clazz, flipper, node); } @Override - public final Sheet querySheet(Class clazz, Flipper flipper, FilterBean bean) { + public void queryColumnSheet(final CompletionHandler, FilterNode> handler, final String selectedColumn, final Class clazz, final Flipper flipper, @DynAttachment final FilterNode node) { + Sheet rs = source.queryColumnSheet(selectedColumn, clazz, flipper, node); + if (handler != null) handler.completed(rs, node); + } + + @Override + public List queryList(final Class clazz, final String column, final Serializable key) { + return source.queryList(clazz, column, key); + } + + @Override + public void queryList(final CompletionHandler, Serializable> handler, final Class clazz, final String column, @DynAttachment final Serializable key) { + List rs = source.queryList(clazz, column, key); + if (handler != null) handler.completed(rs, key); + } + + @Override + public final List queryList(final Class clazz, final FilterBean bean) { + return queryList(clazz, FilterNodeBean.createFilterNode(bean)); + } + + @Override + public final void queryList(final CompletionHandler, FilterNode> handler, final Class clazz, final FilterBean bean) { + queryList(handler, clazz, FilterNodeBean.createFilterNode(bean)); + } + + @Override + public List queryList(final Class clazz, final FilterNode node) { + return source.queryList(clazz, node); + } + + @Override + public void queryList(final CompletionHandler, FilterNode> handler, final Class clazz, @DynAttachment final FilterNode node) { + List rs = source.queryList(clazz, node); + if (handler != null) handler.completed(rs, node); + } + + @Override + public final List queryList(final Class clazz, final SelectColumn selects, final FilterBean bean) { + return queryList(clazz, FilterNodeBean.createFilterNode(bean)); + } + + @Override + public final void queryList(final CompletionHandler, FilterNode> handler, final Class clazz, final SelectColumn selects, final FilterBean bean) { + queryList(handler, clazz, selects, FilterNodeBean.createFilterNode(bean)); + } + + @Override + public List queryList(final Class clazz, final SelectColumn selects, final FilterNode node) { + return source.queryList(clazz, selects, node); + } + + @Override + public void queryList(final CompletionHandler, FilterNode> handler, final Class clazz, final SelectColumn selects, @DynAttachment final FilterNode node) { + List rs = source.queryList(clazz, selects, node); + if (handler != null) handler.completed(rs, node); + } + + @Override + public List queryList(final Class clazz, final Flipper flipper, final String column, final Serializable key) { + return source.queryList(clazz, flipper, column, key); + } + + @Override + public void queryList(final CompletionHandler, Serializable> handler, final Class clazz, final Flipper flipper, final String column, @DynAttachment final Serializable key) { + List rs = source.queryList(clazz, flipper, column, key); + if (handler != null) handler.completed(rs, key); + } + + @Override + public final List queryList(final Class clazz, final Flipper flipper, final FilterBean bean) { + return queryList(clazz, flipper, FilterNodeBean.createFilterNode(bean)); + } + + @Override + public final void queryList(final CompletionHandler, FilterNode> handler, final Class clazz, final Flipper flipper, final FilterBean bean) { + queryList(handler, clazz, flipper, FilterNodeBean.createFilterNode(bean)); + } + + @Override + public List queryList(final Class clazz, final Flipper flipper, final FilterNode node) { + return source.queryList(clazz, flipper, node); + } + + @Override + public void queryList(final CompletionHandler, FilterNode> handler, final Class clazz, final Flipper flipper, @DynAttachment final FilterNode node) { + List rs = source.queryList(clazz, flipper, node); + if (handler != null) handler.completed(rs, node); + } + + @Override + public final List queryList(final Class clazz, final SelectColumn selects, final Flipper flipper, final FilterBean bean) { + return queryList(clazz, selects, flipper, FilterNodeBean.createFilterNode(bean)); + } + + @Override + public final void queryList(final CompletionHandler, FilterNode> handler, final Class clazz, SelectColumn selects, final Flipper flipper, final FilterBean bean) { + queryList(handler, clazz, selects, flipper, FilterNodeBean.createFilterNode(bean)); + } + + @Override + public List queryList(final Class clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node) { + return source.queryList(clazz, selects, flipper, node); + } + + @Override + public void queryList(final CompletionHandler, FilterNode> handler, final Class clazz, SelectColumn selects, final Flipper flipper, @DynAttachment final FilterNode node) { + List rs = source.queryList(clazz, selects, flipper, node); + if (handler != null) handler.completed(rs, node); + } + + @Override + public final Sheet querySheet(final Class clazz, final Flipper flipper, final FilterBean bean) { return querySheet(clazz, flipper, FilterNodeBean.createFilterNode(bean)); } @Override - public Sheet querySheet(Class clazz, Flipper flipper, FilterNode node) { + public final void querySheet(final CompletionHandler, FilterNode> handler, final Class clazz, final Flipper flipper, final FilterBean bean) { + querySheet(handler, clazz, flipper, FilterNodeBean.createFilterNode(bean)); + } + + @Override + public Sheet querySheet(final Class clazz, final Flipper flipper, final FilterNode node) { return source.querySheet(clazz, flipper, node); } @Override - public final Sheet querySheet(Class clazz, SelectColumn selects, Flipper flipper, FilterBean bean) { + public void querySheet(final CompletionHandler, FilterNode> handler, final Class clazz, final Flipper flipper, @DynAttachment final FilterNode node) { + Sheet rs = source.querySheet(clazz, flipper, node); + if (handler != null) handler.completed(rs, node); + } + + @Override + public final Sheet querySheet(final Class clazz, final SelectColumn selects, final Flipper flipper, final FilterBean bean) { return querySheet(clazz, selects, flipper, FilterNodeBean.createFilterNode(bean)); } @Override - public Sheet querySheet(Class clazz, SelectColumn selects, Flipper flipper, FilterNode node) { + public final void querySheet(final CompletionHandler, FilterNode> handler, final Class clazz, final SelectColumn selects, final Flipper flipper, final FilterBean bean) { + querySheet(handler, clazz, selects, flipper, FilterNodeBean.createFilterNode(bean)); + } + + @Override + public Sheet querySheet(final Class clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node) { return source.querySheet(clazz, selects, flipper, node); } + @Override + public void querySheet(final CompletionHandler, FilterNode> handler, final Class clazz, final SelectColumn selects, final Flipper flipper, @DynAttachment final FilterNode node) { + Sheet rs = source.querySheet(clazz, selects, flipper, node); + if (handler != null) handler.completed(rs, node); + } + @Override public void close() throws Exception { source.getClass().getMethod("close").invoke(source); diff --git a/src/org/redkale/net/sncp/SncpParam.java b/src/org/redkale/service/DynAttachment.java similarity index 66% rename from src/org/redkale/net/sncp/SncpParam.java rename to src/org/redkale/service/DynAttachment.java index 4d29ee123..d9af06d06 100644 --- a/src/org/redkale/net/sncp/SncpParam.java +++ b/src/org/redkale/service/DynAttachment.java @@ -3,14 +3,14 @@ * To change this template file, choose Tools | Templates * and open the template in the editor. */ -package org.redkale.net.sncp; +package org.redkale.service; import java.lang.annotation.*; import static java.lang.annotation.ElementType.PARAMETER; import static java.lang.annotation.RetentionPolicy.RUNTIME; /** - * SNCP协议中Service方法的参数标记。 只有Service的方法为远程模式或@MultiRun时该注解才有效。 + * SNCP协议中用于CompletionHandler回调函数中的attach字段。 * * * @see http://www.redkale.org @@ -20,7 +20,6 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; @Documented @Target({PARAMETER}) @Retention(RUNTIME) -public @interface SncpParam { +public @interface DynAttachment { - SncpParamType value(); } diff --git a/src/org/redkale/net/sncp/SncpCall.java b/src/org/redkale/service/DynCall.java similarity index 87% rename from src/org/redkale/net/sncp/SncpCall.java rename to src/org/redkale/service/DynCall.java index b3c80b240..38d87ae7b 100644 --- a/src/org/redkale/net/sncp/SncpCall.java +++ b/src/org/redkale/service/DynCall.java @@ -3,7 +3,7 @@ * To change this template file, choose Tools | Templates * and open the template in the editor. */ -package org.redkale.net.sncp; +package org.redkale.service; import java.lang.annotation.*; import static java.lang.annotation.RetentionPolicy.RUNTIME; @@ -19,7 +19,7 @@ import org.redkale.util.*; @Documented @Target({ElementType.PARAMETER}) @Retention(RUNTIME) -public @interface SncpCall { +public @interface DynCall { Class value(); } diff --git a/src/org/redkale/net/sncp/SncpRemote.java b/src/org/redkale/service/DynRemote.java similarity index 85% rename from src/org/redkale/net/sncp/SncpRemote.java rename to src/org/redkale/service/DynRemote.java index 0c81f3149..097ae4d64 100644 --- a/src/org/redkale/net/sncp/SncpRemote.java +++ b/src/org/redkale/service/DynRemote.java @@ -3,7 +3,7 @@ * To change this template file, choose Tools | Templates * and open the template in the editor. */ -package org.redkale.net.sncp; +package org.redkale.service; import java.lang.annotation.*; import static java.lang.annotation.ElementType.*; @@ -19,6 +19,6 @@ import static java.lang.annotation.RetentionPolicy.RUNTIME; @Documented @Target({FIELD}) @Retention(RUNTIME) -public @interface SncpRemote { +public @interface DynRemote { } diff --git a/src/org/redkale/service/DynSourceAddress.java b/src/org/redkale/service/DynSourceAddress.java new file mode 100644 index 000000000..c4a6b3ded --- /dev/null +++ b/src/org/redkale/service/DynSourceAddress.java @@ -0,0 +1,25 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.redkale.service; + +import java.lang.annotation.*; +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * SNCP协议中标记为来源地址参数, 该注解只能标记在类型为SocketAddress或InetSocketAddress的参数上。 + * + * + * @see http://www.redkale.org + * @author zhangjx + */ +@Inherited +@Documented +@Target({PARAMETER}) +@Retention(RUNTIME) +public @interface DynSourceAddress { + +} diff --git a/src/org/redkale/service/DynTargetAddress.java b/src/org/redkale/service/DynTargetAddress.java new file mode 100644 index 000000000..50eaba9c7 --- /dev/null +++ b/src/org/redkale/service/DynTargetAddress.java @@ -0,0 +1,25 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.redkale.service; + +import java.lang.annotation.*; +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * SNCP协议中标记为目标地址参数, 该注解只能标记在类型为SocketAddress或InetSocketAddress的参数上。 + * + * + * @see http://www.redkale.org + * @author zhangjx + */ +@Inherited +@Documented +@Target({PARAMETER}) +@Retention(RUNTIME) +public @interface DynTargetAddress { + +} diff --git a/src/org/redkale/service/WebSocketNodeService.java b/src/org/redkale/service/WebSocketNodeService.java index 994e4a9d5..77b027f04 100644 --- a/src/org/redkale/service/WebSocketNodeService.java +++ b/src/org/redkale/service/WebSocketNodeService.java @@ -10,7 +10,6 @@ import java.io.*; import java.net.*; import java.util.*; import org.redkale.net.http.*; -import org.redkale.net.sncp.*; import org.redkale.util.*; /** @@ -32,7 +31,7 @@ public class WebSocketNodeService extends WebSocketNode implements Service { } @Override - public int sendMessage(@SncpParam(SncpParamType.TargetAddress) InetSocketAddress addr, Serializable groupid, boolean recent, Serializable message, boolean last) { + public int sendMessage(@DynTargetAddress InetSocketAddress addr, Serializable groupid, boolean recent, Serializable message, boolean last) { final Set engineids = localNodes.get(groupid); if (engineids == null || engineids.isEmpty()) return RETCODE_GROUP_EMPTY; int code = RETCODE_GROUP_EMPTY; diff --git a/src/org/redkale/source/CacheSource.java b/src/org/redkale/source/CacheSource.java index c392de944..dc3dda124 100644 --- a/src/org/redkale/source/CacheSource.java +++ b/src/org/redkale/source/CacheSource.java @@ -6,6 +6,7 @@ package org.redkale.source; import java.io.*; +import java.nio.channels.*; /** * @@ -30,16 +31,44 @@ public interface CacheSource { public void set(final int expireSeconds, final Serializable key, final T value); - public void setExpireSeconds(Serializable key, int expireSeconds); - + public void setExpireSeconds(final Serializable key, final int expireSeconds); + public void remove(final Serializable key); - public void appendListItem(final Serializable key, final V value); + public void appendListItem(final Serializable key, final T value); - public void removeListItem(final Serializable key, final V value); + public void removeListItem(final Serializable key, final T value); - public void appendSetItem(final Serializable key, final V value); + public void appendSetItem(final Serializable key, final T value); - public void removeSetItem(final Serializable key, final V value); + public void removeSetItem(final Serializable key, final T value); + //----------------------异步版--------------------------------- + public void exists(final CompletionHandler handler, final Serializable key); + + public void get(final CompletionHandler handler, final Serializable key); + + public void getAndRefresh(final CompletionHandler handler, final Serializable key); + + public void refresh(final CompletionHandler handler, final Serializable key); + + public void set(final CompletionHandler handler, final Serializable key, final T value); + + public void set(final CompletionHandler handler, final int expireSeconds, final Serializable key, final T value); + + public void setExpireSeconds(final CompletionHandler handler, final Serializable key, final int expireSeconds); + + public void remove(final CompletionHandler handler, final Serializable key); + + public void appendListItem(final CompletionHandler handler, final Serializable key, final T value); + + public void removeListItem(final CompletionHandler handler, final Serializable key, final T value); + + public void appendSetItem(final CompletionHandler handler, final Serializable key, final T value); + + public void removeSetItem(final CompletionHandler handler, final Serializable key, final T value); + + default void isOpen(final CompletionHandler handler) { + if (handler != null) handler.completed(Boolean.TRUE, null); + } } diff --git a/src/org/redkale/source/DataDefaultSource.java b/src/org/redkale/source/DataDefaultSource.java index f7fac7a07..92374d477 100644 --- a/src/org/redkale/source/DataDefaultSource.java +++ b/src/org/redkale/source/DataDefaultSource.java @@ -9,6 +9,7 @@ import static org.redkale.source.FilterNode.*; import java.io.*; import java.lang.reflect.*; import java.net.*; +import java.nio.channels.*; import java.sql.*; import java.util.*; import java.util.concurrent.atomic.*; @@ -376,6 +377,12 @@ public final class DataDefaultSource implements DataSource, Function void insert(final CompletionHandler handler, final T... values) { + insert(values); + if (handler != null) handler.completed(null, values); + } + /** * 新增对象, 必须是Entity对象 * @@ -561,6 +568,12 @@ public final class DataDefaultSource implements DataSource, Function void delete(final CompletionHandler handler, final T... values) { + delete(values); + if (handler != null) handler.completed(null, values); + } + @Override public void delete(final DataConnection conn, T... values) { if (values.length == 0) return; @@ -594,6 +607,12 @@ public final class DataDefaultSource implements DataSource, Function void delete(final CompletionHandler handler, final Class clazz, final Serializable... ids) { + delete(clazz, ids); + if (handler != null) handler.completed(null, ids); + } + @Override public void delete(final DataConnection conn, Class clazz, Serializable... ids) { delete((Connection) conn.getConnection(), loadEntityInfo(clazz), ids); @@ -637,6 +656,12 @@ public final class DataDefaultSource implements DataSource, Function void delete(final CompletionHandler handler, final Class clazz, final FilterNode node) { + delete(clazz, node); + if (handler != null) handler.completed(null, node); + } + @Override public void delete(final DataConnection conn, Class clazz, FilterNode node) { delete((Connection) conn.getConnection(), loadEntityInfo(clazz), node); @@ -698,6 +723,12 @@ public final class DataDefaultSource implements DataSource, Function void update(final CompletionHandler handler, final T... values) { + update(values); + if (handler != null) handler.completed(null, values); + } + @Override public void update(final DataConnection conn, T... values) { if (values.length == 0) return; @@ -790,6 +821,12 @@ public final class DataDefaultSource implements DataSource, Function void updateColumn(final CompletionHandler handler, final Class clazz, final Serializable id, final String column, final Serializable value) { + updateColumn(clazz, id, column, value); + if (handler != null) handler.completed(null, id); + } + @Override public void updateColumn(DataConnection conn, Class clazz, Serializable id, String column, Serializable value) { updateColumn((Connection) conn.getConnection(), loadEntityInfo(clazz), id, column, value); @@ -842,6 +879,12 @@ public final class DataDefaultSource implements DataSource, Function void updateColumnIncrement(final CompletionHandler handler, final Class clazz, final Serializable id, final String column, long incvalue) { + updateColumnIncrement(clazz, id, column, incvalue); + if (handler != null) handler.completed(null, id); + } + @Override public void updateColumnIncrement(DataConnection conn, Class clazz, Serializable id, String column, long incvalue) { updateColumnIncrement((Connection) conn.getConnection(), loadEntityInfo(clazz), id, column, incvalue); @@ -896,6 +939,12 @@ public final class DataDefaultSource implements DataSource, Function void updateColumnAnd(final CompletionHandler handler, final Class clazz, final Serializable id, final String column, long incvalue) { + updateColumnAnd(clazz, id, column, incvalue); + if (handler != null) handler.completed(null, id); + } + @Override public void updateColumnAnd(DataConnection conn, Class clazz, Serializable id, String column, long andvalue) { updateColumnAnd((Connection) conn.getConnection(), loadEntityInfo(clazz), id, column, andvalue); @@ -950,6 +999,12 @@ public final class DataDefaultSource implements DataSource, Function void updateColumnOr(final CompletionHandler handler, final Class clazz, final Serializable id, final String column, long incvalue) { + updateColumnOr(clazz, id, column, incvalue); + if (handler != null) handler.completed(null, id); + } + @Override public void updateColumnOr(DataConnection conn, Class clazz, Serializable id, String column, long orvalue) { updateColumnOr((Connection) conn.getConnection(), loadEntityInfo(clazz), id, column, orvalue); @@ -1002,6 +1057,12 @@ public final class DataDefaultSource implements DataSource, Function void updateColumns(final CompletionHandler handler, final T value, final String... columns) { + updateColumns(value, columns); + if (handler != null) handler.completed(null, value); + } + @Override public void updateColumns(final DataConnection conn, final T value, final String... columns) { updateColumns((Connection) conn.getConnection(), loadEntityInfo((Class) value.getClass()), value, columns); @@ -1070,11 +1131,22 @@ public final class DataDefaultSource implements DataSource, Function handler, final Class entityClass, final FilterFunc func, final String column) { + Number rs = getNumberResult(entityClass, func, column); + if (handler != null) handler.completed(rs, column); + } + @Override public Number getNumberResult(final Class entityClass, final FilterFunc func, final String column, FilterBean bean) { return getNumberResult(entityClass, func, column, FilterNodeBean.createFilterNode(bean)); } + @Override + public void getNumberResult(final CompletionHandler handler, final Class entityClass, final FilterFunc func, final String column, final FilterBean bean) { + getNumberResult(handler, entityClass, func, column, FilterNodeBean.createFilterNode(bean)); + } + @Override public Number getNumberResult(final Class entityClass, final FilterFunc func, final String column, final FilterNode node) { final Connection conn = createReadSQLConnection(); @@ -1108,17 +1180,34 @@ public final class DataDefaultSource implements DataSource, Function handler, final Class entityClass, final FilterFunc func, final String column, final FilterNode node) { + Number rs = getNumberResult(entityClass, func, column, node); + if (handler != null) handler.completed(rs, node); + } + //-----------------------queryColumnMap----------------------------- @Override public Map queryColumnMap(final Class entityClass, final String keyColumn, FilterFunc func, final String funcColumn) { return queryColumnMap(entityClass, keyColumn, func, funcColumn, (FilterNode) null); } + @Override + public void queryColumnMap(final CompletionHandler, String> handler, final Class entityClass, final String keyColumn, final FilterFunc func, final String funcColumn) { + Map map = queryColumnMap(entityClass, keyColumn, func, funcColumn); + if (handler != null) handler.completed(map, funcColumn); + } + @Override public Map queryColumnMap(final Class entityClass, final String keyColumn, FilterFunc func, final String funcColumn, FilterBean bean) { return queryColumnMap(entityClass, keyColumn, func, funcColumn, FilterNodeBean.createFilterNode(bean)); } + @Override + public void queryColumnMap(final CompletionHandler, FilterNode> handler, final Class entityClass, final String keyColumn, final FilterFunc func, final String funcColumn, final FilterBean bean) { + queryColumnMap(handler, entityClass, keyColumn, func, funcColumn, FilterNodeBean.createFilterNode(bean)); + } + @Override public Map queryColumnMap(final Class entityClass, final String keyColumn, final FilterFunc func, final String funcColumn, FilterNode node) { final Connection conn = createReadSQLConnection(); @@ -1155,6 +1244,12 @@ public final class DataDefaultSource implements DataSource, Function void queryColumnMap(final CompletionHandler, FilterNode> handler, final Class entityClass, final String keyColumn, final FilterFunc func, final String funcColumn, final FilterNode node) { + Map map = queryColumnMap(entityClass, keyColumn, func, funcColumn, node); + if (handler != null) handler.completed(map, node); + } + //-----------------------find---------------------------- /** * 根据主键获取对象 @@ -1169,6 +1264,12 @@ public final class DataDefaultSource implements DataSource, Function void find(final CompletionHandler handler, final Class clazz, final Serializable pk) { + T rs = find(clazz, pk); + if (handler != null) handler.completed(rs, pk); + } + @Override public T find(Class clazz, final SelectColumn selects, Serializable pk) { final EntityInfo info = loadEntityInfo(clazz); @@ -1193,21 +1294,59 @@ public final class DataDefaultSource implements DataSource, Function void find(final CompletionHandler handler, final Class clazz, final SelectColumn selects, final Serializable pk) { + T rs = find(clazz, selects, pk); + if (handler != null) handler.completed(rs, pk); + } + @Override public T findByColumn(final Class clazz, final String column, final Serializable key) { return find(clazz, null, FilterNode.create(column, key)); } + @Override + public void findByColumn(final CompletionHandler handler, final Class clazz, final String column, final Serializable key) { + T rs = findByColumn(clazz, column, key); + if (handler != null) handler.completed(rs, key); + } + @Override public T find(final Class clazz, final FilterBean bean) { return find(clazz, null, FilterNodeBean.createFilterNode(bean)); } + @Override + public void find(final CompletionHandler handler, final Class clazz, final FilterBean bean) { + FilterNode node = FilterNodeBean.createFilterNode(bean); + T rs = find(clazz, node); + if (handler != null) handler.completed(rs, node); + } + @Override public T find(final Class clazz, final FilterNode node) { return find(clazz, null, node); } + @Override + public void find(final CompletionHandler handler, final Class clazz, final FilterNode node) { + T rs = find(clazz, node); + if (handler != null) handler.completed(rs, node); + } + + @Override + public T find(final Class clazz, final SelectColumn selects, final FilterBean bean) { + return find(clazz, selects, FilterNodeBean.createFilterNode(bean)); + } + + @Override + public void find(final CompletionHandler handler, final Class clazz, final SelectColumn selects, final FilterBean bean) { + FilterNode node = FilterNodeBean.createFilterNode(bean); + T rs = find(clazz, selects, node); + if (handler != null) handler.completed(rs, node); + } + + @Override public T find(final Class clazz, final SelectColumn selects, final FilterNode node) { final EntityInfo info = loadEntityInfo(clazz); final EntityCache cache = info.getCache(); @@ -1234,6 +1373,12 @@ public final class DataDefaultSource implements DataSource, Function void find(final CompletionHandler handler, final Class clazz, final SelectColumn selects, final FilterNode node) { + T rs = find(clazz, selects, node); + if (handler != null) handler.completed(rs, node); + } + @Override public boolean exists(Class clazz, Serializable pk) { final EntityInfo info = loadEntityInfo(clazz); @@ -1257,11 +1402,24 @@ public final class DataDefaultSource implements DataSource, Function void exists(final CompletionHandler handler, final Class clazz, final Serializable pk) { + boolean rs = exists(clazz, pk); + if (handler != null) handler.completed(rs, pk); + } + @Override public boolean exists(final Class clazz, final FilterBean bean) { return exists(clazz, FilterNodeBean.createFilterNode(bean)); } + @Override + public void exists(final CompletionHandler handler, final Class clazz, final FilterBean bean) { + FilterNode node = FilterNodeBean.createFilterNode(bean); + boolean rs = exists(clazz, node); + if (handler != null) handler.completed(rs, node); + } + @Override public boolean exists(final Class clazz, final FilterNode node) { final EntityInfo info = loadEntityInfo(clazz); @@ -1288,6 +1446,12 @@ public final class DataDefaultSource implements DataSource, Function void exists(final CompletionHandler handler, final Class clazz, final FilterNode node) { + boolean rs = exists(clazz, node); + if (handler != null) handler.completed(rs, node); + } + //-----------------------list set---------------------------- @Override public HashSet queryColumnSet(String selectedColumn, Class clazz, String column, Serializable key) { @@ -1295,31 +1459,114 @@ public final class DataDefaultSource implements DataSource, Function HashSet queryColumnSet(String selectedColumn, Class clazz, FilterBean bean) { + public void queryColumnSet(final CompletionHandler, Serializable> handler, final String selectedColumn, final Class clazz, final String column, final Serializable key) { + HashSet rs = queryColumnSet(selectedColumn, clazz, column, key); + if (handler != null) handler.completed(rs, key); + } + + @Override + public HashSet queryColumnSet(final String selectedColumn, final Class clazz, final FilterBean bean) { return new LinkedHashSet<>(queryColumnList(selectedColumn, clazz, bean)); } + @Override + public void queryColumnSet(final CompletionHandler, FilterNode> handler, final String selectedColumn, final Class clazz, final FilterBean bean) { + FilterNode node = FilterNodeBean.createFilterNode(bean); + HashSet rs = queryColumnSet(selectedColumn, clazz, node); + if (handler != null) handler.completed(rs, node); + } + @Override public HashSet queryColumnSet(String selectedColumn, Class clazz, FilterNode node) { return new LinkedHashSet<>(queryColumnList(selectedColumn, clazz, node)); } @Override - public List queryColumnList(String selectedColumn, Class clazz, String column, Serializable key) { + public void queryColumnSet(final CompletionHandler, FilterNode> handler, final String selectedColumn, final Class clazz, final FilterNode node) { + HashSet rs = queryColumnSet(selectedColumn, clazz, node); + if (handler != null) handler.completed(rs, node); + } + + @Override + public List queryColumnList(final String selectedColumn, final Class clazz, final String column, final Serializable key) { return queryColumnList(selectedColumn, clazz, FilterNode.create(column, key)); } @Override - public List queryColumnList(String selectedColumn, Class clazz, FilterBean bean) { + public void queryColumnList(final CompletionHandler, Serializable> handler, final String selectedColumn, final Class clazz, final String column, final Serializable key) { + List rs = queryColumnList(selectedColumn, clazz, column, key); + if (handler != null) handler.completed(rs, key); + } + + @Override + public List queryColumnList(final String selectedColumn, final Class clazz, final FilterBean bean) { return (List) queryColumnSheet(selectedColumn, clazz, null, bean).list(true); } @Override - public List queryColumnList(String selectedColumn, Class clazz, FilterNode node) { + public void queryColumnList(final CompletionHandler, FilterNode> handler, final String selectedColumn, final Class clazz, final FilterBean bean) { + final FilterNode node = FilterNodeBean.createFilterNode(bean); + List rs = queryColumnList(selectedColumn, clazz, node); + if (handler != null) handler.completed(rs, node); + } + + @Override + public List queryColumnList(final String selectedColumn, final Class clazz, final FilterNode node) { return (List) queryColumnSheet(selectedColumn, clazz, null, node).list(true); } - private Map formatMap(final Class clazz, Collection list) { + @Override + public void queryColumnList(final CompletionHandler, FilterNode> handler, final String selectedColumn, final Class clazz, final FilterNode node) { + List rs = queryColumnList(selectedColumn, clazz, node); + if (handler != null) handler.completed(rs, node); + } + + /** + * 根据指定参数查询对象某个字段的集合 + *

+ * @param + * @param + * @param selectedColumn + * @param clazz + * @param flipper + * @param bean + * @return + */ + @Override + public Sheet queryColumnSheet(final String selectedColumn, Class clazz, final Flipper flipper, final FilterBean bean) { + return queryColumnSheet(selectedColumn, clazz, flipper, FilterNodeBean.createFilterNode(bean)); + } + + @Override + public void queryColumnSheet(final CompletionHandler, FilterNode> handler, final String selectedColumn, final Class clazz, final Flipper flipper, final FilterBean bean) { + final FilterNode node = FilterNodeBean.createFilterNode(bean); + Sheet rs = queryColumnSheet(selectedColumn, clazz, flipper, node); + if (handler != null) handler.completed(rs, node); + } + + @Override + public Sheet queryColumnSheet(final String selectedColumn, final Class clazz, final Flipper flipper, final FilterNode node) { + Sheet sheet = querySheet(true, true, clazz, SelectColumn.createIncludes(selectedColumn), flipper, node); + final Sheet rs = new Sheet<>(); + if (sheet.isEmpty()) return rs; + rs.setTotal(sheet.getTotal()); + final EntityInfo info = loadEntityInfo(clazz); + final Attribute selected = (Attribute) info.getAttribute(selectedColumn); + final List list = new ArrayList<>(); + for (T t : sheet.getRows()) { + list.add(selected.get(t)); + } + rs.setRows(list); + return rs; + } + + @Override + public void queryColumnSheet(final CompletionHandler, FilterNode> handler, final String selectedColumn, final Class clazz, final Flipper flipper, final FilterNode node) { + Sheet rs = queryColumnSheet(selectedColumn, clazz, flipper, node); + if (handler != null) handler.completed(rs, node); + } + + private Map formatMap(final Class clazz, final Collection list) { Map map = new LinkedHashMap<>(); if (list == null || list.isEmpty()) return map; final Attribute attr = (Attribute) loadEntityInfo(clazz).getPrimary(); @@ -1339,10 +1586,16 @@ public final class DataDefaultSource implements DataSource, Function List queryList(Class clazz, String column, Serializable key) { + public List queryList(final Class clazz, final String column, final Serializable key) { return queryList(clazz, FilterNode.create(column, key)); } + @Override + public void queryList(final CompletionHandler, Serializable> handler, final Class clazz, final String column, final Serializable key) { + List rs = queryList(clazz, column, key); + if (handler != null) handler.completed(rs, key); + } + /** * 根据过滤对象FilterBean查询对象集合 * @@ -1356,11 +1609,24 @@ public final class DataDefaultSource implements DataSource, Function void queryList(final CompletionHandler, FilterNode> handler, final Class clazz, final FilterBean bean) { + FilterNode node = FilterNodeBean.createFilterNode(bean); + List rs = queryList(clazz, node); + if (handler != null) handler.completed(rs, node); + } + @Override public List queryList(final Class clazz, final FilterNode node) { return queryList(clazz, (SelectColumn) null, node); } + @Override + public void queryList(final CompletionHandler, FilterNode> handler, final Class clazz, final FilterNode node) { + List rs = queryList(clazz, node); + if (handler != null) handler.completed(rs, node); + } + /** * 根据过滤对象FilterBean查询对象集合, 对象只填充或排除SelectField指定的字段 * @@ -1375,19 +1641,33 @@ public final class DataDefaultSource implements DataSource, Function void queryList(final CompletionHandler, FilterNode> handler, final Class clazz, final SelectColumn selects, final FilterBean bean) { + FilterNode node = FilterNodeBean.createFilterNode(bean); + List rs = queryList(clazz, selects, node); + if (handler != null) handler.completed(rs, node); + } + @Override public List queryList(final Class clazz, final SelectColumn selects, final FilterNode node) { return queryList(clazz, selects, (Flipper) null, node); } @Override - public List queryList(Class clazz, final Flipper flipper, String column, Serializable key) { + public void queryList(final CompletionHandler, FilterNode> handler, final Class clazz, final SelectColumn selects, final FilterNode node) { + List rs = queryList(clazz, selects, node); + if (handler != null) handler.completed(rs, node); + } + + @Override + public List queryList(final Class clazz, final Flipper flipper, final String column, final Serializable key) { return queryList(clazz, flipper, FilterNode.create(column, key)); } @Override - public List queryList(final Class clazz, final Flipper flipper, final FilterNode node) { - return queryList(clazz, null, flipper, node); + public void queryList(final CompletionHandler, Serializable> handler, final Class clazz, final Flipper flipper, final String column, final Serializable key) { + List rs = queryList(clazz, flipper, column, key); + if (handler != null) handler.completed(rs, key); } @Override @@ -1396,8 +1676,21 @@ public final class DataDefaultSource implements DataSource, Function List queryList(final Class clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node) { - return querySheet(true, false, clazz, selects, flipper, node).list(true); + public void queryList(final CompletionHandler, FilterNode> handler, final Class clazz, final Flipper flipper, final FilterBean bean) { + FilterNode node = FilterNodeBean.createFilterNode(bean); + List rs = queryList(clazz, flipper, node); + if (handler != null) handler.completed(rs, node); + } + + @Override + public List queryList(final Class clazz, final Flipper flipper, final FilterNode node) { + return queryList(clazz, null, flipper, node); + } + + @Override + public void queryList(final CompletionHandler, FilterNode> handler, final Class clazz, final Flipper flipper, final FilterNode node) { + List rs = queryList(clazz, flipper, node); + if (handler != null) handler.completed(rs, node); } @Override @@ -1405,39 +1698,25 @@ public final class DataDefaultSource implements DataSource, Function void queryList(final CompletionHandler, FilterNode> handler, final Class clazz, final SelectColumn selects, final Flipper flipper, final FilterBean bean) { + FilterNode node = FilterNodeBean.createFilterNode(bean); + List rs = queryList(clazz, selects, flipper, node); + if (handler != null) handler.completed(rs, node); + } + + @Override + public List queryList(final Class clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node) { + return querySheet(true, false, clazz, selects, flipper, node).list(true); + } + + @Override + public void queryList(final CompletionHandler, FilterNode> handler, final Class clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node) { + List rs = queryList(clazz, selects, flipper, node); + if (handler != null) handler.completed(rs, node); + } + //-----------------------sheet---------------------------- - /** - * 根据指定参数查询对象某个字段的集合 - *

- * @param - * @param - * @param selectedColumn - * @param clazz - * @param flipper - * @param bean - * @return - */ - @Override - public Sheet queryColumnSheet(String selectedColumn, Class clazz, final Flipper flipper, final FilterBean bean) { - return queryColumnSheet(selectedColumn, clazz, flipper, FilterNodeBean.createFilterNode(bean)); - } - - @Override - public Sheet queryColumnSheet(String selectedColumn, Class clazz, final Flipper flipper, final FilterNode node) { - Sheet sheet = querySheet(true, true, clazz, SelectColumn.createIncludes(selectedColumn), flipper, node); - final Sheet rs = new Sheet<>(); - if (sheet.isEmpty()) return rs; - rs.setTotal(sheet.getTotal()); - final EntityInfo info = loadEntityInfo(clazz); - final Attribute selected = (Attribute) info.getAttribute(selectedColumn); - final List list = new ArrayList<>(); - for (T t : sheet.getRows()) { - list.add(selected.get(t)); - } - rs.setRows(list); - return rs; - } - /** * 根据过滤对象FilterBean和翻页对象Flipper查询一页的数据 * @@ -1448,15 +1727,28 @@ public final class DataDefaultSource implements DataSource, Function Sheet querySheet(Class clazz, final Flipper flipper, final FilterBean bean) { + public Sheet querySheet(final Class clazz, final Flipper flipper, final FilterBean bean) { return querySheet(clazz, null, flipper, bean); } @Override - public Sheet querySheet(Class clazz, final Flipper flipper, final FilterNode node) { + public void querySheet(final CompletionHandler, FilterNode> handler, final Class clazz, final Flipper flipper, final FilterBean bean) { + FilterNode node = FilterNodeBean.createFilterNode(bean); + Sheet rs = querySheet(clazz, flipper, node); + if (handler != null) handler.completed(rs, node); + } + + @Override + public Sheet querySheet(final Class clazz, final Flipper flipper, final FilterNode node) { return querySheet(clazz, null, flipper, node); } + @Override + public void querySheet(final CompletionHandler, FilterNode> handler, final Class clazz, final Flipper flipper, final FilterNode node) { + Sheet rs = querySheet(clazz, flipper, node); + if (handler != null) handler.completed(rs, node); + } + /** * 根据过滤对象FilterBean和翻页对象Flipper查询一页的数据, 对象只填充或排除SelectField指定的字段 * @@ -1468,16 +1760,29 @@ public final class DataDefaultSource implements DataSource, Function Sheet querySheet(Class clazz, final SelectColumn selects, final Flipper flipper, final FilterBean bean) { + public Sheet querySheet(final Class clazz, final SelectColumn selects, final Flipper flipper, final FilterBean bean) { return querySheet(true, true, clazz, selects, flipper, FilterNodeBean.createFilterNode(bean)); } @Override - public Sheet querySheet(Class clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node) { + public void querySheet(final CompletionHandler, FilterNode> handler, final Class clazz, final SelectColumn selects, final Flipper flipper, final FilterBean bean) { + FilterNode node = FilterNodeBean.createFilterNode(bean); + Sheet rs = querySheet(clazz, selects, flipper, node); + if (handler != null) handler.completed(rs, node); + } + + @Override + public Sheet querySheet(final Class clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node) { return querySheet(true, true, clazz, selects, flipper, node); } - private Sheet querySheet(boolean readcache, boolean needtotal, Class clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node) { + @Override + public void querySheet(final CompletionHandler, FilterNode> handler, final Class clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node) { + Sheet rs = querySheet(clazz, selects, flipper, node); + if (handler != null) handler.completed(rs, node); + } + + private Sheet querySheet(final boolean readcache, final boolean needtotal, final Class clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node) { final EntityInfo info = loadEntityInfo(clazz); final EntityCache cache = info.getCache(); if (readcache && cache != null) { diff --git a/src/org/redkale/source/DataSource.java b/src/org/redkale/source/DataSource.java index 35b7f30c5..067cc6fa2 100644 --- a/src/org/redkale/source/DataSource.java +++ b/src/org/redkale/source/DataSource.java @@ -6,6 +6,7 @@ package org.redkale.source; import java.io.*; +import java.nio.channels.*; import java.util.*; import org.redkale.util.*; @@ -42,6 +43,9 @@ public interface DataSource { public void insert(final DataConnection conn, final T... values); + //----------------------异步版--------------------------------- + public void insert(final CompletionHandler handler, final T... values); + //-------------------------delete-------------------------- /** * 删除对象, 必须是Entity对象 @@ -61,6 +65,13 @@ public interface DataSource { public void delete(final DataConnection conn, final Class clazz, final FilterNode node); + //----------------------异步版--------------------------------- + public void delete(final CompletionHandler handler, final T... values); + + public void delete(final CompletionHandler handler, final Class clazz, final Serializable... ids); + + public void delete(final CompletionHandler handler, final Class clazz, final FilterNode node); + //------------------------update--------------------------- /** * 更新对象, 必须是Entity对象 @@ -76,10 +87,6 @@ public interface DataSource { public void updateColumn(final DataConnection conn, final Class clazz, final Serializable id, final String column, final Serializable value); - public void updateColumns(final T value, final String... columns); - - public void updateColumns(final DataConnection conn, final T value, final String... columns); - public void updateColumnIncrement(final Class clazz, final Serializable id, final String column, long incvalue); public void updateColumnIncrement(final DataConnection conn, final Class clazz, final Serializable id, final String column, long incvalue); @@ -92,6 +99,23 @@ public interface DataSource { public void updateColumnOr(final DataConnection conn, final Class clazz, final Serializable id, final String column, long incvalue); + public void updateColumns(final T value, final String... columns); + + public void updateColumns(final DataConnection conn, final T value, final String... columns); + + //----------------------异步版--------------------------------- + public void update(final CompletionHandler handler, final T... values); + + public void updateColumn(final CompletionHandler handler, final Class clazz, final Serializable id, final String column, final Serializable value); + + public void updateColumnIncrement(final CompletionHandler handler, final Class clazz, final Serializable id, final String column, long incvalue); + + public void updateColumnAnd(final CompletionHandler handler, final Class clazz, final Serializable id, final String column, long incvalue); + + public void updateColumnOr(final CompletionHandler handler, final Class clazz, final Serializable id, final String column, long incvalue); + + public void updateColumns(final CompletionHandler handler, final T value, final String... columns); + //-----------------------getXXXXResult----------------------------- public Number getNumberResult(final Class entityClass, final FilterFunc func, final String column); @@ -105,6 +129,19 @@ public interface DataSource { public Map queryColumnMap(final Class entityClass, final String keyColumn, final FilterFunc func, final String funcColumn, final FilterNode node); + //----------------------异步版--------------------------------- + public void getNumberResult(final CompletionHandler handler, final Class entityClass, final FilterFunc func, final String column); + + public void getNumberResult(final CompletionHandler handler, final Class entityClass, final FilterFunc func, final String column, final FilterBean bean); + + public void getNumberResult(final CompletionHandler handler, final Class entityClass, final FilterFunc func, final String column, final FilterNode node); + + public void queryColumnMap(final CompletionHandler, String> handler, final Class entityClass, final String keyColumn, final FilterFunc func, final String funcColumn); + + public void queryColumnMap(final CompletionHandler, FilterNode> handler, final Class entityClass, final String keyColumn, final FilterFunc func, final String funcColumn, final FilterBean bean); + + public void queryColumnMap(final CompletionHandler, FilterNode> handler, final Class entityClass, final String keyColumn, final FilterFunc func, final String funcColumn, final FilterNode node); + //-----------------------find---------------------------- /** * 根据主键获取对象 @@ -120,15 +157,40 @@ public interface DataSource { public T findByColumn(final Class clazz, final String column, final Serializable key); + public T find(final Class clazz, final FilterBean bean); + public T find(final Class clazz, final FilterNode node); - public T find(final Class clazz, final FilterBean bean); + public T find(final Class clazz, final SelectColumn selects, final FilterBean bean); + + public T find(final Class clazz, final SelectColumn selects, final FilterNode node); public boolean exists(final Class clazz, final Serializable pk); + public boolean exists(final Class clazz, final FilterBean bean); + public boolean exists(final Class clazz, final FilterNode node); - public boolean exists(final Class clazz, final FilterBean bean); + //----------------------异步版--------------------------------- + public void find(final CompletionHandler handler, final Class clazz, final Serializable pk); + + public void find(final CompletionHandler handler, final Class clazz, final SelectColumn selects, final Serializable pk); + + public void findByColumn(final CompletionHandler handler, final Class clazz, final String column, final Serializable key); + + public void find(final CompletionHandler handler, final Class clazz, final FilterBean bean); + + public void find(final CompletionHandler handler, final Class clazz, final FilterNode node); + + public void find(final CompletionHandler handler, final Class clazz, final SelectColumn selects, final FilterBean bean); + + public void find(final CompletionHandler handler, final Class clazz, final SelectColumn selects, final FilterNode node); + + public void exists(final CompletionHandler handler, final Class clazz, final Serializable pk); + + public void exists(final CompletionHandler handler, final Class clazz, final FilterBean bean); + + public void exists(final CompletionHandler handler, final Class clazz, final FilterNode node); //-----------------------list set---------------------------- /** @@ -144,15 +206,28 @@ public interface DataSource { */ public HashSet queryColumnSet(final String selectedColumn, final Class clazz, final String column, final Serializable key); - public HashSet queryColumnSet(final String selectedColumn, final Class clazz, final FilterNode node); - public HashSet queryColumnSet(final String selectedColumn, final Class clazz, final FilterBean bean); + public HashSet queryColumnSet(final String selectedColumn, final Class clazz, final FilterNode node); + public List queryColumnList(final String selectedColumn, final Class clazz, final String column, final Serializable key); + public List queryColumnList(final String selectedColumn, final Class clazz, final FilterBean bean); + public List queryColumnList(final String selectedColumn, final Class clazz, final FilterNode node); - public List queryColumnList(final String selectedColumn, final Class clazz, final FilterBean bean); + //----------------------异步版--------------------------------- + public void queryColumnSet(final CompletionHandler, Serializable> handler, final String selectedColumn, final Class clazz, final String column, final Serializable key); + + public void queryColumnSet(final CompletionHandler, FilterNode> handler, final String selectedColumn, final Class clazz, final FilterBean bean); + + public void queryColumnSet(final CompletionHandler, FilterNode> handler, final String selectedColumn, final Class clazz, final FilterNode node); + + public void queryColumnList(final CompletionHandler, Serializable> handler, final String selectedColumn, final Class clazz, final String column, final Serializable key); + + public void queryColumnList(final CompletionHandler, FilterNode> handler, final String selectedColumn, final Class clazz, final FilterBean bean); + + public void queryColumnList(final CompletionHandler, FilterNode> handler, final String selectedColumn, final Class clazz, final FilterNode node); /** * 根据指定参数查询对象某个字段的集合 @@ -169,6 +244,11 @@ public interface DataSource { public Sheet queryColumnSheet(final String selectedColumn, final Class clazz, final Flipper flipper, final FilterNode node); + //----------------------异步版--------------------------------- + public void queryColumnSheet(final CompletionHandler, FilterNode> handler, final String selectedColumn, final Class clazz, final Flipper flipper, final FilterBean bean); + + public void queryColumnSheet(final CompletionHandler, FilterNode> handler, final String selectedColumn, final Class clazz, final Flipper flipper, final FilterNode node); + /** * 根据指定字段值查询对象集合 * @@ -180,24 +260,45 @@ public interface DataSource { */ public List queryList(final Class clazz, final String column, final Serializable key); - public List queryList(final Class clazz, final FilterNode node); - public List queryList(final Class clazz, final FilterBean bean); - public List queryList(final Class clazz, final SelectColumn selects, final FilterNode node); + public List queryList(final Class clazz, final FilterNode node); public List queryList(final Class clazz, final SelectColumn selects, final FilterBean bean); - public List queryList(final Class clazz, final Flipper flipper, final String column, final Serializable key); + public List queryList(final Class clazz, final SelectColumn selects, final FilterNode node); - public List queryList(final Class clazz, final Flipper flipper, final FilterNode node); + public List queryList(final Class clazz, final Flipper flipper, final String column, final Serializable key); public List queryList(final Class clazz, final Flipper flipper, final FilterBean bean); - public List queryList(final Class clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node); + public List queryList(final Class clazz, final Flipper flipper, final FilterNode node); public List queryList(final Class clazz, final SelectColumn selects, final Flipper flipper, final FilterBean bean); + public List queryList(final Class clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node); + + //----------------------异步版--------------------------------- + public void queryList(final CompletionHandler, Serializable> handler, final Class clazz, final String column, final Serializable key); + + public void queryList(final CompletionHandler, FilterNode> handler, final Class clazz, final FilterBean bean); + + public void queryList(final CompletionHandler, FilterNode> handler, final Class clazz, final FilterNode node); + + public void queryList(final CompletionHandler, FilterNode> handler, final Class clazz, final SelectColumn selects, final FilterBean bean); + + public void queryList(final CompletionHandler, FilterNode> handler, final Class clazz, final SelectColumn selects, final FilterNode node); + + public void queryList(final CompletionHandler, Serializable> handler, final Class clazz, final Flipper flipper, final String column, final Serializable key); + + public void queryList(final CompletionHandler, FilterNode> handler, final Class clazz, final Flipper flipper, final FilterBean bean); + + public void queryList(final CompletionHandler, FilterNode> handler, final Class clazz, final Flipper flipper, final FilterNode node); + + public void queryList(final CompletionHandler, FilterNode> handler, final Class clazz, final SelectColumn selects, final Flipper flipper, final FilterBean bean); + + public void queryList(final CompletionHandler, FilterNode> handler, final Class clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node); + //-----------------------sheet---------------------------- /** * 根据指定参数查询对象某个对象的集合页 @@ -216,4 +317,13 @@ public interface DataSource { public Sheet querySheet(final Class clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node); + //----------------------异步版--------------------------------- + public void querySheet(final CompletionHandler, FilterNode> handler, final Class clazz, final Flipper flipper, final FilterBean bean); + + public void querySheet(final CompletionHandler, FilterNode> handler, final Class clazz, final Flipper flipper, final FilterNode node); + + public void querySheet(final CompletionHandler, FilterNode> handler, final Class clazz, final SelectColumn selects, final Flipper flipper, final FilterBean bean); + + public void querySheet(final CompletionHandler, FilterNode> handler, final Class clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node); + }