Skip to content

Commit

Permalink
fromJSON and toJSON methods were added to Config object. #351
Browse files Browse the repository at this point in the history
  • Loading branch information
Nikita committed Jan 19, 2016
1 parent 7024986 commit 1bdcf06
Show file tree
Hide file tree
Showing 5 changed files with 193 additions and 25 deletions.
26 changes: 9 additions & 17 deletions src/main/java/org/redisson/Config.java
Expand Up @@ -15,9 +15,10 @@
*/ */
package org.redisson; package org.redisson;


import java.io.IOException;

import org.redisson.client.codec.Codec; import org.redisson.client.codec.Codec;
import org.redisson.codec.JsonJacksonCodec; import org.redisson.codec.JsonJacksonCodec;
import org.redisson.connection.ConnectionListener;


/** /**
* Redisson configuration * Redisson configuration
Expand Down Expand Up @@ -49,8 +50,6 @@ public class Config {


private boolean useLinuxNativeEpoll; private boolean useLinuxNativeEpoll;


private ConnectionListener connectionListener;

public Config() { public Config() {
} }


Expand All @@ -62,7 +61,6 @@ public Config(Config oldConf) {
oldConf.setCodec(new JsonJacksonCodec()); oldConf.setCodec(new JsonJacksonCodec());
} }


setConnectionListener(oldConf.getConnectionListener());
setThreads(oldConf.getThreads()); setThreads(oldConf.getThreads());
setCodec(oldConf.getCodec()); setCodec(oldConf.getCodec());
if (oldConf.getSingleServerConfig() != null) { if (oldConf.getSingleServerConfig() != null) {
Expand Down Expand Up @@ -337,21 +335,15 @@ public boolean isUseLinuxNativeEpoll() {
return useLinuxNativeEpoll; return useLinuxNativeEpoll;
} }


@Deprecated public static Config fromJSON(String content) throws IOException {
public ConnectionListener getConnectionListener() { ConfigSupport support = new ConfigSupport();
return connectionListener; return support.fromJSON(content);
} }


/** public String toJSON() throws IOException {
* Use {@code org.redisson.core.NodesGroup#addConnectionListener(ConnectionListener)} ConfigSupport support = new ConfigSupport();
* return support.toJSON(this);
* @param connectionListener
* @return
*/
@Deprecated
public Config setConnectionListener(ConnectionListener connectionListener) {
this.connectionListener = connectionListener;
return this;
} }



} }
105 changes: 105 additions & 0 deletions src/main/java/org/redisson/ConfigSupport.java
@@ -0,0 +1,105 @@
package org.redisson;

import java.io.IOException;
import java.net.URI;
import java.util.List;

import org.redisson.client.codec.Codec;
import org.redisson.connection.balancer.LoadBalancer;

import com.fasterxml.jackson.annotation.JsonFilter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ser.FilterProvider;
import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;

public class ConfigSupport {

@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "class")
@JsonFilter("classFilter")
public static class ClassMixIn {

}

public abstract static class SingleSeverConfigMixIn {

@JsonProperty
List<URI> address;

@JsonIgnore
abstract SingleServerConfig setAddress(String address);

@JsonIgnore
abstract URI getAddress();

@JsonIgnore
abstract void setAddress(URI address);

}

public abstract static class MasterSlaveServersConfigMixIn {

@JsonProperty
List<URI> masterAddress;

@JsonIgnore
abstract MasterSlaveServersConfig setMasterAddress(String masterAddress);

@JsonIgnore
abstract URI getMasterAddress();

@JsonIgnore
abstract void setMasterAddress(URI masterAddress);

}

@JsonIgnoreProperties("clusterConfig")
public static class ConfigMixIn {

@JsonProperty
SentinelServersConfig sentinelServersConfig;

@JsonProperty
MasterSlaveServersConfig masterSlaveServersConfig;

@JsonProperty
SingleServerConfig singleServerConfig;

@JsonProperty
ClusterServersConfig clusterServersConfig;

@JsonProperty
ElasticacheServersConfig elasticacheServersConfig;

}

ObjectMapper mapper = createMapper();

public Config fromJSON(String content) throws IOException {
return mapper.readValue(content, Config.class);
}

public String toJSON(Config config) throws IOException {
return mapper.writeValueAsString(config);
}

private ObjectMapper createMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.addMixIn(MasterSlaveServersConfig.class, MasterSlaveServersConfigMixIn.class);
mapper.addMixIn(SingleServerConfig.class, SingleSeverConfigMixIn.class);
mapper.addMixIn(Config.class, ConfigMixIn.class);
mapper.addMixIn(Codec.class, ClassMixIn.class);
mapper.addMixIn(LoadBalancer.class, ClassMixIn.class);
FilterProvider filterProvider = new SimpleFilterProvider()
.addFilter("classFilter", SimpleBeanPropertyFilter.filterOutAllExcept());
mapper.setFilterProvider(filterProvider);
mapper.setSerializationInclusion(Include.NON_NULL);
return mapper;
}

}
17 changes: 13 additions & 4 deletions src/main/java/org/redisson/MasterSlaveServersConfig.java
Expand Up @@ -16,7 +16,9 @@
package org.redisson; package org.redisson;


import java.net.URI; import java.net.URI;
import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.List;
import java.util.Set; import java.util.Set;


import org.redisson.misc.URIBuilder; import org.redisson.misc.URIBuilder;
Expand All @@ -31,7 +33,7 @@ public class MasterSlaveServersConfig extends BaseMasterSlaveServersConfig<Maste
/** /**
* Redis master server address * Redis master server address
*/ */
private URI masterAddress; private List<URI> masterAddress;


