20
20
import java .util .concurrent .TimeUnit ;
21
21
22
22
import org .apache .ibatis .cache .Cache ;
23
+ import org .apache .ibatis .cache .CacheDecorator ;
23
24
import org .apache .ibatis .cache .CacheException ;
24
25
25
26
/**
34
35
*
35
36
* @author Eduardo Macarron
36
37
*/
37
- public class BlockingCache implements Cache {
38
+ public class BlockingCache extends CacheDecorator {
38
39
39
40
private long timeout ;
40
- private final Cache delegate ;
41
41
private final ConcurrentHashMap <Object , CountDownLatch > locks ;
42
42
43
43
public BlockingCache (Cache delegate ) {
44
- this . delegate = delegate ;
44
+ super ( delegate ) ;
45
45
this .locks = new ConcurrentHashMap <>();
46
46
}
47
47
48
- @ Override
49
- public String getId () {
50
- return delegate .getId ();
51
- }
52
-
53
- @ Override
54
- public int getSize () {
55
- return delegate .getSize ();
56
- }
57
-
58
48
@ Override
59
49
public void putObject (Object key , Object value ) {
60
50
try {
61
- delegate .putObject (key , value );
51
+ super .putObject (key , value );
62
52
} finally {
63
53
releaseLock (key );
64
54
}
@@ -67,7 +57,7 @@ public void putObject(Object key, Object value) {
67
57
@ Override
68
58
public Object getObject (Object key ) {
69
59
acquireLock (key );
70
- Object value = delegate .getObject (key );
60
+ Object value = super .getObject (key );
71
61
if (value != null ) {
72
62
releaseLock (key );
73
63
}
@@ -81,11 +71,6 @@ public Object removeObject(Object key) {
81
71
return null ;
82
72
}
83
73
84
- @ Override
85
- public void clear () {
86
- delegate .clear ();
87
- }
88
-
89
74
private void acquireLock (Object key ) {
90
75
CountDownLatch newLatch = new CountDownLatch (1 );
91
76
while (true ) {
@@ -98,7 +83,7 @@ private void acquireLock(Object key) {
98
83
boolean acquired = latch .await (timeout , TimeUnit .MILLISECONDS );
99
84
if (!acquired ) {
100
85
throw new CacheException (
101
- "Couldn't get a lock in " + timeout + " for the key " + key + " at the cache " + delegate .getId ());
86
+ "Couldn't get a lock in " + timeout + " for the key " + key + " at the cache " + super .getId ());
102
87
}
103
88
} else {
104
89
latch .await ();
0 commit comments