Skip to content

Commit 0009e32

Browse files
committed
finish managed blocking
1 parent 9f215f2 commit 0009e32

File tree

1 file changed

+14
-10
lines changed

1 file changed

+14
-10
lines changed

chapter13/src/main/java/com/reactivedesignpatterns/chapter13/ManagedBlocking.java

+14-10
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import java.sql.ResultSet;
55
import java.util.LinkedList;
66
import java.util.List;
7-
import java.util.concurrent.Executor;
7+
import java.util.concurrent.ExecutorService;
88
import java.util.concurrent.LinkedBlockingDeque;
99
import java.util.concurrent.RejectedExecutionException;
1010
import 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

Comments
 (0)