diff --git a/redisson/src/main/java/org/redisson/RedissonBitSet.java b/redisson/src/main/java/org/redisson/RedissonBitSet.java index a58fcce46348152d4252d49c3be2e51b99f54515..87ac51e70f2331ff86afe72a3ca0313a3ead9cf2 100644 --- a/redisson/src/main/java/org/redisson/RedissonBitSet.java +++ b/redisson/src/main/java/org/redisson/RedissonBitSet.java @@ -38,7 +38,7 @@ import org.redisson.command.CommandBatchService; public class RedissonBitSet extends RedissonExpirable implements RBitSet { public RedissonBitSet(CommandAsyncExecutor connectionManager, String name) { - super(connectionManager, name); + super(null, connectionManager, name); } @Override diff --git a/redisson/src/main/java/org/redisson/RedissonObject.java b/redisson/src/main/java/org/redisson/RedissonObject.java index b65a639e3e990a77d92eda70e12ddc3aefc8c816..2592756fedfede750c26c8971c69313ca5481cb8 100644 --- a/redisson/src/main/java/org/redisson/RedissonObject.java +++ b/redisson/src/main/java/org/redisson/RedissonObject.java @@ -101,7 +101,7 @@ public abstract class RedissonObject implements RObject { @Override public RFuture sizeInMemoryAsync() { - return commandExecutor.writeAsync(getName(), RedisCommands.MEMORY_USAGE, getName()); + return commandExecutor.writeAsync(getName(), StringCodec.INSTANCE, RedisCommands.MEMORY_USAGE, getName()); } public final RFuture sizeInMemoryAsync(List keys) { @@ -124,7 +124,7 @@ public abstract class RedissonObject implements RObject { @Override public RFuture renameAsync(String newName) { - return commandExecutor.writeAsync(getName(), RedisCommands.RENAME, getName(), newName); + return commandExecutor.writeAsync(getName(), StringCodec.INSTANCE, RedisCommands.RENAME, getName(), newName); } @Override @@ -134,7 +134,7 @@ public abstract class RedissonObject implements RObject { @Override public RFuture migrateAsync(String host, int port, int database, long timeout) { - return commandExecutor.writeAsync(getName(), RedisCommands.MIGRATE, host, port, getName(), database, timeout); + return commandExecutor.writeAsync(getName(), StringCodec.INSTANCE, RedisCommands.MIGRATE, host, port, getName(), database, timeout); } @Override @@ -144,7 +144,7 @@ public abstract class RedissonObject implements RObject { @Override public RFuture copyAsync(String host, int port, int database, long timeout) { - return commandExecutor.writeAsync(getName(), RedisCommands.MIGRATE, host, port, getName(), database, timeout, "COPY"); + return commandExecutor.writeAsync(getName(), StringCodec.INSTANCE, RedisCommands.MIGRATE, host, port, getName(), database, timeout, "COPY"); } @Override @@ -154,7 +154,7 @@ public abstract class RedissonObject implements RObject { @Override public RFuture moveAsync(int database) { - return commandExecutor.writeAsync(getName(), RedisCommands.MOVE, getName(), database); + return commandExecutor.writeAsync(getName(), StringCodec.INSTANCE, RedisCommands.MOVE, getName(), database); } @Override @@ -164,7 +164,7 @@ public abstract class RedissonObject implements RObject { @Override public RFuture renamenxAsync(String newName) { - return commandExecutor.writeAsync(getName(), RedisCommands.RENAMENX, getName(), newName); + return commandExecutor.writeAsync(getName(), StringCodec.INSTANCE, RedisCommands.RENAMENX, getName(), newName); } @Override @@ -174,7 +174,7 @@ public abstract class RedissonObject implements RObject { @Override public RFuture deleteAsync() { - return commandExecutor.writeAsync(getName(), RedisCommands.DEL_BOOL, getName()); + return commandExecutor.writeAsync(getName(), StringCodec.INSTANCE, RedisCommands.DEL_BOOL, getName()); } @Override @@ -184,7 +184,7 @@ public abstract class RedissonObject implements RObject { @Override public RFuture unlinkAsync() { - return commandExecutor.writeAsync(getName(), RedisCommands.UNLINK_BOOL, getName()); + return commandExecutor.writeAsync(getName(), StringCodec.INSTANCE, RedisCommands.UNLINK_BOOL, getName()); } @Override @@ -194,7 +194,7 @@ public abstract class RedissonObject implements RObject { @Override public RFuture touchAsync() { - return commandExecutor.writeAsync(getName(), codec, RedisCommands.TOUCH, getName()); + return commandExecutor.writeAsync(getName(), StringCodec.INSTANCE, RedisCommands.TOUCH, getName()); } @Override @@ -204,7 +204,7 @@ public abstract class RedissonObject implements RObject { @Override public RFuture isExistsAsync() { - return commandExecutor.readAsync(getName(), codec, RedisCommands.EXISTS, getName()); + return commandExecutor.readAsync(getName(), StringCodec.INSTANCE, RedisCommands.EXISTS, getName()); } @Override diff --git a/redisson/src/main/java/org/redisson/command/CommandAsyncService.java b/redisson/src/main/java/org/redisson/command/CommandAsyncService.java index cabfd1ec74ea229e865ca19cdcaf9fd28e7bedeb..63a382938aaa5d0ca8edb84b56c02ccb37841890 100644 --- a/redisson/src/main/java/org/redisson/command/CommandAsyncService.java +++ b/redisson/src/main/java/org/redisson/command/CommandAsyncService.java @@ -1070,12 +1070,7 @@ public class CommandAsyncService implements CommandAsyncExecutor { } private void handleReference(RPromise mainPromise, R res) { - try { - mainPromise.trySuccess((R) tryHandleReference(res)); - } catch (Exception e) { - //fall back and let other part of the code handle the type conversion. - mainPromise.trySuccess(res); - } + mainPromise.trySuccess((R) tryHandleReference(res)); } protected Object tryHandleReference(Object o) { @@ -1198,7 +1193,7 @@ public class CommandAsyncService implements CommandAsyncExecutor { } return RedissonObjectFactory.fromReference(redissonRx, (RedissonReference) res); } catch (Exception exception) { - return res; + throw new IllegalStateException(exception); } } diff --git a/redisson/src/main/java/org/redisson/liveobject/core/RedissonObjectBuilder.java b/redisson/src/main/java/org/redisson/liveobject/core/RedissonObjectBuilder.java index c555879386afe6eb076fb86d1c69955e3484a7f8..4bd973dfd8e02c7eeb72bbd6ff514df4afa48682 100644 --- a/redisson/src/main/java/org/redisson/liveobject/core/RedissonObjectBuilder.java +++ b/redisson/src/main/java/org/redisson/liveobject/core/RedissonObjectBuilder.java @@ -84,7 +84,9 @@ public class RedissonObjectBuilder { public void store(RObject ar, String fieldName, RMap liveMap) { Codec codec = ar.getCodec(); - codecProvider.registerCodec((Class) codec.getClass(), codec); + if (codec != null) { + codecProvider.registerCodec((Class) codec.getClass(), codec); + } liveMap.fastPut(fieldName, new RedissonReference(ar.getClass(), ar.getName(), codec)); } diff --git a/redisson/src/main/java/org/redisson/misc/RedissonObjectFactory.java b/redisson/src/main/java/org/redisson/misc/RedissonObjectFactory.java index a700838247957fe2641eb9352f596b9f1bd4851c..e7219369f061227624121a1d6c1ac87a292e76ab 100644 --- a/redisson/src/main/java/org/redisson/misc/RedissonObjectFactory.java +++ b/redisson/src/main/java/org/redisson/misc/RedissonObjectFactory.java @@ -171,14 +171,18 @@ public class RedissonObjectFactory { Class clazz = object.getClass().getInterfaces()[0]; RObject rObject = ((RObject) object); - config.getReferenceCodecProvider().registerCodec((Class) rObject.getCodec().getClass(), rObject.getCodec()); + if (rObject.getCodec() != null) { + config.getReferenceCodecProvider().registerCodec((Class) rObject.getCodec().getClass(), rObject.getCodec()); + } return new RedissonReference(clazz, rObject.getName(), rObject.getCodec()); } if (object instanceof RObjectReactive && !(object instanceof RLiveObject)) { Class clazz = object.getClass().getInterfaces()[0]; RObjectReactive rObject = ((RObjectReactive) object); - config.getReferenceCodecProvider().registerCodec((Class) rObject.getCodec().getClass(), rObject.getCodec()); + if (rObject.getCodec() != null) { + config.getReferenceCodecProvider().registerCodec((Class) rObject.getCodec().getClass(), rObject.getCodec()); + } return new RedissonReference(clazz, rObject.getName(), rObject.getCodec()); } diff --git a/redisson/src/test/java/org/redisson/RedissonReferenceTest.java b/redisson/src/test/java/org/redisson/RedissonReferenceTest.java index 38628334ed8f854dbcfa6a0069c066a3aa0db555..9ebf95f99d285e19f9fd53da3a90b9a9fbb01db1 100644 --- a/redisson/src/test/java/org/redisson/RedissonReferenceTest.java +++ b/redisson/src/test/java/org/redisson/RedissonReferenceTest.java @@ -2,8 +2,10 @@ package org.redisson; import java.util.Collection; import java.util.List; +import java.util.Map; import java.util.concurrent.TimeUnit; import static org.junit.Assert.*; +import static org.assertj.core.api.Assertions.*; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; @@ -19,6 +21,21 @@ import org.redisson.config.Config; */ public class RedissonReferenceTest extends BaseTest { + @Test + public void testBitSet() { + RMap data = redisson.getMap("data-00"); + RBitSet bs = redisson.getBitSet("data-01"); + bs.set(5); + bs.set(7); + data.put("a", bs); + + assertThat(data.entrySet()).hasSize(1); + for (Map.Entry entry : data.entrySet()) { + assertThat(entry.getValue().get(5)).isTrue(); + assertThat(entry.getValue().get(7)).isTrue(); + } + } + @Test public void testBasic() { RBucket b1 = redisson.getBucket("b1");