public MasterSlaveServersConfig() { public MasterSlaveServersConfig() {
} }
Expand All @@ -49,14 +51,21 @@ public MasterSlaveServersConfig() {
* @param masterAddress * @param masterAddress
*/ */
public MasterSlaveServersConfig setMasterAddress(String masterAddress) { public MasterSlaveServersConfig setMasterAddress(String masterAddress) {
this.masterAddress = URIBuilder.create(masterAddress); if (masterAddress != null) {
this.masterAddress = Collections.singletonList(URIBuilder.create(masterAddress));
}
return this; return this;
} }
public URI getMasterAddress() { public URI getMasterAddress() {
return masterAddress; if (masterAddress != null) {
return masterAddress.get(0);
}
return null;
} }
public void setMasterAddress(URI masterAddress) { public void setMasterAddress(URI masterAddress) {
this.masterAddress = masterAddress; if (masterAddress != null) {
this.masterAddress = Collections.singletonList(masterAddress);
}
} }


/** /**
Expand Down
17 changes: 13 additions & 4 deletions src/main/java/org/redisson/SingleServerConfig.java
Expand Up @@ -16,6 +16,8 @@
package org.redisson; package org.redisson;


import java.net.URI; import java.net.URI;
import java.util.Collections;
import java.util.List;


import org.redisson.misc.URIBuilder; import org.redisson.misc.URIBuilder;


Expand All @@ -25,7 +27,7 @@ public class SingleServerConfig extends BaseConfig<SingleServerConfig> {
* Redis server address * Redis server address
* *
*/ */
private URI address; private List<URI> address;


/** /**
* Minimum idle subscription connection amount * Minimum idle subscription connection amount
Expand Down Expand Up @@ -112,14 +114,21 @@ public int getSubscriptionConnectionPoolSize() {
* @param address * @param address
*/ */
public SingleServerConfig setAddress(String address) { public SingleServerConfig setAddress(String address) {
this.address = URIBuilder.create(address); if (address != null) {
this.address = Collections.singletonList(URIBuilder.create(address));
}
return this; return this;
} }
public URI getAddress() { public URI getAddress() {
return address; if (address != null) {
return address.get(0);
}
return null;
} }
void setAddress(URI address) { void setAddress(URI address) {
this.address = address; if (address != null) {
this.address = Collections.singletonList(address);
}
} }


/** /**
Expand Down
53 changes: 53 additions & 0 deletions src/test/java/org/redisson/RedissonTest.java
Expand Up @@ -4,20 +4,43 @@
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.net.URI;
import java.net.URL; import java.net.URL;
import java.util.Collections;
import java.util.Iterator; import java.util.Iterator;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeoutException;


import org.junit.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
import org.redisson.client.RedisConnectionException;
import org.redisson.client.WriteRedisConnectionException; import org.redisson.client.WriteRedisConnectionException;
import org.redisson.client.codec.Codec;
import org.redisson.codec.SerializationCodec; import org.redisson.codec.SerializationCodec;
import org.redisson.connection.ConnectionListener; import org.redisson.connection.ConnectionListener;
import org.redisson.connection.balancer.LoadBalancer;
import org.redisson.core.ClusterNode; import org.redisson.core.ClusterNode;
import org.redisson.core.Node; import org.redisson.core.Node;
import org.redisson.core.NodesGroup; import org.redisson.core.NodesGroup;
import org.redisson.misc.URIBuilder;

import com.fasterxml.jackson.annotation.JsonFilter;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.SerializableString;
import com.fasterxml.jackson.core.io.CharacterEscapes;
import com.fasterxml.jackson.core.io.SerializedString;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ser.FilterProvider;
import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;

import static org.assertj.core.api.Assertions.*; import static org.assertj.core.api.Assertions.*;


import net.jodah.concurrentunit.Waiter; import net.jodah.concurrentunit.Waiter;
Expand Down Expand Up @@ -141,6 +164,36 @@ public void testSentinel() {
Assert.assertTrue(nodes.pingAll()); Assert.assertTrue(nodes.pingAll());
} }


@Test
public void testClusterConfig() throws IOException {
Config originalConfig = new Config();
originalConfig.useClusterServers().addNodeAddress("123.123.1.23:1902", "9.3.1.0:1902");
String t = originalConfig.toJSON();
Config c = Config.fromJSON(t);
System.out.println(t);
assertThat(c.toJSON()).isEqualTo(t);
}

@Test
public void testSingleConfig() throws IOException {
RedissonClient r = Redisson.create();
String t = r.getConfig().toJSON();
Config c = Config.fromJSON(t);
System.out.println(t);
assertThat(c.toJSON()).isEqualTo(t);
}

@Test
public void testMasterSlaveConfig() throws IOException {
Config c2 = new Config();
c2.useMasterSlaveServers().setMasterAddress("123.1.1.1:1231").addSlaveAddress("82.12.47.12:1028");

String t = c2.toJSON();
Config c = Config.fromJSON(t);
System.out.println(t);
assertThat(c.toJSON()).isEqualTo(t);
}

@Test @Test
public void testCluster() { public void testCluster() {
NodesGroup<ClusterNode> nodes = redisson.getClusterNodesGroup(); NodesGroup<ClusterNode> nodes = redisson.getClusterNodesGroup();
Expand Down

0 comments on commit 1bdcf06

Please sign in to comment.