RedissonAttachedLiveObjectService enhancement & author update
RedissonAttachedLiveObjectService now supports objects with different codecs. updated author tag on files created by me to match my github profilepull/527/head
parent
6f028eb24b
commit
04ed064346
@ -0,0 +1,23 @@
|
|||||||
|
package org.redisson.liveobject;
|
||||||
|
|
||||||
|
import org.redisson.client.codec.Codec;
|
||||||
|
import org.redisson.core.RObject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Rui Gu (https://github.com/jackygurui)
|
||||||
|
*/
|
||||||
|
public interface CodecProvider {
|
||||||
|
|
||||||
|
Codec getCodec(Class<? extends Codec> codecClass);
|
||||||
|
|
||||||
|
Codec getCodec(Class<? extends Codec> codecClass, Class<? extends RObject> rObjectClass, String name);
|
||||||
|
|
||||||
|
Codec getCodec(Class<? extends Codec> codecClass, RObject rObject, String name);
|
||||||
|
|
||||||
|
void registerCodec(Class<? extends Codec> codecClass, Codec codec);
|
||||||
|
|
||||||
|
void registerCodec(Class<? extends Codec> codecClass, Class<? extends RObject> rObjectClass, String name, Codec codec);
|
||||||
|
|
||||||
|
void registerCodec(Class<? extends Codec> codecClass, RObject rObject, String name, Codec codec);
|
||||||
|
}
|
@ -0,0 +1,59 @@
|
|||||||
|
package org.redisson.liveobject;
|
||||||
|
|
||||||
|
import io.netty.util.internal.PlatformDependent;
|
||||||
|
import java.util.concurrent.ConcurrentMap;
|
||||||
|
import org.redisson.client.codec.Codec;
|
||||||
|
import org.redisson.core.RObject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Rui Gu (https://github.com/jackygurui)
|
||||||
|
*/
|
||||||
|
public class DefaultCodecProvider implements CodecProvider {
|
||||||
|
|
||||||
|
public static final ConcurrentMap<Class<? extends Codec>, Codec> codecCache = PlatformDependent.newConcurrentHashMap();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Codec getCodec(Class<? extends Codec> codecClass) {
|
||||||
|
if (!codecCache.containsKey(codecClass)) {
|
||||||
|
try {
|
||||||
|
codecCache.putIfAbsent(codecClass, codecClass.newInstance());
|
||||||
|
} catch (Exception ex) {
|
||||||
|
throw new RuntimeException(ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return codecCache.get(codecClass);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Codec getCodec(Class<? extends Codec> codecClass, Class<? extends RObject> rObjectClass, String name) {
|
||||||
|
if (rObjectClass.isInterface()) {
|
||||||
|
throw new IllegalArgumentException("Cannot lookup an interface class of RObject " + rObjectClass.getCanonicalName() + ". Concrete class only.");
|
||||||
|
}
|
||||||
|
return getCodec(codecClass);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Codec getCodec(Class<? extends Codec> codecClass, RObject rObject, String name) {
|
||||||
|
return getCodec(codecClass, rObject.getClass(), name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void registerCodec(Class<? extends Codec> cls, Codec codec) {
|
||||||
|
codecCache.putIfAbsent(cls, codec);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void registerCodec(Class<? extends Codec> codecClass, Class<? extends RObject> rObjectClass, String name, Codec codec) {
|
||||||
|
if (rObjectClass.isInterface()) {
|
||||||
|
throw new IllegalArgumentException("Cannot register an interface class of RObject " + rObjectClass.getCanonicalName() + ". Concrete class only.");
|
||||||
|
}
|
||||||
|
registerCodec(codecClass, codec);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void registerCodec(Class<? extends Codec> codecClass, RObject rObject, String name, Codec codec) {
|
||||||
|
registerCodec(codecClass, rObject.getClass(), name, codec);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue