Named Locks using Redisson

This module implement named locks using Redisson. It provides two implementations, that are distributed and rely on Redisson distributed objects feature.

Out of the box “redisson” (distributed) named lock implementations are the following:

  • rwlock-redisson implemented in org.eclipse.aether.named.redisson.RedissonReadWriteLockNamedLockFactory that uses Redisson backed org.redisson.api.RReadWriteLock.
  • semaphore-redisson implemented in org.eclipse.aether.named.redisson.RedissonSemaphoreNamedLockFactory that uses Redisson backed org.redisson.api.RSemaphore.

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/redisson/.
  • Modify ${maven.home}/bin/m2.conf by adding load ${maven.home}/lib/ext/redisson/*.jar right after the ${maven.conf}/logging line.
  • Copy the following dependencies from Maven Central to ${maven.home}/lib/ext/redisson/:
  ├── maven-resolver-named-locks-redisson-1.8.0.jar
  ├── jackson-annotations-2.12.1.jar
  ├── jackson-core-2.12.1.jar
  ├── jackson-databind-2.12.1.jar
  ├── jackson-dataformat-yaml-2.12.1.jar
  ├── jboss-marshalling-2.0.11.Final.jar
  ├── jboss-marshalling-river-2.0.11.Final.jar
  ├── netty-buffer-4.1.65.Final.jar
  ├── netty-codec-4.1.65.Final.jar
  ├── netty-codec-dns-4.1.65.Final.jar
  ├── netty-common-4.1.65.Final.jar
  ├── netty-handler-4.1.65.Final.jar
  ├── netty-resolver-4.1.65.Final.jar
  ├── netty-resolver-dns-4.1.65.Final.jar
  ├── netty-transport-4.1.65.Final.jar
  ├── redisson-3.15.6.jar
  └── snakeyaml-1.27.jar
  • Start your Redis instance on localhost or configure a remote instance with ${maven.conf}/maven-resolver-redisson.yaml.
  • Now start a multithreaded Maven build on your project.