After fooling around with other methods, we finally accepted the advice I got on the Wicket IRC channel and used Terracotta to cluster our Wicket-based apps running under Jetty. It turned out to be straightforward to implement. The first thing to do was to add the Terracotta dependencies to our pom.xml. [sourcecode language=”xml”] org.terracotta.session terracotta-session 1.1.1 org.terracotta terracotta-toolkit-1.1-runtime 2.0.0 [/sourcecode] Then you just need to add a Terracotta filter to the jetty WebAppContext as follows: [sourcecode language=”java”] FilterHolder tcFilterHolder = new FilterHolder(TerracottaJetty61xSessionFilter.class); tcFilterHolder.setInitParameter(“tcConfigUrl”, “terracotta:9510,terracotta2:9510”); context.addFilter(tcFilterHolder, “/*”, Handler.ALL); [/sourcecode] That’s it. Terracotta will cluster the session (in the example we’re using two terracotta servers called “terracotta” and “terracotta2” – a main server and a standby). We’re using a HAProxy load-balancer with[…]

Hazelcast (hazelcast.com) provides an easy way to implement distributed locking to allow your applications to run multiple, fault-tolerant instances without worrying about issues related concurrent access to shared resources (like files, databases or whatever). [sourcecode language=”java”] try { java.util.concurrent.locks.Lock lock = Hazelcast.getLock(“mylock”); while (true) { lock.lock(); try { // do some work involving access to shared resources } finally { lock.unlock(); } } } finally { Hazelcast.shutdown(); } [/sourcecode] We have an SMS server which retrieved mail messages from a POP3 mailbox, entered them to a database and then delivered via the Clickatell messaging gateway. Making it run multiple instances concurrently would have been a headache since it would involve various issues relating to transactions across the POP3 and the[…]