This commit is contained in:
@@ -420,7 +420,7 @@ public final class Application {
|
|||||||
NodeServer server = null;
|
NodeServer server = null;
|
||||||
if ("SNCP".equals(protocol)) {
|
if ("SNCP".equals(protocol)) {
|
||||||
server = new NodeSncpServer(Application.this, serconf);
|
server = new NodeSncpServer(Application.this, serconf);
|
||||||
} else if ("HTTP".equals(protocol) || "HTTPS".equals(protocol)) {
|
} else if ("HTTP".equals(protocol)) {
|
||||||
server = new NodeHttpServer(Application.this, serconf);
|
server = new NodeHttpServer(Application.this, serconf);
|
||||||
} else {
|
} else {
|
||||||
if (!inited.get()) {
|
if (!inited.get()) {
|
||||||
@@ -435,7 +435,7 @@ public final class Application {
|
|||||||
NodeProtocol pros = type.getAnnotation(NodeProtocol.class);
|
NodeProtocol pros = type.getAnnotation(NodeProtocol.class);
|
||||||
for (String p : pros.value()) {
|
for (String p : pros.value()) {
|
||||||
p = p.toUpperCase();
|
p = p.toUpperCase();
|
||||||
if ("SNCP".equals(p) || "HTTP".equals(p) || "HTTPS".equals(p)) continue;
|
if ("SNCP".equals(p) || "HTTP".equals(p)) continue;
|
||||||
final Class<? extends NodeServer> old = nodeClasses.get(p);
|
final Class<? extends NodeServer> old = nodeClasses.get(p);
|
||||||
if (old != null && old != type) throw new RuntimeException("Protocol(" + p + ") had NodeServer-Class(" + old.getName() + ") but repeat NodeServer-Class(" + type.getName() + ")");
|
if (old != null && old != type) throw new RuntimeException("Protocol(" + p + ") had NodeServer-Class(" + old.getName() + ") but repeat NodeServer-Class(" + type.getName() + ")");
|
||||||
nodeClasses.put(p, type);
|
nodeClasses.put(p, type);
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ import org.redkale.util.*;
|
|||||||
*
|
*
|
||||||
* @author zhangjx
|
* @author zhangjx
|
||||||
*/
|
*/
|
||||||
@NodeProtocol({"HTTP", "HTTPS"})
|
@NodeProtocol({"HTTP"})
|
||||||
public final class NodeHttpServer extends NodeServer {
|
public final class NodeHttpServer extends NodeServer {
|
||||||
|
|
||||||
private final HttpServer httpServer;
|
private final HttpServer httpServer;
|
||||||
|
|||||||
@@ -246,7 +246,6 @@ public abstract class NodeServer {
|
|||||||
if (Modifier.isFinal(type.getModifiers())) continue;
|
if (Modifier.isFinal(type.getModifiers())) continue;
|
||||||
if (!Modifier.isPublic(type.getModifiers())) continue;
|
if (!Modifier.isPublic(type.getModifiers())) continue;
|
||||||
if (Modifier.isAbstract(type.getModifiers())) continue;
|
if (Modifier.isAbstract(type.getModifiers())) continue;
|
||||||
if (type.getAnnotation(Ignore.class) != null) continue;
|
|
||||||
if (!isSNCP() && factory.find(entry.getName(), type) != null) continue;
|
if (!isSNCP() && factory.find(entry.getName(), type) != null) continue;
|
||||||
final Set<InetSocketAddress> sameGroupAddrs = new LinkedHashSet<>();
|
final Set<InetSocketAddress> sameGroupAddrs = new LinkedHashSet<>();
|
||||||
final Map<String, Set<InetSocketAddress>> diffGroupAddrs = new HashMap<>();
|
final Map<String, Set<InetSocketAddress>> diffGroupAddrs = new HashMap<>();
|
||||||
|
|||||||
@@ -11,7 +11,11 @@ import jdk.internal.org.objectweb.asm.Type;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 该类功能是动态映射一个Data类中成员对应的getter、setter方法; 代替低效的反射实现方式。
|
* 该类功能是动态映射一个Data类中成员对应的getter、setter方法; 代替低效的反射实现方式。
|
||||||
* 映射Field时,field要么是public非final,要么存在对应的getter、setter方法。
|
* 映射Field时,field必须满足以下条件之一:
|
||||||
|
* 1、field属性是public且非final
|
||||||
|
* 2、至少存在对应的getter、setter方法中的一个
|
||||||
|
* 当不存在getter方法时,get操作规定返回null
|
||||||
|
* 当不存在setter方法时,set操作为空方法
|
||||||
*
|
*
|
||||||
* @author zhangjx
|
* @author zhangjx
|
||||||
* @param <T>
|
* @param <T>
|
||||||
@@ -78,19 +82,58 @@ public interface Attribute<T, F> {
|
|||||||
public static <T, F> Attribute<T, F> create(Class<T> clazz, final String fieldname, final java.lang.reflect.Field field) {
|
public static <T, F> Attribute<T, F> create(Class<T> clazz, final String fieldname, final java.lang.reflect.Field field) {
|
||||||
return create(clazz, fieldname, field, null, null);
|
return create(clazz, fieldname, field, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* getter、setter不能全为null
|
||||||
|
*
|
||||||
|
* @param <T>
|
||||||
|
* @param <F>
|
||||||
|
* @param getter
|
||||||
|
* @param setter
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
public static <T, F> Attribute<T, F> create(final Method getter, final Method setter) {
|
public static <T, F> Attribute<T, F> create(final Method getter, final Method setter) {
|
||||||
return create((Class) (getter == null ? setter.getDeclaringClass() : getter.getDeclaringClass()), null, null, getter, setter);
|
return create((Class) (getter == null ? setter.getDeclaringClass() : getter.getDeclaringClass()), null, null, getter, setter);
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* getter、setter不能全为null
|
||||||
|
*
|
||||||
|
* @param <T>
|
||||||
|
* @param <F>
|
||||||
|
* @param clazz
|
||||||
|
* @param getter
|
||||||
|
* @param setter
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
public static <T, F> Attribute<T, F> create(Class<T> clazz, final Method getter, final Method setter) {
|
public static <T, F> Attribute<T, F> create(Class<T> clazz, final Method getter, final Method setter) {
|
||||||
return create(clazz, null, null, getter, setter);
|
return create(clazz, null, null, getter, setter);
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* getter、setter不能全为null
|
||||||
|
*
|
||||||
|
* @param <T>
|
||||||
|
* @param <F>
|
||||||
|
* @param clazz
|
||||||
|
* @param fieldalias
|
||||||
|
* @param getter
|
||||||
|
* @param setter
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
public static <T, F> Attribute<T, F> create(Class<T> clazz, final String fieldalias, final Method getter, final Method setter) {
|
public static <T, F> Attribute<T, F> create(Class<T> clazz, final String fieldalias, final Method getter, final Method setter) {
|
||||||
return create(clazz, fieldalias, null, getter, setter);
|
return create(clazz, fieldalias, null, getter, setter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* field、getter、setter不能全为null
|
||||||
|
* @param <T>
|
||||||
|
* @param <F>
|
||||||
|
* @param clazz
|
||||||
|
* @param fieldalias0
|
||||||
|
* @param field0
|
||||||
|
* @param getter0
|
||||||
|
* @param setter0
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public static <T, F> Attribute<T, F> create(final Class<T> clazz, String fieldalias0, final Field field0, Method getter0, Method setter0) {
|
public static <T, F> Attribute<T, F> create(final Class<T> clazz, String fieldalias0, final Field field0, Method getter0, Method setter0) {
|
||||||
if (fieldalias0 != null && fieldalias0.isEmpty()) fieldalias0 = null;
|
if (fieldalias0 != null && fieldalias0.isEmpty()) fieldalias0 = null;
|
||||||
|
|||||||
@@ -10,9 +10,10 @@ import static java.lang.annotation.ElementType.TYPE;
|
|||||||
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 自动加载。 使用场景有两种:
|
* 自动加载。 使用场景:
|
||||||
* 一、 扫描时自动加载。 系统在启动时会扫描classpath下Service和Servlet的实现类,默认情况下会加载所有的实现类, 只有当标记为@AutoLoad(false)时才会被忽略。 没标记的与标记为@AutoLoad(true)是等价的。
|
* 1、被标记为@AutoLoad(false)的Service类不会被自动加载
|
||||||
* 二、 Entity类数据加载。 DataSource初始化某个标记为@javax.persistence.Cacheable的Entity类时,如果该类存在@AutoLoad时,则需要将Entity类对应的表数据全量加载进缓存中。
|
* 2、被标记为@AutoLoad(false)的Servlet类不会被自动加载
|
||||||
|
* 3、被标记为@AutoLoad且同时被标记为@javax.persistence.Cacheable的Entity类在被DataSource初始化时需要将Entity类对应的表数据全量加载进缓存中。
|
||||||
*
|
*
|
||||||
* @author zhangjx
|
* @author zhangjx
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import static jdk.internal.org.objectweb.asm.Opcodes.*;
|
|||||||
import jdk.internal.org.objectweb.asm.Type;
|
import jdk.internal.org.objectweb.asm.Type;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 实现一个类的构造方法。 代替低效的反射实现方式。
|
* 实现一个类的构造方法。 代替低效的反射实现方式。 不支持数组类
|
||||||
*
|
*
|
||||||
* @author zhangjx
|
* @author zhangjx
|
||||||
* @param <T>
|
* @param <T>
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
package org.redkale.util;
|
package org.redkale.util;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* 双long数据结构
|
||||||
*
|
*
|
||||||
* @author zhangjx
|
* @author zhangjx
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -10,6 +10,11 @@ import static java.lang.annotation.ElementType.*;
|
|||||||
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
import static java.lang.annotation.RetentionPolicy.RUNTIME;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* 用于忽略字段、方法或类。使用场景:
|
||||||
|
* 1、convert功能中被标记为@Ignore的字段或方法会被忽略
|
||||||
|
* 2、FilterBean中的被标记为@Ignore的字段会被忽略
|
||||||
|
* 3、被标记为@Ignore的Service类不会被自动加载
|
||||||
|
* 4、被标记为@Ignore的Servlet类不会被自动加载
|
||||||
*
|
*
|
||||||
* @author zhangjx
|
* @author zhangjx
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,27 +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.util;
|
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 便于操作的HashMap类
|
|
||||||
*
|
|
||||||
* @author zhangjx
|
|
||||||
*/
|
|
||||||
public class ObjectNode extends HashMap<String, Object> {
|
|
||||||
|
|
||||||
public static ObjectNode create(String key, Object value) {
|
|
||||||
ObjectNode node = new ObjectNode();
|
|
||||||
node.put(key, value);
|
|
||||||
return node;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ObjectNode appand(String key, Object value) {
|
|
||||||
this.put(key, value);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -8,6 +8,7 @@ package org.redkale.util;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* 页集合。 结构由一个total总数和一个List列表组合而成。
|
||||||
*
|
*
|
||||||
* @author zhangjx
|
* @author zhangjx
|
||||||
* @param <T>
|
* @param <T>
|
||||||
|
|||||||
Reference in New Issue
Block a user