|
@@ -9,7 +9,11 @@ import javax.sql.DataSource;
|
|
|
import java.sql.Connection;
|
|
|
import java.sql.PreparedStatement;
|
|
|
import java.sql.ResultSet;
|
|
|
+import java.util.Map;
|
|
|
import java.util.Objects;
|
|
|
+import java.util.concurrent.Callable;
|
|
|
+import java.util.concurrent.ConcurrentHashMap;
|
|
|
+import java.util.concurrent.Future;
|
|
|
|
|
|
import static hello.HelloWebServer.JSON_UTF8;
|
|
|
|
|
@@ -34,26 +38,35 @@ final class UpdatesSqlHandler implements HttpHandler {
|
|
|
int queries = Helper.getQueries(exchange);
|
|
|
World[] worlds = new World[queries];
|
|
|
try (Connection connection = database.getConnection();
|
|
|
- PreparedStatement query = connection.prepareStatement(
|
|
|
+ final PreparedStatement query = connection.prepareStatement(
|
|
|
"SELECT * FROM World WHERE id = ?",
|
|
|
ResultSet.TYPE_FORWARD_ONLY,
|
|
|
ResultSet.CONCUR_READ_ONLY);
|
|
|
- PreparedStatement update = connection.prepareStatement(
|
|
|
+ final PreparedStatement update = connection.prepareStatement(
|
|
|
"UPDATE World SET randomNumber = ? WHERE id= ?")) {
|
|
|
+ Map<Integer, Future<World>> futureWorlds = new ConcurrentHashMap<>();
|
|
|
for (int i = 0; i < queries; i++) {
|
|
|
- query.setInt(1, Helper.randomWorld());
|
|
|
- World world;
|
|
|
- try (ResultSet resultSet = query.executeQuery()) {
|
|
|
- resultSet.next();
|
|
|
- world = new World(
|
|
|
- resultSet.getInt("id"),
|
|
|
- resultSet.getInt("randomNumber"));
|
|
|
- }
|
|
|
- world.randomNumber = Helper.randomWorld();
|
|
|
- update.setInt(1, world.randomNumber);
|
|
|
- update.setInt(2, world.id);
|
|
|
- update.executeUpdate();
|
|
|
- worlds[i] = world;
|
|
|
+ futureWorlds.put(i, Helper.EXECUTOR.submit(new Callable<World>() {
|
|
|
+ @Override
|
|
|
+ public World call() throws Exception {
|
|
|
+ query.setInt(1, Helper.randomWorld());
|
|
|
+ World world;
|
|
|
+ try (ResultSet resultSet = query.executeQuery()) {
|
|
|
+ resultSet.next();
|
|
|
+ world = new World(
|
|
|
+ resultSet.getInt("id"),
|
|
|
+ resultSet.getInt("randomNumber"));
|
|
|
+ }
|
|
|
+ world.randomNumber = Helper.randomWorld();
|
|
|
+ update.setInt(1, world.randomNumber);
|
|
|
+ update.setInt(2, world.id);
|
|
|
+ update.executeUpdate();
|
|
|
+ return world;
|
|
|
+ }
|
|
|
+ }));
|
|
|
+ }
|
|
|
+ for (int i = 0; i < queries; i++) {
|
|
|
+ worlds[i] = futureWorlds.get(i).get();
|
|
|
}
|
|
|
}
|
|
|
exchange.getResponseHeaders().put(
|