44import java .sql .ResultSet ;
55import java .util .LinkedList ;
66import java .util .List ;
7- import java .util .concurrent .Executor ;
7+ import java .util .concurrent .ExecutorService ;
88import java .util .concurrent .LinkedBlockingDeque ;
99import java .util .concurrent .RejectedExecutionException ;
1010import java .util .concurrent .ThreadPoolExecutor ;
@@ -45,15 +45,15 @@ public class CheckAccessResult {
4545 public final String credentials ;
4646 public final AccessRights [] rights ;
4747
48- public CheckAccessResult (String username , String credentials , AccessRights [] rights ) {
49- this .username = username ;
50- this .credentials = credentials ;
48+ public CheckAccessResult (CheckAccess ca , AccessRights [] rights ) {
49+ this .username = ca . username ;
50+ this .credentials = ca . credentials ;
5151 this .rights = rights ;
5252 }
5353 }
5454
5555 public class AccessService extends AbstractActor {
56- private Executor pool ;
56+ private ExecutorService pool ;
5757
5858 public AccessService (DataSource db , int poolSize , int queueSize ) {
5959 pool = new ThreadPoolExecutor (0 , poolSize , 60 , SECONDS , new LinkedBlockingDeque <>(queueSize ));
@@ -64,22 +64,26 @@ public AccessService(DataSource db, int poolSize, int queueSize) {
6464 try {
6565 pool .execute (() -> checkAccess (db , ca , self ));
6666 } catch (RejectedExecutionException e ) {
67- ca .replyTo .tell (new CheckAccessResult (ca . username , ca . credentials , AccessRights .EMPTY ), self );
67+ ca .replyTo .tell (new CheckAccessResult (ca , AccessRights .EMPTY ), self );
6868 }})
6969 .build ());
7070 }
7171
72+ @ Override
73+ public void postStop () {
74+ pool .shutdownNow ();
75+ }
76+
7277 private static void checkAccess (DataSource db , CheckAccess ca , ActorRef self ) {
73- try {
74- final Connection conn = db .getConnection ();
78+ try (Connection conn = db .getConnection ()) {
7579 final ResultSet result = conn .createStatement ().executeQuery ("<figure out access rights>" );
7680 final List <AccessRights > rights = new LinkedList <>();
7781 while (result .next ()) {
7882 rights .add (AccessRights .valueOf (result .getString (0 )));
7983 }
80- ca .replyTo .tell (new CheckAccessResult (ca . username , ca . credentials , rights .toArray (AccessRights .EMPTY )), self );
84+ ca .replyTo .tell (new CheckAccessResult (ca , rights .toArray (AccessRights .EMPTY )), self );
8185 } catch (Exception e ) {
82- ca .replyTo .tell (new CheckAccessResult (ca . username , ca . credentials , AccessRights .EMPTY ), self );
86+ ca .replyTo .tell (new CheckAccessResult (ca , AccessRights .EMPTY ), self );
8387 }
8488 }
8589 }
0 commit comments