CacheSource改善
This commit is contained in:
@@ -274,10 +274,10 @@ public abstract class NodeServer {
|
||||
Type genericType = field.getGenericType();
|
||||
ParameterizedType pt = (genericType instanceof ParameterizedType) ? (ParameterizedType) genericType : null;
|
||||
Type valType = pt == null ? null : pt.getActualTypeArguments()[0];
|
||||
if (sourceType == CacheMemorySource.class) {
|
||||
CacheMemorySource memorySource = (CacheMemorySource) source;
|
||||
memorySource.setStoreType(valType instanceof Class ? (Class) valType : Object.class);
|
||||
if (field.getAnnotation(Transient.class) != null) memorySource.setNeedStore(false); //必须在setStoreType之后
|
||||
if (CacheSource.class.isAssignableFrom(sourceType)) {
|
||||
CacheSource cacheSource = (CacheSource) source;
|
||||
cacheSource.initValueType(valType instanceof Class ? (Class) valType : Object.class);
|
||||
cacheSource.initTransient(field.getAnnotation(Transient.class) != null); //必须在initValueType之后
|
||||
}
|
||||
application.cacheSources.add((CacheSource) source);
|
||||
appResFactory.register(resourceName, genericType, source);
|
||||
|
||||
@@ -488,6 +488,7 @@ public class JsonReader extends Reader {
|
||||
} else {
|
||||
final int start = currpos;
|
||||
for (;;) {
|
||||
if(currpos >= text0.length) break;
|
||||
char ch = text0[currpos];
|
||||
if (ch == ',' || ch <= ' ' || ch == '}' || ch == ']' || ch == ':') break;
|
||||
currpos++;
|
||||
|
||||
@@ -62,16 +62,17 @@ public class CacheMemorySource<V extends Object> extends AbstractService impleme
|
||||
public CacheMemorySource() {
|
||||
}
|
||||
|
||||
public final CacheMemorySource setStoreType(Class valueType) {
|
||||
@Override
|
||||
public final void initValueType(Type valueType) {
|
||||
this.objValueType = valueType;
|
||||
this.setValueType = TypeToken.createParameterizedType(null, CopyOnWriteArraySet.class, valueType);
|
||||
this.listValueType = TypeToken.createParameterizedType(null, ConcurrentLinkedQueue.class, valueType);
|
||||
this.setNeedStore(this.objValueType != null);
|
||||
return this;
|
||||
this.initTransient(this.objValueType == null);
|
||||
}
|
||||
|
||||
public final void setNeedStore(boolean needStore) {
|
||||
this.needStore = needStore;
|
||||
@Override
|
||||
public final void initTransient(boolean flag) {
|
||||
this.needStore = !flag;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -83,12 +84,12 @@ public class CacheMemorySource<V extends Object> extends AbstractService impleme
|
||||
String storeValueStr = prop.getValue("value-type");
|
||||
if (storeValueStr != null) {
|
||||
try {
|
||||
this.setStoreType(Thread.currentThread().getContextClassLoader().loadClass(storeValueStr));
|
||||
this.initValueType(Thread.currentThread().getContextClassLoader().loadClass(storeValueStr));
|
||||
} catch (Throwable e) {
|
||||
logger.log(Level.SEVERE, self.getClass().getSimpleName() + " load key & value store class (" + storeValueStr + ") error", e);
|
||||
}
|
||||
}
|
||||
if (prop.getBoolValue("store-ignore", false)) setNeedStore(false);
|
||||
this.initTransient(prop.getBoolValue("store-ignore", false));
|
||||
}
|
||||
String expireHandlerClass = prop == null ? null : prop.getValue("expirehandler");
|
||||
if (expireHandlerClass != null) {
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
package org.redkale.source;
|
||||
|
||||
import java.beans.ConstructorProperties;
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.*;
|
||||
import org.redkale.convert.ConvertColumn;
|
||||
@@ -21,6 +22,10 @@ import org.redkale.convert.json.JsonFactory;
|
||||
*/
|
||||
public interface CacheSource<V extends Object> {
|
||||
|
||||
public void initValueType(Type valueType);
|
||||
|
||||
public void initTransient(boolean flag);
|
||||
|
||||
default boolean isOpen() {
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user