1717 */
1818package org .dcache .gsi ;
1919
20- import com .google .common .cache .CacheBuilder ;
21- import com .google .common .cache .CacheLoader ;
22- import com .google .common .cache .LoadingCache ;
23- import com .google .common .util .concurrent .ListenableFuture ;
24- import com .google .common .util .concurrent .ListenableFutureTask ;
20+ import com .github .benmanes .caffeine .cache .AsyncLoadingCache ;
21+ import com .github .benmanes .caffeine .cache .Caffeine ;
2522import com .google .common .util .concurrent .ThreadFactoryBuilder ;
2623import java .security .KeyPair ;
2724import java .security .KeyPairGenerator ;
2825import java .security .NoSuchAlgorithmException ;
2926import java .security .NoSuchProviderException ;
30- import java .util .concurrent .ExecutionException ;
27+ import java .util .concurrent .CompletionException ;
3128import java .util .concurrent .Executor ;
3229import java .util .concurrent .Executors ;
3330import java .util .concurrent .TimeUnit ;
@@ -52,35 +49,18 @@ public class KeyPairCache {
5249 private static final Executor _executor = Executors .newCachedThreadPool (
5350 new ThreadFactoryBuilder ().setNameFormat ("KeyPair-generator-%d" ).setDaemon (true ).build ());
5451
55- private final LoadingCache <Integer , KeyPair > _cache ;
52+ private final AsyncLoadingCache <Integer , KeyPair > _cache ;
5653 private String algorithm = DEFAULT_ALGORITHM ;
5754 private String provider = DEFAULT_PROVIDER ;
5855
5956 public KeyPairCache (long lifetime , TimeUnit unit ) {
6057 if (lifetime > 0 ) {
61- _cache = CacheBuilder .newBuilder ()
58+ _cache = Caffeine .newBuilder ()
6259 .maximumSize (1000 )
6360 .expireAfterWrite (EXPIRE_AFTER , TimeUnit .DAYS )
6461 .refreshAfterWrite (lifetime , unit )
65- .build (
66- new CacheLoader <Integer , KeyPair >() {
67- @ Override
68- public KeyPair load (Integer keySize ) throws
69- NoSuchAlgorithmException ,
70- NoSuchProviderException {
71- return generate (keySize );
72- }
73-
74- @ Override
75- public ListenableFuture <KeyPair > reload (final
76- Integer keySize , KeyPair previous ) {
77- ListenableFutureTask <KeyPair > task =
78- ListenableFutureTask .create (() -> generate (keySize ));
79- _executor .execute (task );
80- return task ;
81- }
82- }
83- );
62+ .executor (_executor )
63+ .buildAsync (this ::generate );
8464 } else {
8565 _cache = null ;
8666 }
@@ -109,8 +89,8 @@ public KeyPair getKeyPair(int bits)
10989 return generate (bits );
11090 } else {
11191 try {
112- return _cache .get (bits );
113- } catch (ExecutionException e ) {
92+ return _cache .synchronous (). get (bits );
93+ } catch (CompletionException e ) {
11494 // propagate
11595 throw new RuntimeException ();
11696 }
0 commit comments