CacheSource改善

This commit is contained in:
Redkale
2017-11-08 16:20:04 +08:00
parent 0569e87d4e
commit 7261bcfadb
4 changed files with 18 additions and 11 deletions

View File

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

View File

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

View File

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

View File

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