From 6612f3c1096ab0c9de7ee0e82acf27c935d9c14d Mon Sep 17 00:00:00 2001 From: madness-inc Date: Fri, 16 Aug 2019 13:06:37 +0200 Subject: [PATCH] ATS-12 made mode an enum --- README.adoc | 8 ++- .../session/hazelcast/HazelcastStore.java | 68 ++++++++++--------- .../session/hazelcast/HazelStoreIT.java | 8 ++- 3 files changed, 48 insertions(+), 36 deletions(-) diff --git a/README.adoc b/README.adoc index 4c63d00..1fea16f 100644 --- a/README.adoc +++ b/README.adoc @@ -100,11 +100,15 @@ Add the following into your Tomcat `context.xml` (or the context block of the `s multicastGroup="224.2.2.3" multicastPort="54327" multicastTimeoutSeconds="2" multicastTimeToLive="32"/> - + + <-- standalone mode, for development purposes --> + ---- @@ -112,6 +116,8 @@ Copy the following files into the `TOMCAT_BASE/lib` directory: * appng-tomcat-session-{version}.jar * http://repo1.maven.org/maven2/com/hazelcast/hazelcast/{hazelcast-version}/hazelcast-{hazelcast-version}.jar[hazelcast-{hazelcast-version}.jar] + +When using `client`-mode, you also need * http://repo1.maven.org/maven2/com/hazelcast/hazelcast-client/{hazelcast-version}/hazelcast-client-{hazelcast-version}.jar[hazelcast-client-{hazelcast-version}.jar] Reboot the server, and sessions are now stored in Hazelcast. diff --git a/src/main/java/org/appng/tomcat/session/hazelcast/HazelcastStore.java b/src/main/java/org/appng/tomcat/session/hazelcast/HazelcastStore.java index 238df13..ca18305 100644 --- a/src/main/java/org/appng/tomcat/session/hazelcast/HazelcastStore.java +++ b/src/main/java/org/appng/tomcat/session/hazelcast/HazelcastStore.java @@ -31,6 +31,7 @@ import com.hazelcast.client.HazelcastClient; import com.hazelcast.client.config.ClientConfig; import com.hazelcast.config.Config; +import com.hazelcast.config.GroupConfig; import com.hazelcast.config.JoinConfig; import com.hazelcast.config.MulticastConfig; import com.hazelcast.config.NetworkConfig; @@ -45,42 +46,29 @@ * * * @author Matthias Müller - * */ public class HazelcastStore extends StoreBase { @@ -88,7 +76,7 @@ public class HazelcastStore extends StoreBase { private HazelcastInstance instance; private String mapName = "tomcat.sessions"; - private String mode = "multicast"; + private Mode mode = Mode.MULTICAST; private String group = "dev"; private String addresses = "localhost:5701"; private int port = NetworkConfig.DEFAULT_PORT; @@ -101,40 +89,50 @@ public class HazelcastStore extends StoreBase { private String tcpMembers; private String instanceName = "appNG"; + public enum Mode { + MULTICAST, TCP, CLIENT, STANDALONE; + } + @Override protected void initInternal() { super.initInternal(); Config config = new Config(); config.setInstanceName(instanceName); + GroupConfig groupConfig = new GroupConfig(); + groupConfig.setName(group); + config.setGroupConfig(groupConfig); config.getNetworkConfig().setPort(port); JoinConfig joinConfig = config.getNetworkConfig().getJoin(); + joinConfig.getTcpIpConfig().setEnabled(false); + joinConfig.getMulticastConfig().setEnabled(false); switch (mode) { - case "client": - ClientConfig clientConfig = new ClientConfig(); - clientConfig.getGroupConfig().setName(group); - clientConfig.setInstanceName(instanceName); - String[] addressArr = addresses.split(","); - for (String address : addressArr) { - clientConfig.getNetworkConfig().addAddress(address.trim()); - } + case CLIENT: instance = HazelcastClient.getHazelcastClientByName(instanceName); if (null == instance) { + ClientConfig clientConfig = new ClientConfig(); + clientConfig.getGroupConfig().setName(group); + clientConfig.setInstanceName(instanceName); + String[] addressArr = addresses.split(","); + for (String address : addressArr) { + clientConfig.getNetworkConfig().addAddress(address.trim()); + } instance = HazelcastClient.newHazelcastClient(clientConfig); + log.info(String.format("Using new client %s, connecting to %s", instanceName, + clientConfig.getNetworkConfig().getAddresses())); + } else { + log.info(String.format("Using existing client %s", instanceName)); } - log.info(String.format("Using client, connecting to %s", clientConfig.getNetworkConfig().getAddresses())); return; - case "tcp": + case TCP: joinConfig.getTcpIpConfig().setEnabled(true); - joinConfig.getMulticastConfig().setEnabled(false); if (null != tcpMembers) { joinConfig.getTcpIpConfig().addMember(tcpMembers); } instance = Hazelcast.getOrCreateHazelcastInstance(config); break; - default: - joinConfig.getTcpIpConfig().setEnabled(false); + case MULTICAST: joinConfig.getMulticastConfig().setEnabled(true); joinConfig.getMulticastConfig().setMulticastGroup(multicastGroup); joinConfig.getMulticastConfig().setMulticastPort(multicastPort); @@ -142,10 +140,14 @@ protected void initInternal() { joinConfig.getMulticastConfig().setMulticastTimeToLive(multicastTimeToLive); instance = Hazelcast.getOrCreateHazelcastInstance(config); break; + + default: + instance = Hazelcast.getOrCreateHazelcastInstance(config); + break; } log.info(String.format("Using instance %s", instance)); } - + @Override protected void destroyInternal() { log.info(String.format("Shutting down instance %s", instance)); @@ -209,7 +211,9 @@ public void setMapName(String mapName) { } public void setMode(String mode) { - this.mode = mode; + if (null != mode) { + this.mode = Mode.valueOf(mode.trim().toUpperCase()); + } } public void setGroup(String group) { diff --git a/src/test/java/org/appng/tomcat/session/hazelcast/HazelStoreIT.java b/src/test/java/org/appng/tomcat/session/hazelcast/HazelStoreIT.java index ca79f39..70164a2 100644 --- a/src/test/java/org/appng/tomcat/session/hazelcast/HazelStoreIT.java +++ b/src/test/java/org/appng/tomcat/session/hazelcast/HazelStoreIT.java @@ -21,6 +21,7 @@ import org.apache.catalina.core.StandardService; import org.apache.catalina.loader.WebappLoader; import org.apache.catalina.session.StandardSession; +import org.appng.tomcat.session.hazelcast.HazelcastStore.Mode; import org.junit.Assert; import org.junit.Test; @@ -43,12 +44,13 @@ public ClassLoader getClassLoader() { host.setParent(engine); context.setParent(host); loader.setContext(context); - + HazelcastPersistentManager manager = new HazelcastPersistentManager(); manager.setContext(context); - + HazelcastStore store = new HazelcastStore(); - store.setManager(manager); + store.setMode(Mode.STANDALONE.name()); + store.setManager(manager); manager.setStore(store); store.start();