Skip to content

Commit

Permalink
ATS-18 support CLASSPATH mode and managementCenterUrl
Browse files Browse the repository at this point in the history
  • Loading branch information
madness-inc committed Oct 29, 2019
1 parent 73ae6c2 commit 93a2390
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 32 deletions.
16 changes: 11 additions & 5 deletions README.adoc
@@ -1,10 +1,10 @@
image::https://www.aiticon.com/assets/images/appng_logo_760px.jpg[]

:version: 0.2.0-SNAPSHOT
:version: 0.2.2-SNAPSHOT
:mongo-version: 3.10.2
:jedis-version: 3.1.0
:pool2-version: 2.6.2
:hazelcast-version: 3.12.2
:hazelcast-version: 3.12.3

== appNG Tomcat Session
This library contains implementations of http://tomcat.apache.org/[Apache Tomcat^]s
Expand Down Expand Up @@ -97,17 +97,23 @@ Add the following into your Tomcat `context.xml` (or the context block of the `s
<!-- standard configuration, using multicast -->
<Store className="org.appng.tomcat.session.hazelcast.HazelcastStore" mode="multicast" port="5701" instanceName="appNG" group="dev"
multicastGroup="224.2.2.3" multicastPort="54327" multicastTimeoutSeconds="2" multicastTimeToLive="32"/>
multicastGroup="224.2.2.3" multicastPort="54327" multicastTimeoutSeconds="2" multicastTimeToLive="32" />
<!-- optionally, for all modes except 'classpath':
managementCenterUrl="http://localhost:8080/hazelcast-mancenter"
-->
<!-- uses a config file from the classpath -->
<!-- Store className="org.appng.tomcat.session.hazelcast.HazelcastStore" mode="classpath" configFile="hazelcast.xml" /-->
<!-- 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 -->
<!-- standalone mode, for development purposes -->
<!-- Store className="org.appng.tomcat.session.hazelcast.HazelcastStore" mode="standalone" port="5701" instanceName="appNG" group="dev" /-->
</Manager>
----
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Expand Up @@ -230,7 +230,7 @@
<dependency>
<groupId>com.hazelcast</groupId>
<artifactId>hazelcast-client</artifactId>
<version>3.12.2</version>
<version>3.12.3</version>
</dependency>
</dependencies>
</project>
Expand Up @@ -75,7 +75,7 @@ public Session findSession(String id) throws IOException {
@Override
public String getName() {
if (this.name == null) {
this.name = Utils.getContextName(getContext());
this.name = Utils.getContextName(getContext()).replace('/', '_');
}
return this.name;
}
Expand Down
Expand Up @@ -29,11 +29,13 @@

import com.hazelcast.client.HazelcastClient;
import com.hazelcast.client.config.ClientConfig;
import com.hazelcast.config.ClasspathXmlConfig;
import com.hazelcast.config.Config;
import com.hazelcast.config.GroupConfig;
import com.hazelcast.config.JoinConfig;
import com.hazelcast.config.ManagementCenterConfig;
import com.hazelcast.config.MulticastConfig;
import com.hazelcast.config.NetworkConfig;
import com.hazelcast.config.TcpIpConfig;
import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.core.IMap;
Expand Down Expand Up @@ -87,24 +89,18 @@ public class HazelcastStore extends StoreBase {
private int multicastTimeToLive = MulticastConfig.DEFAULT_MULTICAST_TTL;

private String tcpMembers;
private String managementCenterUrl;
private String instanceName = "appNG";
private String configFile = "hazelcast.xml";

public enum Mode {
MULTICAST, TCP, CLIENT, STANDALONE;
MULTICAST, TCP, CLIENT, STANDALONE, CLASSPATH;
}

@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);
Config config = getConfig();
switch (mode) {
case CLIENT:
instance = HazelcastClient.getHazelcastClientByName(instanceName);
Expand All @@ -125,29 +121,59 @@ protected void initInternal() {
return;

case TCP:
joinConfig.getTcpIpConfig().setEnabled(true);
TcpIpConfig tcpIpConfig = config.getNetworkConfig().getJoin().getTcpIpConfig();
tcpIpConfig.setEnabled(true);
if (null != tcpMembers) {
joinConfig.getTcpIpConfig().addMember(tcpMembers);
tcpIpConfig.addMember(tcpMembers);
log.info("Using TCP mode with members: " + tcpMembers);
} else {
log.warn("TCP mode is used, but tcpMembers is not set!");
}
instance = Hazelcast.getOrCreateHazelcastInstance(config);
break;

case MULTICAST:
joinConfig.getMulticastConfig().setEnabled(true);
joinConfig.getMulticastConfig().setMulticastGroup(multicastGroup);
joinConfig.getMulticastConfig().setMulticastPort(multicastPort);
joinConfig.getMulticastConfig().setMulticastTimeoutSeconds(multicastTimeoutSeconds);
joinConfig.getMulticastConfig().setMulticastTimeToLive(multicastTimeToLive);
MulticastConfig multicastConfig = config.getNetworkConfig().getJoin().getMulticastConfig();
multicastConfig.setEnabled(true);
multicastConfig.setMulticastGroup(multicastGroup);
multicastConfig.setMulticastPort(multicastPort);
multicastConfig.setMulticastTimeoutSeconds(multicastTimeoutSeconds);
multicastConfig.setMulticastTimeToLive(multicastTimeToLive);
log.info("Using MULTICAST on " + multicastGroup + ":" + multicastPort);
instance = Hazelcast.getOrCreateHazelcastInstance(config);
break;

case CLASSPATH:
config = new ClasspathXmlConfig(configFile);
instance = Hazelcast.getOrCreateHazelcastInstance(config);
log.info("Using classpath config:" + getClass().getClassLoader().getResource(configFile));
break;
default:
instance = Hazelcast.getOrCreateHazelcastInstance(config);
log.info("Using STANDALONE config");
break;
}
log.info(String.format("Using instance %s", instance));
}

private Config getConfig() {
Config config = new Config();
config.setInstanceName(instanceName);
GroupConfig groupConfig = new GroupConfig();
groupConfig.setName(group);
config.setGroupConfig(groupConfig);
config.getNetworkConfig().setPort(port);
if (null != managementCenterUrl) {
ManagementCenterConfig manCenterConfig = new ManagementCenterConfig();
config.setManagementCenterConfig(manCenterConfig);
manCenterConfig.setEnabled(true);
manCenterConfig.setUrl(managementCenterUrl);
log.info("Using management center at " + managementCenterUrl);
}
config.getNetworkConfig().getJoin().getTcpIpConfig().setEnabled(false);
config.getNetworkConfig().getJoin().getMulticastConfig().setEnabled(false);
return config;
}

@Override
protected void destroyInternal() {
log.info(String.format("Shutting down instance %s", instance));
Expand Down Expand Up @@ -183,12 +209,12 @@ public StandardSession load(String id) throws ClassNotFoundException, IOExceptio

// pessimistic lock block to prevent concurrency problems whilst finding sessions
getSessions().lock(id);
try {
getSessions().remove(id);
getSessions().set(id, data);
} finally {
getSessions().unlock(id);
}
try {
getSessions().remove(id);
getSessions().set(id, data);
} finally {
getSessions().unlock(id);
}
return session;
}
}
Expand Down Expand Up @@ -261,4 +287,20 @@ public void setInstanceName(String instanceName) {
this.instanceName = instanceName;
}

public String getManagementCenterUrl() {
return managementCenterUrl;
}

public void setManagementCenterUrl(String managementCenterUrl) {
this.managementCenterUrl = managementCenterUrl;
}

public String getConfigFile() {
return configFile;
}

public void setConfigFile(String configFile) {
this.configFile = configFile;
}

}

0 comments on commit 93a2390

Please sign in to comment.