Named Locks using Hazelcast
This module implement named locks using Hazelcast. It provides two implementations, that are distributed and rely on Hazelcast 4.x ISemaphores.
Out of the box “hazelcast” (distributed) named lock implementations are the following:
- semaphore-hazelcast implemented in org.eclipse.aether.named.hazelcast.HazelcastCPSemaphoreNamedLockFactory that uses Hazelcast backed com.hazelcast.cp.ISemaphore. Full Hazelcast member is used here.
- semaphore-hazelcast-client implemented in org.eclipse.aether.named.hazelcast.HazelcastClientCPSemaphoreNamedLockFactory that uses Hazelcast Client backed com.hazelcast.cp.ISemaphore. This implementation uses Hazelcast Client, so connection to some existing Hazelcast cluster, and its existence is a requirement.
Open Issues/Notes
- Usage from plugins has not been tested yet.
- The furnace-maven-plugin does not work this implementation because it uses ServiceLocator instead of dependency injection.
Open Issues/Notes for Maven Resolver integrators
To use this implementation within your project, depending on how you integrate, you have following options: - If you use Sisu DI, then all you need is to provide this module (and its dependencies) on classpath and you are done. - If you use Guice, you need to add this module (and its dependencies) upfront, and bind them explicitly. - If you use ServiceLocator, be aware it is deprecated, and you should move away from it. In this case, simplest is to roll your own “bootstrap” class that does pretty much same thing as ServiceLocator was, and extend it to instantiate these components as well.
Installation/Testing
- Create the directory ${maven.home}/lib/ext/hazelcast/.
- Modify ${maven.home}/bin/m2.conf by adding load ${maven.home}/lib/ext/hazelcast/*.jar right after the ${maven.conf}/logging line.
- Copy the following dependency from Maven Central to ${maven.home}/lib/ext/hazelcast/:
- Optionally configure Hazelcast instance with ${maven.conf}/hazelcast.xml or ${maven.conf}/hazelcast-client.xml (see Hazelcast documentation for possibilities, or, see test resources of this project as starter).
- Now start a multithreaded Maven build on your project and make sure NamedSyncContextFactory is being used.