1 package org.eclipse.aether.named.providers;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.concurrent.Semaphore;
23 import java.util.concurrent.TimeUnit;
24
25 import javax.inject.Named;
26 import javax.inject.Singleton;
27
28 import org.eclipse.aether.named.support.AdaptedSemaphoreNamedLock;
29 import org.eclipse.aether.named.support.NamedLockFactorySupport;
30
31
32
33
34 @Singleton
35 @Named( LocalSemaphoreNamedLockFactory.NAME )
36 public class LocalSemaphoreNamedLockFactory
37 extends NamedLockFactorySupport
38 {
39 public static final String NAME = "semaphore-local";
40
41 @Override
42 protected AdaptedSemaphoreNamedLock createLock( final String name )
43 {
44 Semaphore semaphore = new Semaphore( Integer.MAX_VALUE );
45 return new AdaptedSemaphoreNamedLock( name, this, new JVMSemaphore( semaphore ) );
46 }
47
48
49
50
51 private static final class JVMSemaphore
52 implements AdaptedSemaphoreNamedLock.AdaptedSemaphore
53 {
54 private final Semaphore semaphore;
55
56 private JVMSemaphore( final Semaphore semaphore )
57 {
58 this.semaphore = semaphore;
59 }
60
61 @Override
62 public boolean tryAcquire( final int perms, final long time, final TimeUnit unit ) throws InterruptedException
63 {
64 return semaphore.tryAcquire( perms, time, unit );
65 }
66
67 @Override
68 public void release( final int perms )
69 {
70 semaphore.release( perms );
71 }
72 }
73 }