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(); Type genericType = field.getGenericType();
ParameterizedType pt = (genericType instanceof ParameterizedType) ? (ParameterizedType) genericType : null; ParameterizedType pt = (genericType instanceof ParameterizedType) ? (ParameterizedType) genericType : null;
Type valType = pt == null ? null : pt.getActualTypeArguments()[0]; Type valType = pt == null ? null : pt.getActualTypeArguments()[0];
if (sourceType == CacheMemorySource.class) { if (CacheSource.class.isAssignableFrom(sourceType)) {
CacheMemorySource memorySource = (CacheMemorySource) source; CacheSource cacheSource = (CacheSource) source;
memorySource.setStoreType(valType instanceof Class ? (Class) valType : Object.class); cacheSource.initValueType(valType instanceof Class ? (Class) valType : Object.class);
if (field.getAnnotation(Transient.class) != null) memorySource.setNeedStore(false); //必须在setStoreType之后 cacheSource.initTransient(field.getAnnotation(Transient.class) != null); //必须在initValueType之后
} }
application.cacheSources.add((CacheSource) source); application.cacheSources.add((CacheSource) source);
appResFactory.register(resourceName, genericType, source); appResFactory.register(resourceName, genericType, source);

View File

@@ -488,6 +488,7 @@ public class JsonReader extends Reader {
} else { } else {
final int start = currpos; final int start = currpos;
for (;;) { for (;;) {
if(currpos >= text0.length) break;
char ch = text0[currpos]; char ch = text0[currpos];
if (ch == ',' || ch <= ' ' || ch == '}' || ch == ']' || ch == ':') break; if (ch == ',' || ch <= ' ' || ch == '}' || ch == ']' || ch == ':') break;
currpos++; currpos++;

View File

@@ -62,16 +62,17 @@ public class CacheMemorySource<V extends Object> extends AbstractService impleme
public CacheMemorySource() { public CacheMemorySource() {
} }
public final CacheMemorySource setStoreType(Class valueType) { @Override
public final void initValueType(Type valueType) {
this.objValueType = valueType; this.objValueType = valueType;
this.setValueType = TypeToken.createParameterizedType(null, CopyOnWriteArraySet.class, valueType); this.setValueType = TypeToken.createParameterizedType(null, CopyOnWriteArraySet.class, valueType);
this.listValueType = TypeToken.createParameterizedType(null, ConcurrentLinkedQueue.class, valueType); this.listValueType = TypeToken.createParameterizedType(null, ConcurrentLinkedQueue.class, valueType);
this.setNeedStore(this.objValueType != null); this.initTransient(this.objValueType == null);
return this;
} }
public final void setNeedStore(boolean needStore) { @Override
this.needStore = needStore; public final void initTransient(boolean flag) {
this.needStore = !flag;
} }
@Override @Override
@@ -83,12 +84,12 @@ public class CacheMemorySource<V extends Object> extends AbstractService impleme
String storeValueStr = prop.getValue("value-type"); String storeValueStr = prop.getValue("value-type");
if (storeValueStr != null) { if (storeValueStr != null) {
try { try {
this.setStoreType(Thread.currentThread().getContextClassLoader().loadClass(storeValueStr)); this.initValueType(Thread.currentThread().getContextClassLoader().loadClass(storeValueStr));
} catch (Throwable e) { } catch (Throwable e) {
logger.log(Level.SEVERE, self.getClass().getSimpleName() + " load key & value store class (" + storeValueStr + ") error", 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"); String expireHandlerClass = prop == null ? null : prop.getValue("expirehandler");
if (expireHandlerClass != null) { if (expireHandlerClass != null) {

View File

@@ -6,6 +6,7 @@
package org.redkale.source; package org.redkale.source;
import java.beans.ConstructorProperties; import java.beans.ConstructorProperties;
import java.lang.reflect.Type;
import java.util.*; import java.util.*;
import java.util.concurrent.*; import java.util.concurrent.*;
import org.redkale.convert.ConvertColumn; import org.redkale.convert.ConvertColumn;
@@ -21,6 +22,10 @@ import org.redkale.convert.json.JsonFactory;
*/ */
public interface CacheSource<V extends Object> { public interface CacheSource<V extends Object> {
public void initValueType(Type valueType);
public void initTransient(boolean flag);
default boolean isOpen() { default boolean isOpen() {
return true; return true;
} }