This commit is contained in:
wentch
2015-12-23 10:33:59 +08:00
parent 644a2bc791
commit bd00591e79
16 changed files with 1096 additions and 233 deletions

View File

@@ -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<InetSocketAddress> 为 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);

View File

@@ -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<Transport> list = new ArrayList<>();

View File

@@ -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> T remote(final BsonConvert convert, Transport transport, final int index, final Object... params) {
Future<byte[]> 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<byte[]> 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<byte[]> remote(final BsonConvert convert, final Transport transport, final SncpAction action, final Object... params) {
private Future<byte[]> 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);
}
}
});
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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<Boolean, Serializable> handler, @DynAttachment final Serializable key) {
if (handler != null) handler.completed(exists(key), key);
}
@Override
public <T> 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 <T> void get(final CompletionHandler<T, Serializable> handler, @DynAttachment final Serializable key) {
if (handler != null) handler.completed(get(key), key);
}
@Override
@MultiRun
public <T> T getAndRefresh(Serializable key) {
@@ -183,6 +194,12 @@ public class CacheSourceService implements CacheSource, Service, AutoCloseable {
return (T) entry.getValue();
}
@Override
public <T> void getAndRefresh(final CompletionHandler<T, Serializable> 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 <T> void refresh(final CompletionHandler<Void, Serializable> handler, final Serializable key) {
refresh(key);
if (handler != null) handler.completed(null, key);
}
@Override
@MultiRun
public <T> 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 <T> void set(final CompletionHandler<Void, Serializable> 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 <T> void set(final CompletionHandler<Void, Serializable> 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<Void, Serializable> 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<Void, Serializable> handler, @DynAttachment final Serializable key) {
remove(key);
if (handler != null) handler.completed(null, key);
}
@Override
@MultiRun
public <V> void appendListItem(Serializable key, V value) {
@@ -254,6 +301,12 @@ public class CacheSourceService implements CacheSource, Service, AutoCloseable {
}
}
@Override
public <T> void appendListItem(final CompletionHandler<Void, Serializable> handler, @DynAttachment final Serializable key, final T value) {
appendListItem(key, value);
if (handler != null) handler.completed(null, key);
}
@Override
@MultiRun
public <V> void removeListItem(Serializable key, V value) {
@@ -263,6 +316,12 @@ public class CacheSourceService implements CacheSource, Service, AutoCloseable {
((List) entry.getValue()).remove(value);
}
@Override
public <T> void removeListItem(final CompletionHandler<Void, Serializable> handler, @DynAttachment final Serializable key, final T value) {
removeListItem(key, value);
if (handler != null) handler.completed(null, key);
}
@Override
@MultiRun
public <V> void appendSetItem(Serializable key, V value) {
@@ -279,6 +338,12 @@ public class CacheSourceService implements CacheSource, Service, AutoCloseable {
}
}
@Override
public <T> void appendSetItem(final CompletionHandler<Void, Serializable> handler, @DynAttachment final Serializable key, final T value) {
appendSetItem(key, value);
if (handler != null) handler.completed(null, key);
}
@Override
@MultiRun
public <V> void removeSetItem(Serializable key, V value) {
@@ -288,6 +353,12 @@ public class CacheSourceService implements CacheSource, Service, AutoCloseable {
((Set) entry.getValue()).remove(value);
}
@Override
public <T> void removeSetItem(final CompletionHandler<Void, Serializable> handler, @DynAttachment final Serializable key, final T value) {
removeSetItem(key, value);
if (handler != null) handler.completed(null, key);
}
public static final class CacheEntry<K extends Serializable, T> {
public static class CacheEntryCreator implements Creator<CacheEntry> {

View File

@@ -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 <T> void insert(@SncpCall(DataCallArrayAttribute.class) T... values) {
public <T> void insert(@DynCall(DataCallArrayAttribute.class) T... values) {
source.insert(values);
}
@Override
public <T> void insert(DataConnection conn, @SncpCall(DataCallArrayAttribute.class) T... values) {
public <T> void insert(final CompletionHandler<Void, T[]> handler, @DynAttachment @DynCall(DataCallArrayAttribute.class) final T... values) {
source.insert(values);
if (handler != null) handler.completed(null, values);
}
@Override
public <T> 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 <T> void delete(final CompletionHandler<Void, T[]> handler, @DynAttachment final T... values) {
source.delete(values);
if (handler != null) handler.completed(null, values);
}
@Override
public <T> void delete(DataConnection conn, T... values) {
source.delete(conn, values);
}
@Override
public <T> void delete(Class<T> clazz, Serializable... ids) {
public <T> void delete(final Class<T> clazz, final Serializable... ids) {
source.delete(clazz, ids);
}
@Override
public <T> void delete(DataConnection conn, Class<T> clazz, Serializable... ids) {
public <T> void delete(final CompletionHandler<Void, Serializable[]> handler, final Class<T> clazz, @DynAttachment final Serializable... ids) {
source.delete(clazz, ids);
if (handler != null) handler.completed(null, ids);
}
@Override
public <T> void delete(DataConnection conn, Class<T> clazz, final Serializable... ids) {
source.delete(conn, clazz, ids);
}
@Override
public <T> void delete(Class<T> clazz, FilterNode node) {
public <T> void delete(final Class<T> clazz, FilterNode node) {
source.delete(clazz, node);
}
@Override
public <T> void delete(final CompletionHandler<Void, FilterNode> handler, final Class<T> clazz, @DynAttachment final FilterNode node) {
source.delete(clazz, node);
if (handler != null) handler.completed(null, node);
}
@Override
public <T> void delete(DataConnection conn, Class<T> clazz, FilterNode node) {
source.delete(conn, clazz, node);
@@ -79,139 +104,277 @@ public class DataSourceService implements DataSource, Service, AutoCloseable {
source.update(values);
}
@Override
public <T> void update(final CompletionHandler<Void, T[]> handler, @DynAttachment final T... values) {
source.update(values);
if (handler != null) handler.completed(null, values);
}
@Override
public <T> void update(DataConnection conn, T... values) {
source.update(conn, values);
}
@Override
public <T> void updateColumn(Class<T> clazz, Serializable id, String column, Serializable value) {
public <T> void updateColumn(final Class<T> clazz, final Serializable id, final String column, final Serializable value) {
source.updateColumn(clazz, id, column, value);
}
@Override
public <T> void updateColumn(DataConnection conn, Class<T> clazz, Serializable id, String column, Serializable value) {
public <T> void updateColumn(final CompletionHandler<Void, Serializable> handler, final Class<T> 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 <T> void updateColumn(DataConnection conn, Class<T> clazz, final Serializable id, final String column, final Serializable value) {
source.updateColumn(conn, clazz, id, column, value);
}
@Override
public <T> void updateColumns(T value, String... columns) {
source.updateColumns(value, columns);
}
@Override
public <T> void updateColumns(DataConnection conn, T value, String... columns) {
source.updateColumns(conn, value, columns);
}
@Override
public <T> void updateColumnIncrement(Class<T> clazz, Serializable id, String column, long incvalue) {
public <T> void updateColumnIncrement(final Class<T> clazz, final Serializable id, final String column, long incvalue) {
source.updateColumnIncrement(clazz, id, column, incvalue);
}
@Override
public <T> void updateColumnIncrement(DataConnection conn, Class<T> clazz, Serializable id, String column, long incvalue) {
public <T> void updateColumnIncrement(final CompletionHandler<Void, Serializable> handler, final Class<T> 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 <T> void updateColumnIncrement(DataConnection conn, Class<T> clazz, final Serializable id, final String column, long incvalue) {
source.updateColumnIncrement(conn, clazz, id, column, incvalue);
}
@Override
public <T> void updateColumnAnd(Class<T> clazz, Serializable id, String column, long incvalue) {
public <T> void updateColumnAnd(final Class<T> clazz, final Serializable id, final String column, long incvalue) {
source.updateColumnAnd(clazz, id, column, incvalue);
}
@Override
public <T> void updateColumnAnd(DataConnection conn, Class<T> clazz, Serializable id, String column, long incvalue) {
public <T> void updateColumnAnd(final CompletionHandler<Void, Serializable> handler, final Class<T> 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 <T> void updateColumnAnd(DataConnection conn, Class<T> clazz, final Serializable id, final String column, long incvalue) {
source.updateColumnAnd(conn, clazz, id, column, incvalue);
}
@Override
public <T> void updateColumnOr(Class<T> clazz, Serializable id, String column, long incvalue) {
public <T> void updateColumnOr(final Class<T> clazz, final Serializable id, final String column, long incvalue) {
source.updateColumnOr(clazz, id, column, incvalue);
}
@Override
public <T> void updateColumnOr(DataConnection conn, Class<T> clazz, Serializable id, String column, long incvalue) {
public <T> void updateColumnOr(final CompletionHandler<Void, Serializable> handler, final Class<T> 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 <T> void updateColumnOr(DataConnection conn, Class<T> 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 <T> void updateColumns(T value, final String... columns) {
source.updateColumns(value, columns);
}
@Override
public <T> void updateColumns(final CompletionHandler<Void, T> handler, @DynAttachment final T value, final String... columns) {
source.updateColumns(value, columns);
if (handler != null) handler.completed(null, value);
}
@Override
public <T> 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<Number, String> 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<Number, FilterNode> 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 <T, K extends Serializable, N extends Number> Map<K, N> queryColumnMap(Class<T> entityClass, String keyColumn, FilterFunc func, String funcColumn) {
public void getNumberResult(final CompletionHandler<Number, FilterNode> 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 <T, K extends Serializable, N extends Number> Map<K, N> queryColumnMap(final Class<T> entityClass, final String keyColumn, FilterFunc func, final String funcColumn) {
return source.queryColumnMap(entityClass, keyColumn, func, funcColumn);
}
@Override
public final <T, K extends Serializable, N extends Number> Map<K, N> queryColumnMap(Class<T> entityClass, String keyColumn, FilterFunc func, String funcColumn, FilterBean bean) {
public <T, K extends Serializable, N extends Number> void queryColumnMap(final CompletionHandler<Map<K, N>, String> handler, final Class<T> entityClass, final String keyColumn, final FilterFunc func, @DynAttachment final String funcColumn) {
Map<K, N> map = source.queryColumnMap(entityClass, keyColumn, func, funcColumn);
if (handler != null) handler.completed(map, funcColumn);
}
@Override
public final <T, K extends Serializable, N extends Number> Map<K, N> queryColumnMap(final Class<T> entityClass, final String keyColumn, FilterFunc func, final String funcColumn, FilterBean bean) {
return queryColumnMap(entityClass, keyColumn, func, funcColumn, FilterNodeBean.createFilterNode(bean));
}
@Override
public <T, K extends Serializable, N extends Number> Map<K, N> queryColumnMap(Class<T> entityClass, String keyColumn, FilterFunc func, String funcColumn, FilterNode node) {
public final <T, K extends Serializable, N extends Number> void queryColumnMap(final CompletionHandler<Map<K, N>, FilterNode> handler, final Class<T> entityClass, final String keyColumn, final FilterFunc func, final String funcColumn, final FilterBean bean) {
queryColumnMap(handler, entityClass, keyColumn, func, funcColumn, FilterNodeBean.createFilterNode(bean));
}
@Override
public <T, K extends Serializable, N extends Number> Map<K, N> queryColumnMap(final Class<T> entityClass, final String keyColumn, FilterFunc func, final String funcColumn, FilterNode node) {
return source.queryColumnMap(entityClass, keyColumn, func, funcColumn, node);
}
@Override
public <T> T find(Class<T> clazz, Serializable pk) {
public <T, K extends Serializable, N extends Number> void queryColumnMap(final CompletionHandler<Map<K, N>, FilterNode> handler, final Class<T> entityClass, final String keyColumn, final FilterFunc func, final String funcColumn, @DynAttachment final FilterNode node) {
Map<K, N> map = source.queryColumnMap(entityClass, keyColumn, func, funcColumn, node);
if (handler != null) handler.completed(map, node);
}
@Override
public <T> T find(final Class<T> clazz, final Serializable pk) {
return source.find(clazz, pk);
}
@Override
public <T> T find(Class<T> clazz, SelectColumn selects, Serializable pk) {
public <T> void find(final CompletionHandler<T, Serializable> handler, final Class<T> clazz, @DynAttachment final Serializable pk) {
T rs = source.find(clazz, pk);
if (handler != null) handler.completed(rs, pk);
}
@Override
public <T> T find(final Class<T> clazz, SelectColumn selects, final Serializable pk) {
return source.find(clazz, selects, pk);
}
@Override
public <T> T findByColumn(Class<T> clazz, String column, Serializable key) {
public <T> void find(final CompletionHandler<T, Serializable> handler, final Class<T> 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> T findByColumn(final Class<T> clazz, final String column, final Serializable key) {
return source.findByColumn(clazz, column, key);
}
@Override
public <T> T find(Class<T> clazz, FilterNode node) {
return source.find(clazz, node);
public <T> void findByColumn(final CompletionHandler<T, Serializable> handler, final Class<T> 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> T find(Class<T> clazz, FilterBean bean) {
public final <T> T find(final Class<T> clazz, FilterBean bean) {
return find(clazz, FilterNodeBean.createFilterNode(bean));
}
@Override
public <T> boolean exists(Class<T> clazz, Serializable pk) {
public final <T> void find(final CompletionHandler<T, FilterNode> handler, final Class<T> clazz, final FilterBean bean) {
find(handler, clazz, FilterNodeBean.createFilterNode(bean));
}
@Override
public <T> T find(final Class<T> clazz, FilterNode node) {
return source.find(clazz, node);
}
@Override
public <T> void find(final CompletionHandler<T, FilterNode> handler, final Class<T> clazz, @DynAttachment final FilterNode node) {
T rs = source.find(clazz, node);
if (handler != null) handler.completed(rs, node);
}
@Override
public final <T> T find(final Class<T> clazz, final SelectColumn selects, FilterBean bean) {
return find(clazz, selects, FilterNodeBean.createFilterNode(bean));
}
@Override
public final <T> void find(final CompletionHandler<T, FilterNode> handler, final Class<T> clazz, final SelectColumn selects, final FilterBean bean) {
find(handler, clazz, selects, FilterNodeBean.createFilterNode(bean));
}
@Override
public <T> T find(final Class<T> clazz, final SelectColumn selects, final FilterNode node) {
return source.find(clazz, selects, node);
}
@Override
public <T> void find(final CompletionHandler<T, FilterNode> handler, final Class<T> clazz, final SelectColumn selects, @DynAttachment final FilterNode node) {
T rs = source.find(clazz, selects, node);
if (handler != null) handler.completed(rs, node);
}
@Override
public <T> boolean exists(final Class<T> clazz, final Serializable pk) {
return source.exists(clazz, pk);
}
@Override
public <T> boolean exists(Class<T> clazz, FilterNode node) {
return source.exists(clazz, node);
public <T> void exists(final CompletionHandler<Boolean, Serializable> handler, final Class<T> clazz, @DynAttachment final Serializable pk) {
boolean rs = source.exists(clazz, pk);
if (handler != null) handler.completed(rs, pk);
}
@Override
public final <T> boolean exists(Class<T> clazz, FilterBean bean) {
public final <T> boolean exists(final Class<T> clazz, FilterBean bean) {
return exists(clazz, FilterNodeBean.createFilterNode(bean));
}
@Override
public <T, V extends Serializable> HashSet<V> queryColumnSet(String selectedColumn, Class<T> clazz, String column, Serializable key) {
public final <T> void exists(final CompletionHandler<Boolean, FilterNode> handler, final Class<T> clazz, final FilterBean bean) {
exists(handler, clazz, FilterNodeBean.createFilterNode(bean));
}
@Override
public <T> boolean exists(final Class<T> clazz, FilterNode node) {
return source.exists(clazz, node);
}
@Override
public <T> void exists(final CompletionHandler<Boolean, FilterNode> handler, final Class<T> clazz, @DynAttachment final FilterNode node) {
boolean rs = source.exists(clazz, node);
if (handler != null) handler.completed(rs, node);
}
@Override
public <T, V extends Serializable> HashSet<V> queryColumnSet(String selectedColumn, Class<T> clazz, final String column, final Serializable key) {
return source.queryColumnSet(selectedColumn, clazz, column, key);
}
@Override
public <T, V extends Serializable> HashSet<V> queryColumnSet(String selectedColumn, Class<T> clazz, FilterNode node) {
return source.queryColumnSet(selectedColumn, clazz, node);
public <T, V extends Serializable> void queryColumnSet(final CompletionHandler<HashSet<V>, Serializable> handler, final String selectedColumn, final Class<T> clazz, final String column, @DynAttachment final Serializable key) {
HashSet<V> 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 <T, V extends Serializable> List<V> queryColumnList(String selectedColumn, Class<T> clazz, String column, Serializable key) {
public final <T, V extends Serializable> void queryColumnSet(final CompletionHandler<HashSet<V>, FilterNode> handler, final String selectedColumn, final Class<T> clazz, final FilterBean bean) {
queryColumnSet(handler, selectedColumn, clazz, FilterNodeBean.createFilterNode(bean));
}
@Override
public <T, V extends Serializable> HashSet<V> queryColumnSet(String selectedColumn, Class<T> clazz, FilterNode node) {
return source.queryColumnSet(selectedColumn, clazz, node);
}
@Override
public <T, V extends Serializable> void queryColumnSet(final CompletionHandler<HashSet<V>, FilterNode> handler, final String selectedColumn, final Class<T> clazz, @DynAttachment final FilterNode node) {
HashSet<V> rs = source.queryColumnSet(selectedColumn, clazz, node);
if (handler != null) handler.completed(rs, node);
}
@Override
public <T, V extends Serializable> List<V> queryColumnList(String selectedColumn, Class<T> clazz, final String column, final Serializable key) {
return source.queryColumnList(selectedColumn, clazz, column, key);
}
@Override
public <T, V extends Serializable> List<V> queryColumnList(String selectedColumn, Class<T> clazz, FilterNode node) {
return source.queryColumnList(selectedColumn, clazz, node);
public <T, V extends Serializable> void queryColumnList(final CompletionHandler<List<V>, Serializable> handler, final String selectedColumn, final Class<T> clazz, final String column, @DynAttachment final Serializable key) {
List<V> 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 <T> List<T> queryList(Class<T> clazz, String column, Serializable key) {
return source.queryList(clazz, column, key);
public final <T, V extends Serializable> void queryColumnList(final CompletionHandler<List<V>, FilterNode> handler, final String selectedColumn, final Class<T> clazz, @DynAttachment final FilterBean bean) {
queryColumnList(handler, selectedColumn, clazz, FilterNodeBean.createFilterNode(bean));
}
@Override
public <T> List<T> queryList(Class<T> clazz, FilterNode node) {
return source.queryList(clazz, node);
public <T, V extends Serializable> List<V> queryColumnList(String selectedColumn, Class<T> clazz, FilterNode node) {
return source.queryColumnList(selectedColumn, clazz, node);
}
@Override
public final <T> List<T> queryList(Class<T> clazz, FilterBean bean) {
return queryList(clazz, FilterNodeBean.createFilterNode(bean));
}
@Override
public <T> List<T> queryList(Class<T> clazz, SelectColumn selects, FilterNode node) {
return source.queryList(clazz, selects, node);
}
@Override
public final <T> List<T> queryList(Class<T> clazz, SelectColumn selects, FilterBean bean) {
return queryList(clazz, FilterNodeBean.createFilterNode(bean));
}
@Override
public <T> List<T> queryList(Class<T> clazz, Flipper flipper, String column, Serializable key) {
return source.queryList(clazz, flipper, column, key);
}
@Override
public <T> List<T> queryList(Class<T> clazz, Flipper flipper, FilterNode node) {
return source.queryList(clazz, flipper, node);
}
@Override
public final <T> List<T> queryList(Class<T> clazz, Flipper flipper, FilterBean bean) {
return queryList(clazz, flipper, FilterNodeBean.createFilterNode(bean));
}
@Override
public <T> List<T> queryList(Class<T> clazz, SelectColumn selects, Flipper flipper, FilterNode node) {
return source.queryList(clazz, selects, flipper, node);
}
@Override
public final <T> List<T> queryList(Class<T> clazz, SelectColumn selects, Flipper flipper, FilterBean bean) {
return queryList(clazz, selects, flipper, FilterNodeBean.createFilterNode(bean));
public <T, V extends Serializable> void queryColumnList(final CompletionHandler<List<V>, FilterNode> handler, final String selectedColumn, final Class<T> clazz, @DynAttachment final FilterNode node) {
List<V> 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 <T, V extends Serializable> void queryColumnSheet(final CompletionHandler<Sheet<V>, FilterNode> handler, final String selectedColumn, final Class<T> clazz, final Flipper flipper, final FilterBean bean) {
queryColumnSheet(handler, selectedColumn, clazz, flipper, FilterNodeBean.createFilterNode(bean));
}
@Override
public <T, V extends Serializable> Sheet<V> queryColumnSheet(String selectedColumn, Class<T> clazz, Flipper flipper, FilterNode node) {
return source.queryColumnSheet(selectedColumn, clazz, flipper, node);
}
@Override
public final <T> Sheet<T> querySheet(Class<T> clazz, Flipper flipper, FilterBean bean) {
public <T, V extends Serializable> void queryColumnSheet(final CompletionHandler<Sheet<V>, FilterNode> handler, final String selectedColumn, final Class<T> clazz, final Flipper flipper, @DynAttachment final FilterNode node) {
Sheet<V> rs = source.queryColumnSheet(selectedColumn, clazz, flipper, node);
if (handler != null) handler.completed(rs, node);
}
@Override
public <T> List<T> queryList(final Class<T> clazz, final String column, final Serializable key) {
return source.queryList(clazz, column, key);
}
@Override
public <T> void queryList(final CompletionHandler<List<T>, Serializable> handler, final Class<T> clazz, final String column, @DynAttachment final Serializable key) {
List<T> rs = source.queryList(clazz, column, key);
if (handler != null) handler.completed(rs, key);
}
@Override
public final <T> List<T> queryList(final Class<T> clazz, final FilterBean bean) {
return queryList(clazz, FilterNodeBean.createFilterNode(bean));
}
@Override
public final <T> void queryList(final CompletionHandler<List<T>, FilterNode> handler, final Class<T> clazz, final FilterBean bean) {
queryList(handler, clazz, FilterNodeBean.createFilterNode(bean));
}
@Override
public <T> List<T> queryList(final Class<T> clazz, final FilterNode node) {
return source.queryList(clazz, node);
}
@Override
public <T> void queryList(final CompletionHandler<List<T>, FilterNode> handler, final Class<T> clazz, @DynAttachment final FilterNode node) {
List<T> rs = source.queryList(clazz, node);
if (handler != null) handler.completed(rs, node);
}
@Override
public final <T> List<T> queryList(final Class<T> clazz, final SelectColumn selects, final FilterBean bean) {
return queryList(clazz, FilterNodeBean.createFilterNode(bean));
}
@Override
public final <T> void queryList(final CompletionHandler<List<T>, FilterNode> handler, final Class<T> clazz, final SelectColumn selects, final FilterBean bean) {
queryList(handler, clazz, selects, FilterNodeBean.createFilterNode(bean));
}
@Override
public <T> List<T> queryList(final Class<T> clazz, final SelectColumn selects, final FilterNode node) {
return source.queryList(clazz, selects, node);
}
@Override
public <T> void queryList(final CompletionHandler<List<T>, FilterNode> handler, final Class<T> clazz, final SelectColumn selects, @DynAttachment final FilterNode node) {
List<T> rs = source.queryList(clazz, selects, node);
if (handler != null) handler.completed(rs, node);
}
@Override
public <T> List<T> queryList(final Class<T> clazz, final Flipper flipper, final String column, final Serializable key) {
return source.queryList(clazz, flipper, column, key);
}
@Override
public <T> void queryList(final CompletionHandler<List<T>, Serializable> handler, final Class<T> clazz, final Flipper flipper, final String column, @DynAttachment final Serializable key) {
List<T> rs = source.queryList(clazz, flipper, column, key);
if (handler != null) handler.completed(rs, key);
}
@Override
public final <T> List<T> queryList(final Class<T> clazz, final Flipper flipper, final FilterBean bean) {
return queryList(clazz, flipper, FilterNodeBean.createFilterNode(bean));
}
@Override
public final <T> void queryList(final CompletionHandler<List<T>, FilterNode> handler, final Class<T> clazz, final Flipper flipper, final FilterBean bean) {
queryList(handler, clazz, flipper, FilterNodeBean.createFilterNode(bean));
}
@Override
public <T> List<T> queryList(final Class<T> clazz, final Flipper flipper, final FilterNode node) {
return source.queryList(clazz, flipper, node);
}
@Override
public <T> void queryList(final CompletionHandler<List<T>, FilterNode> handler, final Class<T> clazz, final Flipper flipper, @DynAttachment final FilterNode node) {
List<T> rs = source.queryList(clazz, flipper, node);
if (handler != null) handler.completed(rs, node);
}
@Override
public final <T> List<T> queryList(final Class<T> clazz, final SelectColumn selects, final Flipper flipper, final FilterBean bean) {
return queryList(clazz, selects, flipper, FilterNodeBean.createFilterNode(bean));
}
@Override
public final <T> void queryList(final CompletionHandler<List<T>, FilterNode> handler, final Class<T> clazz, SelectColumn selects, final Flipper flipper, final FilterBean bean) {
queryList(handler, clazz, selects, flipper, FilterNodeBean.createFilterNode(bean));
}
@Override
public <T> List<T> queryList(final Class<T> clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node) {
return source.queryList(clazz, selects, flipper, node);
}
@Override
public <T> void queryList(final CompletionHandler<List<T>, FilterNode> handler, final Class<T> clazz, SelectColumn selects, final Flipper flipper, @DynAttachment final FilterNode node) {
List<T> rs = source.queryList(clazz, selects, flipper, node);
if (handler != null) handler.completed(rs, node);
}
@Override
public final <T> Sheet<T> querySheet(final Class<T> clazz, final Flipper flipper, final FilterBean bean) {
return querySheet(clazz, flipper, FilterNodeBean.createFilterNode(bean));
}
@Override
public <T> Sheet<T> querySheet(Class<T> clazz, Flipper flipper, FilterNode node) {
public final <T> void querySheet(final CompletionHandler<Sheet<T>, FilterNode> handler, final Class<T> clazz, final Flipper flipper, final FilterBean bean) {
querySheet(handler, clazz, flipper, FilterNodeBean.createFilterNode(bean));
}
@Override
public <T> Sheet<T> querySheet(final Class<T> clazz, final Flipper flipper, final FilterNode node) {
return source.querySheet(clazz, flipper, node);
}
@Override
public final <T> Sheet<T> querySheet(Class<T> clazz, SelectColumn selects, Flipper flipper, FilterBean bean) {
public <T> void querySheet(final CompletionHandler<Sheet<T>, FilterNode> handler, final Class<T> clazz, final Flipper flipper, @DynAttachment final FilterNode node) {
Sheet<T> rs = source.querySheet(clazz, flipper, node);
if (handler != null) handler.completed(rs, node);
}
@Override
public final <T> Sheet<T> querySheet(final Class<T> clazz, final SelectColumn selects, final Flipper flipper, final FilterBean bean) {
return querySheet(clazz, selects, flipper, FilterNodeBean.createFilterNode(bean));
}
@Override
public <T> Sheet<T> querySheet(Class<T> clazz, SelectColumn selects, Flipper flipper, FilterNode node) {
public final <T> void querySheet(final CompletionHandler<Sheet<T>, FilterNode> handler, final Class<T> clazz, final SelectColumn selects, final Flipper flipper, final FilterBean bean) {
querySheet(handler, clazz, selects, flipper, FilterNodeBean.createFilterNode(bean));
}
@Override
public <T> Sheet<T> querySheet(final Class<T> clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node) {
return source.querySheet(clazz, selects, flipper, node);
}
@Override
public <T> void querySheet(final CompletionHandler<Sheet<T>, FilterNode> handler, final Class<T> clazz, final SelectColumn selects, final Flipper flipper, @DynAttachment final FilterNode node) {
Sheet<T> 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);

View File

@@ -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();
}

View File

@@ -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<? extends Attribute> value();
}

View File

@@ -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 {
}

View File

@@ -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 {
}

View File

@@ -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 {
}

View File

@@ -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<String> engineids = localNodes.get(groupid);
if (engineids == null || engineids.isEmpty()) return RETCODE_GROUP_EMPTY;
int code = RETCODE_GROUP_EMPTY;

View File

@@ -6,6 +6,7 @@
package org.redkale.source;
import java.io.*;
import java.nio.channels.*;
/**
*
@@ -30,16 +31,44 @@ public interface CacheSource {
public <T> 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 <V> void appendListItem(final Serializable key, final V value);
public <T> void appendListItem(final Serializable key, final T value);
public <V> void removeListItem(final Serializable key, final V value);
public <T> void removeListItem(final Serializable key, final T value);
public <V> void appendSetItem(final Serializable key, final V value);
public <T> void appendSetItem(final Serializable key, final T value);
public <V> void removeSetItem(final Serializable key, final V value);
public <T> void removeSetItem(final Serializable key, final T value);
//----------------------异步版---------------------------------
public void exists(final CompletionHandler<Boolean, Serializable> handler, final Serializable key);
public <T> void get(final CompletionHandler<T, Serializable> handler, final Serializable key);
public <T> void getAndRefresh(final CompletionHandler<T, Serializable> handler, final Serializable key);
public <T> void refresh(final CompletionHandler<Void, Serializable> handler, final Serializable key);
public <T> void set(final CompletionHandler<Void, Serializable> handler, final Serializable key, final T value);
public <T> void set(final CompletionHandler<Void, Serializable> handler, final int expireSeconds, final Serializable key, final T value);
public void setExpireSeconds(final CompletionHandler<Void, Serializable> handler, final Serializable key, final int expireSeconds);
public void remove(final CompletionHandler<Void, Serializable> handler, final Serializable key);
public <T> void appendListItem(final CompletionHandler<Void, Serializable> handler, final Serializable key, final T value);
public <T> void removeListItem(final CompletionHandler<Void, Serializable> handler, final Serializable key, final T value);
public <T> void appendSetItem(final CompletionHandler<Void, Serializable> handler, final Serializable key, final T value);
public <T> void removeSetItem(final CompletionHandler<Void, Serializable> handler, final Serializable key, final T value);
default void isOpen(final CompletionHandler<Boolean, Void> handler) {
if (handler != null) handler.completed(Boolean.TRUE, null);
}
}

View File

@@ -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<Class, Enti
}
}
@Override
public <T> void insert(final CompletionHandler<Void, T[]> 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<Class, Enti
}
}
@Override
public <T> void delete(final CompletionHandler<Void, T[]> handler, final T... values) {
delete(values);
if (handler != null) handler.completed(null, values);
}
@Override
public <T> void delete(final DataConnection conn, T... values) {
if (values.length == 0) return;
@@ -594,6 +607,12 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
}
}
@Override
public <T> void delete(final CompletionHandler<Void, Serializable[]> handler, final Class<T> clazz, final Serializable... ids) {
delete(clazz, ids);
if (handler != null) handler.completed(null, ids);
}
@Override
public <T> void delete(final DataConnection conn, Class<T> clazz, Serializable... ids) {
delete((Connection) conn.getConnection(), loadEntityInfo(clazz), ids);
@@ -637,6 +656,12 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
}
}
@Override
public <T> void delete(final CompletionHandler<Void, FilterNode> handler, final Class<T> clazz, final FilterNode node) {
delete(clazz, node);
if (handler != null) handler.completed(null, node);
}
@Override
public <T> void delete(final DataConnection conn, Class<T> clazz, FilterNode node) {
delete((Connection) conn.getConnection(), loadEntityInfo(clazz), node);
@@ -698,6 +723,12 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
}
}
@Override
public <T> void update(final CompletionHandler<Void, T[]> handler, final T... values) {
update(values);
if (handler != null) handler.completed(null, values);
}
@Override
public <T> void update(final DataConnection conn, T... values) {
if (values.length == 0) return;
@@ -790,6 +821,12 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
}
}
@Override
public <T> void updateColumn(final CompletionHandler<Void, Serializable> handler, final Class<T> clazz, final Serializable id, final String column, final Serializable value) {
updateColumn(clazz, id, column, value);
if (handler != null) handler.completed(null, id);
}
@Override
public <T> void updateColumn(DataConnection conn, Class<T> 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<Class, Enti
}
}
@Override
public <T> void updateColumnIncrement(final CompletionHandler<Void, Serializable> handler, final Class<T> clazz, final Serializable id, final String column, long incvalue) {
updateColumnIncrement(clazz, id, column, incvalue);
if (handler != null) handler.completed(null, id);
}
@Override
public <T> void updateColumnIncrement(DataConnection conn, Class<T> 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<Class, Enti
}
}
@Override
public <T> void updateColumnAnd(final CompletionHandler<Void, Serializable> handler, final Class<T> clazz, final Serializable id, final String column, long incvalue) {
updateColumnAnd(clazz, id, column, incvalue);
if (handler != null) handler.completed(null, id);
}
@Override
public <T> void updateColumnAnd(DataConnection conn, Class<T> 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<Class, Enti
}
}
@Override
public <T> void updateColumnOr(final CompletionHandler<Void, Serializable> handler, final Class<T> clazz, final Serializable id, final String column, long incvalue) {
updateColumnOr(clazz, id, column, incvalue);
if (handler != null) handler.completed(null, id);
}
@Override
public <T> void updateColumnOr(DataConnection conn, Class<T> 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<Class, Enti
}
}
@Override
public <T> void updateColumns(final CompletionHandler<Void, T> handler, final T value, final String... columns) {
updateColumns(value, columns);
if (handler != null) handler.completed(null, value);
}
@Override
public <T> void updateColumns(final DataConnection conn, final T value, final String... columns) {
updateColumns((Connection) conn.getConnection(), loadEntityInfo((Class<T>) value.getClass()), value, columns);
@@ -1070,11 +1131,22 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
return getNumberResult(entityClass, func, column, (FilterNode) null);
}
@Override
public void getNumberResult(final CompletionHandler<Number, String> 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<Number, FilterNode> 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<Class, Enti
}
}
@Override
public void getNumberResult(final CompletionHandler<Number, FilterNode> 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 <T, K extends Serializable, N extends Number> Map<K, N> queryColumnMap(final Class<T> entityClass, final String keyColumn, FilterFunc func, final String funcColumn) {
return queryColumnMap(entityClass, keyColumn, func, funcColumn, (FilterNode) null);
}
@Override
public <T, K extends Serializable, N extends Number> void queryColumnMap(final CompletionHandler<Map<K, N>, String> handler, final Class<T> entityClass, final String keyColumn, final FilterFunc func, final String funcColumn) {
Map<K, N> map = queryColumnMap(entityClass, keyColumn, func, funcColumn);
if (handler != null) handler.completed(map, funcColumn);
}
@Override
public <T, K extends Serializable, N extends Number> Map<K, N> queryColumnMap(final Class<T> entityClass, final String keyColumn, FilterFunc func, final String funcColumn, FilterBean bean) {
return queryColumnMap(entityClass, keyColumn, func, funcColumn, FilterNodeBean.createFilterNode(bean));
}
@Override
public <T, K extends Serializable, N extends Number> void queryColumnMap(final CompletionHandler<Map<K, N>, FilterNode> handler, final Class<T> entityClass, final String keyColumn, final FilterFunc func, final String funcColumn, final FilterBean bean) {
queryColumnMap(handler, entityClass, keyColumn, func, funcColumn, FilterNodeBean.createFilterNode(bean));
}
@Override
public <T, K extends Serializable, N extends Number> Map<K, N> queryColumnMap(final Class<T> 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<Class, Enti
}
}
@Override
public <T, K extends Serializable, N extends Number> void queryColumnMap(final CompletionHandler<Map<K, N>, FilterNode> handler, final Class<T> entityClass, final String keyColumn, final FilterFunc func, final String funcColumn, final FilterNode node) {
Map<K, N> 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<Class, Enti
return find(clazz, (SelectColumn) null, pk);
}
@Override
public <T> void find(final CompletionHandler<T, Serializable> handler, final Class<T> clazz, final Serializable pk) {
T rs = find(clazz, pk);
if (handler != null) handler.completed(rs, pk);
}
@Override
public <T> T find(Class<T> clazz, final SelectColumn selects, Serializable pk) {
final EntityInfo<T> info = loadEntityInfo(clazz);
@@ -1193,21 +1294,59 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
}
}
@Override
public <T> void find(final CompletionHandler<T, Serializable> handler, final Class<T> clazz, final SelectColumn selects, final Serializable pk) {
T rs = find(clazz, selects, pk);
if (handler != null) handler.completed(rs, pk);
}
@Override
public <T> T findByColumn(final Class<T> clazz, final String column, final Serializable key) {
return find(clazz, null, FilterNode.create(column, key));
}
@Override
public <T> void findByColumn(final CompletionHandler<T, Serializable> handler, final Class<T> clazz, final String column, final Serializable key) {
T rs = findByColumn(clazz, column, key);
if (handler != null) handler.completed(rs, key);
}
@Override
public <T> T find(final Class<T> clazz, final FilterBean bean) {
return find(clazz, null, FilterNodeBean.createFilterNode(bean));
}
@Override
public <T> void find(final CompletionHandler<T, FilterNode> handler, final Class<T> clazz, final FilterBean bean) {
FilterNode node = FilterNodeBean.createFilterNode(bean);
T rs = find(clazz, node);
if (handler != null) handler.completed(rs, node);
}
@Override
public <T> T find(final Class<T> clazz, final FilterNode node) {
return find(clazz, null, node);
}
@Override
public <T> void find(final CompletionHandler<T, FilterNode> handler, final Class<T> clazz, final FilterNode node) {
T rs = find(clazz, node);
if (handler != null) handler.completed(rs, node);
}
@Override
public <T> T find(final Class<T> clazz, final SelectColumn selects, final FilterBean bean) {
return find(clazz, selects, FilterNodeBean.createFilterNode(bean));
}
@Override
public <T> void find(final CompletionHandler<T, FilterNode> handler, final Class<T> 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> T find(final Class<T> clazz, final SelectColumn selects, final FilterNode node) {
final EntityInfo<T> info = loadEntityInfo(clazz);
final EntityCache<T> cache = info.getCache();
@@ -1234,6 +1373,12 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
}
}
@Override
public <T> void find(final CompletionHandler<T, FilterNode> handler, final Class<T> clazz, final SelectColumn selects, final FilterNode node) {
T rs = find(clazz, selects, node);
if (handler != null) handler.completed(rs, node);
}
@Override
public <T> boolean exists(Class<T> clazz, Serializable pk) {
final EntityInfo<T> info = loadEntityInfo(clazz);
@@ -1257,11 +1402,24 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
}
}
@Override
public <T> void exists(final CompletionHandler<Boolean, Serializable> handler, final Class<T> clazz, final Serializable pk) {
boolean rs = exists(clazz, pk);
if (handler != null) handler.completed(rs, pk);
}
@Override
public <T> boolean exists(final Class<T> clazz, final FilterBean bean) {
return exists(clazz, FilterNodeBean.createFilterNode(bean));
}
@Override
public <T> void exists(final CompletionHandler<Boolean, FilterNode> handler, final Class<T> clazz, final FilterBean bean) {
FilterNode node = FilterNodeBean.createFilterNode(bean);
boolean rs = exists(clazz, node);
if (handler != null) handler.completed(rs, node);
}
@Override
public <T> boolean exists(final Class<T> clazz, final FilterNode node) {
final EntityInfo<T> info = loadEntityInfo(clazz);
@@ -1288,6 +1446,12 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
}
}
@Override
public <T> void exists(final CompletionHandler<Boolean, FilterNode> handler, final Class<T> clazz, final FilterNode node) {
boolean rs = exists(clazz, node);
if (handler != null) handler.completed(rs, node);
}
//-----------------------list set----------------------------
@Override
public <T, V extends Serializable> HashSet<V> queryColumnSet(String selectedColumn, Class<T> clazz, String column, Serializable key) {
@@ -1295,31 +1459,114 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
}
@Override
public <T, V extends Serializable> HashSet<V> queryColumnSet(String selectedColumn, Class<T> clazz, FilterBean bean) {
public <T, V extends Serializable> void queryColumnSet(final CompletionHandler<HashSet<V>, Serializable> handler, final String selectedColumn, final Class<T> clazz, final String column, final Serializable key) {
HashSet<V> rs = queryColumnSet(selectedColumn, clazz, column, key);
if (handler != null) handler.completed(rs, key);
}
@Override
public <T, V extends Serializable> HashSet<V> queryColumnSet(final String selectedColumn, final Class<T> clazz, final FilterBean bean) {
return new LinkedHashSet<>(queryColumnList(selectedColumn, clazz, bean));
}
@Override
public <T, V extends Serializable> void queryColumnSet(final CompletionHandler<HashSet<V>, FilterNode> handler, final String selectedColumn, final Class<T> clazz, final FilterBean bean) {
FilterNode node = FilterNodeBean.createFilterNode(bean);
HashSet<V> rs = queryColumnSet(selectedColumn, clazz, node);
if (handler != null) handler.completed(rs, node);
}
@Override
public <T, V extends Serializable> HashSet<V> queryColumnSet(String selectedColumn, Class<T> clazz, FilterNode node) {
return new LinkedHashSet<>(queryColumnList(selectedColumn, clazz, node));
}
@Override
public <T, V extends Serializable> List<V> queryColumnList(String selectedColumn, Class<T> clazz, String column, Serializable key) {
public <T, V extends Serializable> void queryColumnSet(final CompletionHandler<HashSet<V>, FilterNode> handler, final String selectedColumn, final Class<T> clazz, final FilterNode node) {
HashSet<V> rs = queryColumnSet(selectedColumn, clazz, node);
if (handler != null) handler.completed(rs, node);
}
@Override
public <T, V extends Serializable> List<V> queryColumnList(final String selectedColumn, final Class<T> clazz, final String column, final Serializable key) {
return queryColumnList(selectedColumn, clazz, FilterNode.create(column, key));
}
@Override
public <T, V extends Serializable> List<V> queryColumnList(String selectedColumn, Class<T> clazz, FilterBean bean) {
public <T, V extends Serializable> void queryColumnList(final CompletionHandler<List<V>, Serializable> handler, final String selectedColumn, final Class<T> clazz, final String column, final Serializable key) {
List<V> rs = queryColumnList(selectedColumn, clazz, column, key);
if (handler != null) handler.completed(rs, key);
}
@Override
public <T, V extends Serializable> List<V> queryColumnList(final String selectedColumn, final Class<T> clazz, final FilterBean bean) {
return (List<V>) queryColumnSheet(selectedColumn, clazz, null, bean).list(true);
}
@Override
public <T, V extends Serializable> List<V> queryColumnList(String selectedColumn, Class<T> clazz, FilterNode node) {
public <T, V extends Serializable> void queryColumnList(final CompletionHandler<List<V>, FilterNode> handler, final String selectedColumn, final Class<T> clazz, final FilterBean bean) {
final FilterNode node = FilterNodeBean.createFilterNode(bean);
List<V> rs = queryColumnList(selectedColumn, clazz, node);
if (handler != null) handler.completed(rs, node);
}
@Override
public <T, V extends Serializable> List<V> queryColumnList(final String selectedColumn, final Class<T> clazz, final FilterNode node) {
return (List<V>) queryColumnSheet(selectedColumn, clazz, null, node).list(true);
}
private <K extends Serializable, T> Map<K, T> formatMap(final Class<T> clazz, Collection<T> list) {
@Override
public <T, V extends Serializable> void queryColumnList(final CompletionHandler<List<V>, FilterNode> handler, final String selectedColumn, final Class<T> clazz, final FilterNode node) {
List<V> rs = queryColumnList(selectedColumn, clazz, node);
if (handler != null) handler.completed(rs, node);
}
/**
* 根据指定参数查询对象某个字段的集合
* <p>
* @param <T>
* @param <V>
* @param selectedColumn
* @param clazz
* @param flipper
* @param bean
* @return
*/
@Override
public <T, V extends Serializable> Sheet<V> queryColumnSheet(final String selectedColumn, Class<T> clazz, final Flipper flipper, final FilterBean bean) {
return queryColumnSheet(selectedColumn, clazz, flipper, FilterNodeBean.createFilterNode(bean));
}
@Override
public <T, V extends Serializable> void queryColumnSheet(final CompletionHandler<Sheet<V>, FilterNode> handler, final String selectedColumn, final Class<T> clazz, final Flipper flipper, final FilterBean bean) {
final FilterNode node = FilterNodeBean.createFilterNode(bean);
Sheet<V> rs = queryColumnSheet(selectedColumn, clazz, flipper, node);
if (handler != null) handler.completed(rs, node);
}
@Override
public <T, V extends Serializable> Sheet<V> queryColumnSheet(final String selectedColumn, final Class<T> clazz, final Flipper flipper, final FilterNode node) {
Sheet<T> sheet = querySheet(true, true, clazz, SelectColumn.createIncludes(selectedColumn), flipper, node);
final Sheet<V> rs = new Sheet<>();
if (sheet.isEmpty()) return rs;
rs.setTotal(sheet.getTotal());
final EntityInfo<T> info = loadEntityInfo(clazz);
final Attribute<T, V> selected = (Attribute<T, V>) info.getAttribute(selectedColumn);
final List<V> list = new ArrayList<>();
for (T t : sheet.getRows()) {
list.add(selected.get(t));
}
rs.setRows(list);
return rs;
}
@Override
public <T, V extends Serializable> void queryColumnSheet(final CompletionHandler<Sheet<V>, FilterNode> handler, final String selectedColumn, final Class<T> clazz, final Flipper flipper, final FilterNode node) {
Sheet<V> rs = queryColumnSheet(selectedColumn, clazz, flipper, node);
if (handler != null) handler.completed(rs, node);
}
private <K extends Serializable, T> Map<K, T> formatMap(final Class<T> clazz, final Collection<T> list) {
Map<K, T> map = new LinkedHashMap<>();
if (list == null || list.isEmpty()) return map;
final Attribute<T, K> attr = (Attribute<T, K>) loadEntityInfo(clazz).getPrimary();
@@ -1339,10 +1586,16 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
* @return
*/
@Override
public <T> List<T> queryList(Class<T> clazz, String column, Serializable key) {
public <T> List<T> queryList(final Class<T> clazz, final String column, final Serializable key) {
return queryList(clazz, FilterNode.create(column, key));
}
@Override
public <T> void queryList(final CompletionHandler<List<T>, Serializable> handler, final Class<T> clazz, final String column, final Serializable key) {
List<T> rs = queryList(clazz, column, key);
if (handler != null) handler.completed(rs, key);
}
/**
* 根据过滤对象FilterBean查询对象集合
*
@@ -1356,11 +1609,24 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
return queryList(clazz, (SelectColumn) null, bean);
}
@Override
public <T> void queryList(final CompletionHandler<List<T>, FilterNode> handler, final Class<T> clazz, final FilterBean bean) {
FilterNode node = FilterNodeBean.createFilterNode(bean);
List<T> rs = queryList(clazz, node);
if (handler != null) handler.completed(rs, node);
}
@Override
public <T> List<T> queryList(final Class<T> clazz, final FilterNode node) {
return queryList(clazz, (SelectColumn) null, node);
}
@Override
public <T> void queryList(final CompletionHandler<List<T>, FilterNode> handler, final Class<T> clazz, final FilterNode node) {
List<T> rs = queryList(clazz, node);
if (handler != null) handler.completed(rs, node);
}
/**
* 根据过滤对象FilterBean查询对象集合 对象只填充或排除SelectField指定的字段
*
@@ -1375,19 +1641,33 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
return queryList(clazz, selects, (Flipper) null, bean);
}
@Override
public <T> void queryList(final CompletionHandler<List<T>, FilterNode> handler, final Class<T> clazz, final SelectColumn selects, final FilterBean bean) {
FilterNode node = FilterNodeBean.createFilterNode(bean);
List<T> rs = queryList(clazz, selects, node);
if (handler != null) handler.completed(rs, node);
}
@Override
public <T> List<T> queryList(final Class<T> clazz, final SelectColumn selects, final FilterNode node) {
return queryList(clazz, selects, (Flipper) null, node);
}
@Override
public <T> List<T> queryList(Class<T> clazz, final Flipper flipper, String column, Serializable key) {
public <T> void queryList(final CompletionHandler<List<T>, FilterNode> handler, final Class<T> clazz, final SelectColumn selects, final FilterNode node) {
List<T> rs = queryList(clazz, selects, node);
if (handler != null) handler.completed(rs, node);
}
@Override
public <T> List<T> queryList(final Class<T> clazz, final Flipper flipper, final String column, final Serializable key) {
return queryList(clazz, flipper, FilterNode.create(column, key));
}
@Override
public <T> List<T> queryList(final Class<T> clazz, final Flipper flipper, final FilterNode node) {
return queryList(clazz, null, flipper, node);
public <T> void queryList(final CompletionHandler<List<T>, Serializable> handler, final Class<T> clazz, final Flipper flipper, final String column, final Serializable key) {
List<T> 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<Class, Enti
}
@Override
public <T> List<T> queryList(final Class<T> clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node) {
return querySheet(true, false, clazz, selects, flipper, node).list(true);
public <T> void queryList(final CompletionHandler<List<T>, FilterNode> handler, final Class<T> clazz, final Flipper flipper, final FilterBean bean) {
FilterNode node = FilterNodeBean.createFilterNode(bean);
List<T> rs = queryList(clazz, flipper, node);
if (handler != null) handler.completed(rs, node);
}
@Override
public <T> List<T> queryList(final Class<T> clazz, final Flipper flipper, final FilterNode node) {
return queryList(clazz, null, flipper, node);
}
@Override
public <T> void queryList(final CompletionHandler<List<T>, FilterNode> handler, final Class<T> clazz, final Flipper flipper, final FilterNode node) {
List<T> rs = queryList(clazz, flipper, node);
if (handler != null) handler.completed(rs, node);
}
@Override
@@ -1405,39 +1698,25 @@ public final class DataDefaultSource implements DataSource, Function<Class, Enti
return querySheet(true, false, clazz, selects, flipper, FilterNodeBean.createFilterNode(bean)).list(true);
}
@Override
public <T> void queryList(final CompletionHandler<List<T>, FilterNode> handler, final Class<T> clazz, final SelectColumn selects, final Flipper flipper, final FilterBean bean) {
FilterNode node = FilterNodeBean.createFilterNode(bean);
List<T> rs = queryList(clazz, selects, flipper, node);
if (handler != null) handler.completed(rs, node);
}
@Override
public <T> List<T> queryList(final Class<T> clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node) {
return querySheet(true, false, clazz, selects, flipper, node).list(true);
}
@Override
public <T> void queryList(final CompletionHandler<List<T>, FilterNode> handler, final Class<T> clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node) {
List<T> rs = queryList(clazz, selects, flipper, node);
if (handler != null) handler.completed(rs, node);
}
//-----------------------sheet----------------------------
/**
* 根据指定参数查询对象某个字段的集合
* <p>
* @param <T>
* @param <V>
* @param selectedColumn
* @param clazz
* @param flipper
* @param bean
* @return
*/
@Override
public <T, V extends Serializable> Sheet<V> queryColumnSheet(String selectedColumn, Class<T> clazz, final Flipper flipper, final FilterBean bean) {
return queryColumnSheet(selectedColumn, clazz, flipper, FilterNodeBean.createFilterNode(bean));
}
@Override
public <T, V extends Serializable> Sheet<V> queryColumnSheet(String selectedColumn, Class<T> clazz, final Flipper flipper, final FilterNode node) {
Sheet<T> sheet = querySheet(true, true, clazz, SelectColumn.createIncludes(selectedColumn), flipper, node);
final Sheet<V> rs = new Sheet<>();
if (sheet.isEmpty()) return rs;
rs.setTotal(sheet.getTotal());
final EntityInfo<T> info = loadEntityInfo(clazz);
final Attribute<T, V> selected = (Attribute<T, V>) info.getAttribute(selectedColumn);
final List<V> 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<Class, Enti
* @return
*/
@Override
public <T> Sheet<T> querySheet(Class<T> clazz, final Flipper flipper, final FilterBean bean) {
public <T> Sheet<T> querySheet(final Class<T> clazz, final Flipper flipper, final FilterBean bean) {
return querySheet(clazz, null, flipper, bean);
}
@Override
public <T> Sheet<T> querySheet(Class<T> clazz, final Flipper flipper, final FilterNode node) {
public <T> void querySheet(final CompletionHandler<Sheet<T>, FilterNode> handler, final Class<T> clazz, final Flipper flipper, final FilterBean bean) {
FilterNode node = FilterNodeBean.createFilterNode(bean);
Sheet<T> rs = querySheet(clazz, flipper, node);
if (handler != null) handler.completed(rs, node);
}
@Override
public <T> Sheet<T> querySheet(final Class<T> clazz, final Flipper flipper, final FilterNode node) {
return querySheet(clazz, null, flipper, node);
}
@Override
public <T> void querySheet(final CompletionHandler<Sheet<T>, FilterNode> handler, final Class<T> clazz, final Flipper flipper, final FilterNode node) {
Sheet<T> 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<Class, Enti
* @return
*/
@Override
public <T> Sheet<T> querySheet(Class<T> clazz, final SelectColumn selects, final Flipper flipper, final FilterBean bean) {
public <T> Sheet<T> querySheet(final Class<T> clazz, final SelectColumn selects, final Flipper flipper, final FilterBean bean) {
return querySheet(true, true, clazz, selects, flipper, FilterNodeBean.createFilterNode(bean));
}
@Override
public <T> Sheet<T> querySheet(Class<T> clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node) {
public <T> void querySheet(final CompletionHandler<Sheet<T>, FilterNode> handler, final Class<T> clazz, final SelectColumn selects, final Flipper flipper, final FilterBean bean) {
FilterNode node = FilterNodeBean.createFilterNode(bean);
Sheet<T> rs = querySheet(clazz, selects, flipper, node);
if (handler != null) handler.completed(rs, node);
}
@Override
public <T> Sheet<T> querySheet(final Class<T> clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node) {
return querySheet(true, true, clazz, selects, flipper, node);
}
private <T> Sheet<T> querySheet(boolean readcache, boolean needtotal, Class<T> clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node) {
@Override
public <T> void querySheet(final CompletionHandler<Sheet<T>, FilterNode> handler, final Class<T> clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node) {
Sheet<T> rs = querySheet(clazz, selects, flipper, node);
if (handler != null) handler.completed(rs, node);
}
private <T> Sheet<T> querySheet(final boolean readcache, final boolean needtotal, final Class<T> clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node) {
final EntityInfo<T> info = loadEntityInfo(clazz);
final EntityCache<T> cache = info.getCache();
if (readcache && cache != null) {

View File

@@ -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 <T> void insert(final DataConnection conn, final T... values);
//----------------------异步版---------------------------------
public <T> void insert(final CompletionHandler<Void, T[]> handler, final T... values);
//-------------------------delete--------------------------
/**
* 删除对象, 必须是Entity对象
@@ -61,6 +65,13 @@ public interface DataSource {
public <T> void delete(final DataConnection conn, final Class<T> clazz, final FilterNode node);
//----------------------异步版---------------------------------
public <T> void delete(final CompletionHandler<Void, T[]> handler, final T... values);
public <T> void delete(final CompletionHandler<Void, Serializable[]> handler, final Class<T> clazz, final Serializable... ids);
public <T> void delete(final CompletionHandler<Void, FilterNode> handler, final Class<T> clazz, final FilterNode node);
//------------------------update---------------------------
/**
* 更新对象, 必须是Entity对象
@@ -76,10 +87,6 @@ public interface DataSource {
public <T> void updateColumn(final DataConnection conn, final Class<T> clazz, final Serializable id, final String column, final Serializable value);
public <T> void updateColumns(final T value, final String... columns);
public <T> void updateColumns(final DataConnection conn, final T value, final String... columns);
public <T> void updateColumnIncrement(final Class<T> clazz, final Serializable id, final String column, long incvalue);
public <T> void updateColumnIncrement(final DataConnection conn, final Class<T> clazz, final Serializable id, final String column, long incvalue);
@@ -92,6 +99,23 @@ public interface DataSource {
public <T> void updateColumnOr(final DataConnection conn, final Class<T> clazz, final Serializable id, final String column, long incvalue);
public <T> void updateColumns(final T value, final String... columns);
public <T> void updateColumns(final DataConnection conn, final T value, final String... columns);
//----------------------异步版---------------------------------
public <T> void update(final CompletionHandler<Void, T[]> handler, final T... values);
public <T> void updateColumn(final CompletionHandler<Void, Serializable> handler, final Class<T> clazz, final Serializable id, final String column, final Serializable value);
public <T> void updateColumnIncrement(final CompletionHandler<Void, Serializable> handler, final Class<T> clazz, final Serializable id, final String column, long incvalue);
public <T> void updateColumnAnd(final CompletionHandler<Void, Serializable> handler, final Class<T> clazz, final Serializable id, final String column, long incvalue);
public <T> void updateColumnOr(final CompletionHandler<Void, Serializable> handler, final Class<T> clazz, final Serializable id, final String column, long incvalue);
public <T> void updateColumns(final CompletionHandler<Void, T> 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 <T, K extends Serializable, N extends Number> Map<K, N> queryColumnMap(final Class<T> entityClass, final String keyColumn, final FilterFunc func, final String funcColumn, final FilterNode node);
//----------------------异步版---------------------------------
public void getNumberResult(final CompletionHandler<Number, String> handler, final Class entityClass, final FilterFunc func, final String column);
public void getNumberResult(final CompletionHandler<Number, FilterNode> handler, final Class entityClass, final FilterFunc func, final String column, final FilterBean bean);
public void getNumberResult(final CompletionHandler<Number, FilterNode> handler, final Class entityClass, final FilterFunc func, final String column, final FilterNode node);
public <T, K extends Serializable, N extends Number> void queryColumnMap(final CompletionHandler<Map<K, N>, String> handler, final Class<T> entityClass, final String keyColumn, final FilterFunc func, final String funcColumn);
public <T, K extends Serializable, N extends Number> void queryColumnMap(final CompletionHandler<Map<K, N>, FilterNode> handler, final Class<T> entityClass, final String keyColumn, final FilterFunc func, final String funcColumn, final FilterBean bean);
public <T, K extends Serializable, N extends Number> void queryColumnMap(final CompletionHandler<Map<K, N>, FilterNode> handler, final Class<T> entityClass, final String keyColumn, final FilterFunc func, final String funcColumn, final FilterNode node);
//-----------------------find----------------------------
/**
* 根据主键获取对象
@@ -120,15 +157,40 @@ public interface DataSource {
public <T> T findByColumn(final Class<T> clazz, final String column, final Serializable key);
public <T> T find(final Class<T> clazz, final FilterBean bean);
public <T> T find(final Class<T> clazz, final FilterNode node);
public <T> T find(final Class<T> clazz, final FilterBean bean);
public <T> T find(final Class<T> clazz, final SelectColumn selects, final FilterBean bean);
public <T> T find(final Class<T> clazz, final SelectColumn selects, final FilterNode node);
public <T> boolean exists(final Class<T> clazz, final Serializable pk);
public <T> boolean exists(final Class<T> clazz, final FilterBean bean);
public <T> boolean exists(final Class<T> clazz, final FilterNode node);
public <T> boolean exists(final Class<T> clazz, final FilterBean bean);
//----------------------异步版---------------------------------
public <T> void find(final CompletionHandler<T, Serializable> handler, final Class<T> clazz, final Serializable pk);
public <T> void find(final CompletionHandler<T, Serializable> handler, final Class<T> clazz, final SelectColumn selects, final Serializable pk);
public <T> void findByColumn(final CompletionHandler<T, Serializable> handler, final Class<T> clazz, final String column, final Serializable key);
public <T> void find(final CompletionHandler<T, FilterNode> handler, final Class<T> clazz, final FilterBean bean);
public <T> void find(final CompletionHandler<T, FilterNode> handler, final Class<T> clazz, final FilterNode node);
public <T> void find(final CompletionHandler<T, FilterNode> handler, final Class<T> clazz, final SelectColumn selects, final FilterBean bean);
public <T> void find(final CompletionHandler<T, FilterNode> handler, final Class<T> clazz, final SelectColumn selects, final FilterNode node);
public <T> void exists(final CompletionHandler<Boolean, Serializable> handler, final Class<T> clazz, final Serializable pk);
public <T> void exists(final CompletionHandler<Boolean, FilterNode> handler, final Class<T> clazz, final FilterBean bean);
public <T> void exists(final CompletionHandler<Boolean, FilterNode> handler, final Class<T> clazz, final FilterNode node);
//-----------------------list set----------------------------
/**
@@ -144,15 +206,28 @@ public interface DataSource {
*/
public <T, V extends Serializable> HashSet<V> queryColumnSet(final String selectedColumn, final Class<T> clazz, final String column, final Serializable key);
public <T, V extends Serializable> HashSet<V> queryColumnSet(final String selectedColumn, final Class<T> clazz, final FilterNode node);
public <T, V extends Serializable> HashSet<V> queryColumnSet(final String selectedColumn, final Class<T> clazz, final FilterBean bean);
public <T, V extends Serializable> HashSet<V> queryColumnSet(final String selectedColumn, final Class<T> clazz, final FilterNode node);
public <T, V extends Serializable> List<V> queryColumnList(final String selectedColumn, final Class<T> clazz, final String column, final Serializable key);
public <T, V extends Serializable> List<V> queryColumnList(final String selectedColumn, final Class<T> clazz, final FilterBean bean);
public <T, V extends Serializable> List<V> queryColumnList(final String selectedColumn, final Class<T> clazz, final FilterNode node);
public <T, V extends Serializable> List<V> queryColumnList(final String selectedColumn, final Class<T> clazz, final FilterBean bean);
//----------------------异步版---------------------------------
public <T, V extends Serializable> void queryColumnSet(final CompletionHandler<HashSet<V>, Serializable> handler, final String selectedColumn, final Class<T> clazz, final String column, final Serializable key);
public <T, V extends Serializable> void queryColumnSet(final CompletionHandler<HashSet<V>, FilterNode> handler, final String selectedColumn, final Class<T> clazz, final FilterBean bean);
public <T, V extends Serializable> void queryColumnSet(final CompletionHandler<HashSet<V>, FilterNode> handler, final String selectedColumn, final Class<T> clazz, final FilterNode node);
public <T, V extends Serializable> void queryColumnList(final CompletionHandler<List<V>, Serializable> handler, final String selectedColumn, final Class<T> clazz, final String column, final Serializable key);
public <T, V extends Serializable> void queryColumnList(final CompletionHandler<List<V>, FilterNode> handler, final String selectedColumn, final Class<T> clazz, final FilterBean bean);
public <T, V extends Serializable> void queryColumnList(final CompletionHandler<List<V>, FilterNode> handler, final String selectedColumn, final Class<T> clazz, final FilterNode node);
/**
* 根据指定参数查询对象某个字段的集合
@@ -169,6 +244,11 @@ public interface DataSource {
public <T, V extends Serializable> Sheet<V> queryColumnSheet(final String selectedColumn, final Class<T> clazz, final Flipper flipper, final FilterNode node);
//----------------------异步版---------------------------------
public <T, V extends Serializable> void queryColumnSheet(final CompletionHandler<Sheet<V>, FilterNode> handler, final String selectedColumn, final Class<T> clazz, final Flipper flipper, final FilterBean bean);
public <T, V extends Serializable> void queryColumnSheet(final CompletionHandler<Sheet<V>, FilterNode> handler, final String selectedColumn, final Class<T> clazz, final Flipper flipper, final FilterNode node);
/**
* 根据指定字段值查询对象集合
*
@@ -180,24 +260,45 @@ public interface DataSource {
*/
public <T> List<T> queryList(final Class<T> clazz, final String column, final Serializable key);
public <T> List<T> queryList(final Class<T> clazz, final FilterNode node);
public <T> List<T> queryList(final Class<T> clazz, final FilterBean bean);
public <T> List<T> queryList(final Class<T> clazz, final SelectColumn selects, final FilterNode node);
public <T> List<T> queryList(final Class<T> clazz, final FilterNode node);
public <T> List<T> queryList(final Class<T> clazz, final SelectColumn selects, final FilterBean bean);
public <T> List<T> queryList(final Class<T> clazz, final Flipper flipper, final String column, final Serializable key);
public <T> List<T> queryList(final Class<T> clazz, final SelectColumn selects, final FilterNode node);
public <T> List<T> queryList(final Class<T> clazz, final Flipper flipper, final FilterNode node);
public <T> List<T> queryList(final Class<T> clazz, final Flipper flipper, final String column, final Serializable key);
public <T> List<T> queryList(final Class<T> clazz, final Flipper flipper, final FilterBean bean);
public <T> List<T> queryList(final Class<T> clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node);
public <T> List<T> queryList(final Class<T> clazz, final Flipper flipper, final FilterNode node);
public <T> List<T> queryList(final Class<T> clazz, final SelectColumn selects, final Flipper flipper, final FilterBean bean);
public <T> List<T> queryList(final Class<T> clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node);
//----------------------异步版---------------------------------
public <T> void queryList(final CompletionHandler<List<T>, Serializable> handler, final Class<T> clazz, final String column, final Serializable key);
public <T> void queryList(final CompletionHandler<List<T>, FilterNode> handler, final Class<T> clazz, final FilterBean bean);
public <T> void queryList(final CompletionHandler<List<T>, FilterNode> handler, final Class<T> clazz, final FilterNode node);
public <T> void queryList(final CompletionHandler<List<T>, FilterNode> handler, final Class<T> clazz, final SelectColumn selects, final FilterBean bean);
public <T> void queryList(final CompletionHandler<List<T>, FilterNode> handler, final Class<T> clazz, final SelectColumn selects, final FilterNode node);
public <T> void queryList(final CompletionHandler<List<T>, Serializable> handler, final Class<T> clazz, final Flipper flipper, final String column, final Serializable key);
public <T> void queryList(final CompletionHandler<List<T>, FilterNode> handler, final Class<T> clazz, final Flipper flipper, final FilterBean bean);
public <T> void queryList(final CompletionHandler<List<T>, FilterNode> handler, final Class<T> clazz, final Flipper flipper, final FilterNode node);
public <T> void queryList(final CompletionHandler<List<T>, FilterNode> handler, final Class<T> clazz, final SelectColumn selects, final Flipper flipper, final FilterBean bean);
public <T> void queryList(final CompletionHandler<List<T>, FilterNode> handler, final Class<T> clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node);
//-----------------------sheet----------------------------
/**
* 根据指定参数查询对象某个对象的集合页
@@ -216,4 +317,13 @@ public interface DataSource {
public <T> Sheet<T> querySheet(final Class<T> clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node);
//----------------------异步版---------------------------------
public <T> void querySheet(final CompletionHandler<Sheet<T>, FilterNode> handler, final Class<T> clazz, final Flipper flipper, final FilterBean bean);
public <T> void querySheet(final CompletionHandler<Sheet<T>, FilterNode> handler, final Class<T> clazz, final Flipper flipper, final FilterNode node);
public <T> void querySheet(final CompletionHandler<Sheet<T>, FilterNode> handler, final Class<T> clazz, final SelectColumn selects, final Flipper flipper, final FilterBean bean);
public <T> void querySheet(final CompletionHandler<Sheet<T>, FilterNode> handler, final Class<T> clazz, final SelectColumn selects, final Flipper flipper, final FilterNode node);
}