Skip to content

Commit

Permalink
ATS-12 made mode an enum
Browse files Browse the repository at this point in the history
  • Loading branch information
madness-inc committed Aug 16, 2019
1 parent a48b6c1 commit 6612f3c
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 36 deletions.
8 changes: 7 additions & 1 deletion README.adoc
Expand Up @@ -100,18 +100,24 @@ 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"/>
<!-- uses tcp, allowing to use a comma separated list of addresses -->
<!--Store className="org.appng.tomcat.session.hazelcast.HazelcastStore" mode="tcp" port="5701" instanceName="appNG" group="dev" --/>
<!--Store className="org.appng.tomcat.session.hazelcast.HazelcastStore" mode="tcp" port="5701" instanceName="appNG" group="dev"
tcpMembers="localhost:5701" /-->
<!-- client mode, allowing to use a comma separated list of addresses -->
<!-- Store className="org.appng.tomcat.session.hazelcast.HazelcastStore" mode="client" instanceName="appNG" group="dev"
addresses="localhost:5701" /-->
<-- standalone mode, for development purposes -->
<!-- Store className="org.appng.tomcat.session.hazelcast.HazelcastStore" mode="standalone" port="5701" instanceName="appNG" group="dev" /-->
</Manager>
----

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.
Expand Down
Expand Up @@ -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;
Expand All @@ -45,50 +46,37 @@
* <ul>
* <li>mapName (tomcat.sessions)<br/>
* The name of the map used to store the sessions.</li>
*
* <li>mode (multicast)<br/>
* The mode to use, one of multicast, tcp, client.</li>
*
* The mode to use, one of multicast, tcp, client, standalone.</li>
* <li>group (dev)<br/>
* The Hazelcast group to use.</li>
*
* <li>addresses (localhost:5701)<br/>
* A comma separated list of server addresses to use, only applies to 'client'
* mode.</li>
*
* A comma separated list of server addresses to use, only applies to 'client' mode.</li>
* <li>port (5701)<br/>
* The Hazelcast port to use.</li>
*
* <li>multicastGroup (224.2.2.3)<br/>
* The multicast group, only applies to 'multicast' mode.</li>
*
* <li>multicastPort (54327)<br/>
* The multicast port, only applies to 'multicast' mode.</li>
*
* <li>multicastTimeoutSeconds (2)<br/>
* The multicast timeout, only applies to 'multicast' mode.</li>
*
* <li>multicastTimeToLive (32)<br/>
* The multicast ttl, only applies to 'multicast' mode.</li>
*
* <li>tcpMembers (<i>null</i>)<br/>
* A comma separated list of members to connect to, only applies to 'tcp'
* mode.</li>
*
* A comma separated list of members to connect to, only applies to 'tcp' mode.</li>
* <li>instanceName (appNG)<br/>
* The Hazelcast instance name.</li>
* </ul>
*
* @author Matthias Müller
*
*/
public class HazelcastStore extends StoreBase {

private final Log log = Utils.getLog(HazelcastStore.class);
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;
Expand All @@ -101,51 +89,65 @@ 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);
joinConfig.getMulticastConfig().setMulticastTimeoutSeconds(multicastTimeoutSeconds);
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));
Expand Down Expand Up @@ -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) {
Expand Down
Expand Up @@ -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;

Expand All @@ -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();

Expand Down

0 comments on commit 6612f3c

Please sign in to comment.