diff --git a/pom.xml b/pom.xml
index 3673b88..6069bb4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -60,6 +60,11 @@
4.12
test
+
+ io.vertx
+ vertx-rx-java
+ 3.4.0
+
io.vertx
vertx-unit
@@ -95,14 +100,14 @@
+ implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
io.vertx.core.Launcher
${main.verticle}
+ implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
META-INF/services/io.vertx.core.spi.VerticleFactory
diff --git a/src/main/java/com/tidyjava/example/ActivityModule.java b/src/main/java/com/tidyjava/example/ActivityModule.java
index e840c0e..cdc4c8d 100644
--- a/src/main/java/com/tidyjava/example/ActivityModule.java
+++ b/src/main/java/com/tidyjava/example/ActivityModule.java
@@ -5,9 +5,9 @@
import com.tidyjava.example.gateways.ActivityGatewayImpl;
import com.tidyjava.example.usecases.listActivities.ListActivitiesInputBoundary;
import com.tidyjava.example.usecases.listActivities.ListActivitiesUseCase;
-import io.vertx.core.Vertx;
import io.vertx.core.json.JsonObject;
-import io.vertx.ext.jdbc.JDBCClient;
+import io.vertx.rxjava.core.Vertx;
+import io.vertx.rxjava.ext.jdbc.JDBCClient;
public class ActivityModule extends AbstractModule {
private final Vertx vertx;
diff --git a/src/main/java/com/tidyjava/example/MainVerticle.java b/src/main/java/com/tidyjava/example/MainVerticle.java
index 716d220..9bf5f7e 100644
--- a/src/main/java/com/tidyjava/example/MainVerticle.java
+++ b/src/main/java/com/tidyjava/example/MainVerticle.java
@@ -5,18 +5,22 @@
import com.tidyjava.example.usecases.listActivities.ListActivitiesInputBoundary;
import com.tidyjava.example.usecases.listActivities.ListActivitiesUseCase;
import com.tidyjava.example.usecases.listActivities.ListActivitiesView;
-import io.vertx.core.AbstractVerticle;
-import io.vertx.ext.jdbc.JDBCClient;
-import io.vertx.ext.sql.SQLConnection;
-import io.vertx.ext.web.Router;
+import io.vertx.core.Future;
+import io.vertx.rxjava.core.AbstractVerticle;
+import io.vertx.rxjava.ext.jdbc.JDBCClient;
+import io.vertx.rxjava.ext.sql.SQLConnection;
+import io.vertx.rxjava.ext.web.Router;
+import rx.Single;
public class MainVerticle extends AbstractVerticle {
@Override
- public void start() {
- initDatabase();
-
+ public void start(Future startFuture) throws Exception {
+ initDatabase().subscribe(c -> {
+ startFuture.complete();
+ }, startFuture::fail);
Router router = Router.router(vertx);
+
Injector injector = Guice.createInjector(new ActivityModule(vertx, config()));
ListActivitiesInputBoundary listActivitiesUseCase = injector.getInstance(ListActivitiesUseCase.class);
@@ -26,33 +30,14 @@ public void start() {
});
vertx.createHttpServer()
- .requestHandler(router::accept)
- .listen(8080);
+ .requestHandler(router::accept)
+ .listen(8080);
}
- private void initDatabase() {
+ private Single initDatabase() {
JDBCClient client = JDBCClient.createShared(vertx, config());
-
- client.getConnection(res -> {
- if (res.succeeded()) {
- SQLConnection connection = res.result();
- connection.update("CREATE TABLE ACTIVITIES(ID VARCHAR(255) PRIMARY KEY, NAME VARCHAR(255));", upres -> {
- if (upres.succeeded()) {
- System.out.println("Success 1!");
- } else {
- System.out.println("Almost 1!");
- }
- });
- connection.update("INSERT INTO ACTIVITIES(id, name) VALUES ('id1', 'name1');", upres -> {
- if (upres.succeeded()) {
- System.out.println("Success 2!");
- } else {
- System.out.println("Almost 2!");
- }
- });
- } else {
- System.out.println("Holy Moly!");
- }
- });
+ return client.rxGetConnection()
+ .flatMap(connection -> connection.rxUpdate("CREATE TABLE ACTIVITIES(ID VARCHAR(255) PRIMARY KEY, NAME VARCHAR(255));").map(r -> connection))
+ .flatMap(connection -> connection.rxUpdate("INSERT INTO ACTIVITIES(id, name) VALUES ('id1', 'name1');").map(r -> connection));
}
}
diff --git a/src/main/java/com/tidyjava/example/gateways/ActivityGateway.java b/src/main/java/com/tidyjava/example/gateways/ActivityGateway.java
index 642db5f..1a701d9 100644
--- a/src/main/java/com/tidyjava/example/gateways/ActivityGateway.java
+++ b/src/main/java/com/tidyjava/example/gateways/ActivityGateway.java
@@ -1,10 +1,12 @@
package com.tidyjava.example.gateways;
+import com.sun.xml.internal.bind.v2.runtime.unmarshaller.XsiNilLoader;
import com.tidyjava.example.callback.Callback;
import com.tidyjava.example.entities.Activity;
+import rx.Single;
import java.util.List;
public interface ActivityGateway {
- void findAll(Callback> callback);
+ Single> findAll();
}
diff --git a/src/main/java/com/tidyjava/example/gateways/ActivityGatewayImpl.java b/src/main/java/com/tidyjava/example/gateways/ActivityGatewayImpl.java
index d4e8e8c..4eea3fa 100644
--- a/src/main/java/com/tidyjava/example/gateways/ActivityGatewayImpl.java
+++ b/src/main/java/com/tidyjava/example/gateways/ActivityGatewayImpl.java
@@ -1,14 +1,12 @@
package com.tidyjava.example.gateways;
-import com.tidyjava.example.callback.Callback;
import com.tidyjava.example.entities.Activity;
import io.vertx.core.json.JsonObject;
-import io.vertx.ext.jdbc.JDBCClient;
-import io.vertx.ext.sql.SQLConnection;
+import io.vertx.rxjava.ext.jdbc.JDBCClient;
+import rx.Single;
import javax.inject.Inject;
import java.util.List;
-import java.util.function.Consumer;
import java.util.stream.Collectors;
public class ActivityGatewayImpl implements ActivityGateway {
@@ -20,32 +18,14 @@ public ActivityGatewayImpl(JDBCClient jdbcClient) {
}
@Override
- public void findAll(Callback> callback) {
- getConnection(connection -> connection.query("SELECT * FROM Activities;", asyncRs -> {
- if (asyncRs.succeeded()) {
- List activities = asyncRs.result()
- .getRows()
- .stream()
- .map(this::toActivity)
- .collect(Collectors.toList());
-
- callback.success(activities);
- } else {
- callback.failure(asyncRs.cause());
- }
- }), callback::failure);
- }
-
- private void getConnection(Consumer sqlConnectionConsumer, Consumer onFailure) {
- jdbcClient.getConnection(asyncConn -> {
- if (asyncConn.succeeded()) {
- SQLConnection connection = asyncConn.result();
- sqlConnectionConsumer.accept(connection);
- connection.close();
- } else {
- onFailure.accept(asyncConn.cause());
- }
- });
+ public Single> findAll() {
+ return jdbcClient.rxGetConnection()
+ .flatMap(connection -> connection.rxQuery("SELECT * FROM Activities;"))
+ .map(result -> result
+ .getRows()
+ .stream()
+ .map(this::toActivity)
+ .collect(Collectors.toList()));
}
private Activity toActivity(JsonObject row) {
diff --git a/src/main/java/com/tidyjava/example/usecases/listActivities/ListActivitiesUseCase.java b/src/main/java/com/tidyjava/example/usecases/listActivities/ListActivitiesUseCase.java
index 09f3f66..be30dab 100644
--- a/src/main/java/com/tidyjava/example/usecases/listActivities/ListActivitiesUseCase.java
+++ b/src/main/java/com/tidyjava/example/usecases/listActivities/ListActivitiesUseCase.java
@@ -1,6 +1,5 @@
package com.tidyjava.example.usecases.listActivities;
-import com.tidyjava.example.callback.Callback;
import com.tidyjava.example.entities.Activity;
import com.tidyjava.example.gateways.ActivityGateway;
@@ -18,16 +17,17 @@ public ListActivitiesUseCase(ActivityGateway activityGateway) {
@Override
public void listActivities(ListActivitiesOutputBoundary presenter) {
- activityGateway.findAll(Callback.of(
- activities -> presenter.success(toResponseModel(activities)),
- presenter::failure));
+ activityGateway
+ .findAll()
+ .map(this::toResponseModel)
+ .subscribe(presenter::success, presenter::failure);
}
private List toResponseModel(List activities) {
return activities
- .stream()
- .map(Activity::getName)
- .map(ActivityDetails::new)
- .collect(Collectors.toList());
+ .stream()
+ .map(Activity::getName)
+ .map(ActivityDetails::new)
+ .collect(Collectors.toList());
}
}
diff --git a/src/main/java/com/tidyjava/example/usecases/listActivities/ListActivitiesView.java b/src/main/java/com/tidyjava/example/usecases/listActivities/ListActivitiesView.java
index b9f5f6c..ada1688 100644
--- a/src/main/java/com/tidyjava/example/usecases/listActivities/ListActivitiesView.java
+++ b/src/main/java/com/tidyjava/example/usecases/listActivities/ListActivitiesView.java
@@ -1,7 +1,7 @@
package com.tidyjava.example.usecases.listActivities;
-import io.vertx.ext.web.RoutingContext;
-import io.vertx.ext.web.templ.FreeMarkerTemplateEngine;
+import io.vertx.rxjava.ext.web.RoutingContext;
+import io.vertx.rxjava.ext.web.templ.FreeMarkerTemplateEngine;
import java.util.List;
diff --git a/src/test/java/com/tidyjava/example/MainVerticleTest.java b/src/test/java/com/tidyjava/example/MainVerticleTest.java
index f18ab98..f998875 100644
--- a/src/test/java/com/tidyjava/example/MainVerticleTest.java
+++ b/src/test/java/com/tidyjava/example/MainVerticleTest.java
@@ -1,6 +1,8 @@
package com.tidyjava.example;
+import io.vertx.core.DeploymentOptions;
import io.vertx.core.Vertx;
+import io.vertx.core.json.JsonObject;
import io.vertx.ext.unit.Async;
import io.vertx.ext.unit.TestContext;
import io.vertx.ext.unit.junit.VertxUnitRunner;
@@ -16,8 +18,11 @@ public class MainVerticleTest {
@Before
public void setUp(TestContext tc) {
+ JsonObject config = new JsonObject();
+ config.put("url", "jdbc:h2:mem:test");
+ config.put("driver_class", "org.h2.Driver");
vertx = Vertx.vertx();
- vertx.deployVerticle(MainVerticle.class.getName(), tc.asyncAssertSuccess());
+ vertx.deployVerticle(MainVerticle.class.getName(), new DeploymentOptions().setConfig(config), tc.asyncAssertSuccess());
}
@After
@@ -37,4 +42,4 @@ public void testThatTheServerIsStarted(TestContext tc) {
});
}
-}
\ No newline at end of file
+}