From 5d1bc3c6ec48eefc53ef33d11a468b37b21145f3 Mon Sep 17 00:00:00 2001 From: Tim Yates Date: Sun, 9 Jun 2013 20:09:36 +0100 Subject: [PATCH 1/7] Up to beta5 and newer c3p0 --- gradle.properties | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle.properties b/gradle.properties index 2b93f06..7b6db1b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ modowner=com.bloidonia modname=mod-jdbc-persistor # Your module version -version=2.0.0-beta2 +version=2.0.0-beta5 # The test timeout in seconds testtimeout=300 @@ -26,7 +26,7 @@ groovyVersion=2.1.3 gradleVersion=1.6 # The version of Vert.x -vertxVersion=2.0.0-beta2 +vertxVersion=2.0.0-beta5 # The version of Vert.x test tools toolsVersion=2.0.0-beta1 @@ -34,7 +34,7 @@ toolsVersion=2.0.0-beta1 # The version of JUnit junitVersion=4.10 -c3p0Version=0.9.5-pre2 +c3p0Version=0.9.5-pre3 dbutilsVersion=1.5 hsqldbVersion=2.2.9 metricsVersion=3.0.0-BETA1 From 98c7df48d1946fa43c862707ae09bad3e0564a22 Mon Sep 17 00:00:00 2001 From: Tim Yates Date: Sun, 9 Jun 2013 20:10:00 +0100 Subject: [PATCH 2/7] Fixed JS require statements --- .../resources/integration_tests/javascript/test_client.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/test/resources/integration_tests/javascript/test_client.js b/src/test/resources/integration_tests/javascript/test_client.js index ab84138..ec81086 100644 --- a/src/test/resources/integration_tests/javascript/test_client.js +++ b/src/test/resources/integration_tests/javascript/test_client.js @@ -14,13 +14,12 @@ * limitations under the License. */ -var container = require( "container" ) ; +var container = require( "vertx/container" ) ; +var eb = require( "vertx/event_bus" ) ; var vertx = require( "vertx" ) ; var vertxTests = require( "vertx_tests" ) ; var vassert = require( "vertx_assert" ) ; -var eb = vertx.eventBus; - var script = this ; var persistorConfig = { address: 'test.persistor', url: 'jdbc:hsqldb:mem:testdb?shutdown=true' } java.lang.System.out.println( persistorConfig.url ) ; From a85f338f7741b70ffd13195d2690ee6d42a0b964 Mon Sep 17 00:00:00 2001 From: Tim Yates Date: Tue, 11 Jun 2013 20:52:21 +0100 Subject: [PATCH 3/7] Added pom name --- build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/build.gradle b/build.gradle index c506520..f200162 100644 --- a/build.gradle +++ b/build.gradle @@ -68,6 +68,7 @@ Please edit the details below. */ def configurePom( def pom ) { pom.project { + name 'mod-jdbc-persistor' description 'JDBC Persistor Module for Vert.x' inceptionYear '2012' packaging 'zip' From 62a8c3a2d119fcd076b5bba3e5bfac466b823d38 Mon Sep 17 00:00:00 2001 From: Tim Yates Date: Tue, 11 Jun 2013 20:52:45 +0100 Subject: [PATCH 4/7] Added extra info to mod.json for the module repo --- src/main/resources/mod.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/resources/mod.json b/src/main/resources/mod.json index d1d66b3..c53de15 100644 --- a/src/main/resources/mod.json +++ b/src/main/resources/mod.json @@ -1,5 +1,11 @@ { "main": "com.bloidonia.vertx.mods.JdbcProcessor", "multi-threaded": true, - "worker": true + "worker": true, + + "description":"JDBC persistor module for Vert.x", + "licenses": ["The Apache Software License Version 2.0"], + "author": "Tim Yates", + "keywords": ["jdbc", "database", "databases", "persistence", "json", "sql"], + "homepage": "https://github.com/timyates/mod-jdbc-persistor" } \ No newline at end of file From f9ff44540f1a9c7f7f4914cce27c4e0372d585a2 Mon Sep 17 00:00:00 2001 From: Tim Yates Date: Wed, 12 Jun 2013 22:47:21 +0100 Subject: [PATCH 5/7] Initial commit of an Rx based test --- build.gradle | 2 + gradle.properties | 3 + .../mods/integration/JavaBasedRxTest.java | 117 ++++++++++++++++++ 3 files changed, 122 insertions(+) create mode 100644 src/test/java/com/bloidonia/vertx/mods/integration/JavaBasedRxTest.java diff --git a/build.gradle b/build.gradle index f200162..5195ba6 100644 --- a/build.gradle +++ b/build.gradle @@ -52,6 +52,8 @@ dependencies { testCompile( "io.vertx:testtools:$toolsVersion" ) { transitive = false } + provided "org.codehaus.groovy:groovy-all:$groovyVersion" + testCompile "io.vertx:mod-rxjava:$rxVersion" } test { diff --git a/gradle.properties b/gradle.properties index 7b6db1b..1694b22 100644 --- a/gradle.properties +++ b/gradle.properties @@ -38,3 +38,6 @@ c3p0Version=0.9.5-pre3 dbutilsVersion=1.5 hsqldbVersion=2.2.9 metricsVersion=3.0.0-BETA1 + +rxVersion=1.0.0-beta1-SNAPSHOT +groovyVersion=2.1.4 \ No newline at end of file diff --git a/src/test/java/com/bloidonia/vertx/mods/integration/JavaBasedRxTest.java b/src/test/java/com/bloidonia/vertx/mods/integration/JavaBasedRxTest.java new file mode 100644 index 0000000..58228f2 --- /dev/null +++ b/src/test/java/com/bloidonia/vertx/mods/integration/JavaBasedRxTest.java @@ -0,0 +1,117 @@ +package com.bloidonia.vertx.mods.integration ; + +import io.vertx.rxcore.java.eventbus.RxEventBus ; +import io.vertx.rxcore.java.eventbus.RxMessage ; +import org.junit.Test ; +import org.vertx.java.core.AsyncResult ; +import org.vertx.java.core.AsyncResultHandler ; +import org.vertx.java.core.json.JsonObject ; +import org.vertx.java.core.json.JsonArray ; +import java.util.ArrayList ; +import org.vertx.testtools.TestVerticle ; +import rx.Observable ; +import rx.util.functions.Action1 ; +import rx.util.functions.Func1 ; +import rx.util.functions.Func2 ; + +import static org.vertx.testtools.VertxAssert.* ; + +public class JavaBasedRxTest extends TestVerticle { + + private RxEventBus rxEventBus ; + + private void appReady() { + super.start() ; + } + + public void start() { + rxEventBus = new RxEventBus( vertx.eventBus() ) ; + JsonObject config = new JsonObject() {{ + putString( "address", "test.persistor" ) ; + putString( "url", "jdbc:hsqldb:mem:testdb?shutdown=true" ) ; + }} ; + + container.deployModule(System.getProperty("vertx.modulename"), config, 1, new AsyncResultHandler() { + @Override + public void handle(AsyncResult event1) { + appReady() ; + } + } ) ; + } + + + @Test + public void testCreateInsertSelectAndDrop() { + // Last subscription in the chain; drop the table + final Action1> dropSubscription = new Action1>() { + @Override + public void call( RxMessage message ) { + assertEquals( message.body().getString( "status" ), "ok" ) ; + testComplete() ; + } + } ; + + // Thirdly we select the data from the table + final Action1> selectSubscription = new Action1>() { + @Override + public void call( RxMessage message ) { + JsonArray result = message.body().getArray( "result" ) ; + assertEquals( ((JsonObject)result.get( 0 )).getNumber( "AGE" ), 29 ) ; + assertEquals( ((JsonObject)result.get( 1 )).getNumber( "AGE" ), 42 ) ; + assertEquals( ((JsonObject)result.get( 2 )).getNumber( "AGE" ), 65 ) ; + + final JsonObject dropMsg = new JsonObject() {{ + putString( "action", "execute" ) ; + putString( "stmt", "DROP TABLE test" ) ; + }} ; + rxEventBus.send( "test.persistor", dropMsg ).subscribe( dropSubscription ) ; + } + } ; + + // Secondly we insert some data + final Action1> insertSubscription = new Action1>() { + @Override + public void call( RxMessage message ) { + JsonArray result = message.body().getArray( "result" ) ; + assertEquals( ((JsonObject)result.get( 0 )).getNumber( "ID" ), 1 ) ; + assertEquals( ((JsonObject)result.get( 1 )).getNumber( "ID" ), 2 ) ; + assertEquals( ((JsonObject)result.get( 2 )).getNumber( "ID" ), 3 ) ; + + final JsonObject selectMsg = new JsonObject() {{ + putString( "action", "select" ) ; + putString( "stmt", "SELECT * FROM test ORDER BY age ASC" ) ; + }} ; + rxEventBus.send( "test.persistor", selectMsg ).subscribe( selectSubscription ) ; + } + } ; + + // Initially, we create the table + final Action1> createSubscription = new Action1>() { + @Override + public void call( RxMessage message ) { + assertEquals( message.body().getString( "status" ), "ok" ) ; + + final JsonArray insertValues = new JsonArray( new ArrayList() {{ + add( new ArrayList() {{ add( "tim" ) ; add( 65 ) ; }} ) ; + add( new ArrayList() {{ add( "dave" ) ; add( 29 ) ; }} ) ; + add( new ArrayList() {{ add( "mike" ) ; add( 42 ) ; }} ) ; + }} ) ; + final JsonObject insertMsg = new JsonObject() {{ + putString( "action", "insert" ) ; + putString( "stmt", "INSERT INTO test ( name, age ) VALUES ( ?, ? )" ) ; + putArray( "values", insertValues ) ; + }} ; + rxEventBus.send( "test.persistor", insertMsg ).subscribe( insertSubscription ) ; + } + } ; + + // Kick off the chain, and subscribe + final JsonObject createMsg = new JsonObject() {{ + putString( "action", "execute" ) ; + putString( "stmt", "CREATE TABLE IF NOT EXISTS test ( id INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1 INCREMENT BY 1) NOT NULL, name VARCHAR(80), age INTEGER, CONSTRAINT testid PRIMARY KEY ( id ) )" ) ; + }} ; + + final Observable> create = rxEventBus.send( "test.persistor", createMsg ) ; + create.subscribe( createSubscription ) ; + } +} \ No newline at end of file From 342be908983c95e33a887614021a7913f16092ad Mon Sep 17 00:00:00 2001 From: Tim Yates Date: Thu, 13 Jun 2013 09:46:17 +0100 Subject: [PATCH 6/7] Added MapMany Rx test --- .../mods/integration/JavaBasedRxTest.java | 86 ++++++++++++++----- 1 file changed, 64 insertions(+), 22 deletions(-) diff --git a/src/test/java/com/bloidonia/vertx/mods/integration/JavaBasedRxTest.java b/src/test/java/com/bloidonia/vertx/mods/integration/JavaBasedRxTest.java index 58228f2..cddcc62 100644 --- a/src/test/java/com/bloidonia/vertx/mods/integration/JavaBasedRxTest.java +++ b/src/test/java/com/bloidonia/vertx/mods/integration/JavaBasedRxTest.java @@ -20,6 +20,8 @@ public class JavaBasedRxTest extends TestVerticle { private RxEventBus rxEventBus ; + private JsonObject createMsg, insertMsg, selectMsg, dropMsg ; + private void appReady() { super.start() ; } @@ -34,12 +36,73 @@ public void start() { container.deployModule(System.getProperty("vertx.modulename"), config, 1, new AsyncResultHandler() { @Override public void handle(AsyncResult event1) { + createMsg = new JsonObject() {{ + putString( "action", "execute" ) ; + putString( "stmt", "CREATE TABLE IF NOT EXISTS test ( id INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1 INCREMENT BY 1) NOT NULL, name VARCHAR(80), age INTEGER, CONSTRAINT testid PRIMARY KEY ( id ) )" ) ; + }} ; + insertMsg = new JsonObject() {{ + putString( "action", "insert" ) ; + putString( "stmt", "INSERT INTO test ( name, age ) VALUES ( ?, ? )" ) ; + putArray( "values", new JsonArray( new ArrayList() {{ + add( new ArrayList() {{ add( "tim" ) ; add( 65 ) ; }} ) ; + add( new ArrayList() {{ add( "dave" ) ; add( 29 ) ; }} ) ; + add( new ArrayList() {{ add( "mike" ) ; add( 42 ) ; }} ) ; + }} ) ) ; + }} ; + selectMsg = new JsonObject() {{ + putString( "action", "select" ) ; + putString( "stmt", "SELECT * FROM test ORDER BY age ASC" ) ; + }} ; + dropMsg = new JsonObject() {{ + putString( "action", "execute" ) ; + putString( "stmt", "DROP TABLE test" ) ; + }} ; appReady() ; } } ) ; } - + @Test + public void testCreateInsertSelectAndDropMapMany() { + rxEventBus.send( "test.persistor", createMsg ) + .mapMany( new Func1, Observable>>() { + @Override + public Observable> call(RxMessage message) { + assertEquals( message.body().getString( "status" ), "ok" ) ; + return rxEventBus.send( "test.persistor", insertMsg ) ; + } + } ) + .mapMany( new Func1, Observable>>() { + @Override + public Observable> call(RxMessage message) { + assertEquals( message.body().getString( "status" ), "ok" ) ; + JsonArray result = message.body().getArray( "result" ) ; + assertEquals( ((JsonObject)result.get( 0 )).getNumber( "ID" ), 1 ) ; + assertEquals( ((JsonObject)result.get( 1 )).getNumber( "ID" ), 2 ) ; + assertEquals( ((JsonObject)result.get( 2 )).getNumber( "ID" ), 3 ) ; + return rxEventBus.send( "test.persistor", selectMsg ) ; + } + } ) + .mapMany( new Func1, Observable>>() { + @Override + public Observable> call(RxMessage message) { + assertEquals( message.body().getString( "status" ), "ok" ) ; + JsonArray result = message.body().getArray( "result" ) ; + assertEquals( ((JsonObject)result.get( 0 )).getNumber( "AGE" ), 29 ) ; + assertEquals( ((JsonObject)result.get( 1 )).getNumber( "AGE" ), 42 ) ; + assertEquals( ((JsonObject)result.get( 2 )).getNumber( "AGE" ), 65 ) ; + return rxEventBus.send( "test.persistor", dropMsg ) ; + } + } ) + .subscribe( new Action1>() { + @Override + public void call( RxMessage message ) { + assertEquals( message.body().getString( "status" ), "ok" ) ; + testComplete() ; + } + } ) ; + } + @Test public void testCreateInsertSelectAndDrop() { // Last subscription in the chain; drop the table @@ -59,11 +122,6 @@ public void call( RxMessage message ) { assertEquals( ((JsonObject)result.get( 0 )).getNumber( "AGE" ), 29 ) ; assertEquals( ((JsonObject)result.get( 1 )).getNumber( "AGE" ), 42 ) ; assertEquals( ((JsonObject)result.get( 2 )).getNumber( "AGE" ), 65 ) ; - - final JsonObject dropMsg = new JsonObject() {{ - putString( "action", "execute" ) ; - putString( "stmt", "DROP TABLE test" ) ; - }} ; rxEventBus.send( "test.persistor", dropMsg ).subscribe( dropSubscription ) ; } } ; @@ -76,11 +134,6 @@ public void call( RxMessage message ) { assertEquals( ((JsonObject)result.get( 0 )).getNumber( "ID" ), 1 ) ; assertEquals( ((JsonObject)result.get( 1 )).getNumber( "ID" ), 2 ) ; assertEquals( ((JsonObject)result.get( 2 )).getNumber( "ID" ), 3 ) ; - - final JsonObject selectMsg = new JsonObject() {{ - putString( "action", "select" ) ; - putString( "stmt", "SELECT * FROM test ORDER BY age ASC" ) ; - }} ; rxEventBus.send( "test.persistor", selectMsg ).subscribe( selectSubscription ) ; } } ; @@ -90,17 +143,6 @@ public void call( RxMessage message ) { @Override public void call( RxMessage message ) { assertEquals( message.body().getString( "status" ), "ok" ) ; - - final JsonArray insertValues = new JsonArray( new ArrayList() {{ - add( new ArrayList() {{ add( "tim" ) ; add( 65 ) ; }} ) ; - add( new ArrayList() {{ add( "dave" ) ; add( 29 ) ; }} ) ; - add( new ArrayList() {{ add( "mike" ) ; add( 42 ) ; }} ) ; - }} ) ; - final JsonObject insertMsg = new JsonObject() {{ - putString( "action", "insert" ) ; - putString( "stmt", "INSERT INTO test ( name, age ) VALUES ( ?, ? )" ) ; - putArray( "values", insertValues ) ; - }} ; rxEventBus.send( "test.persistor", insertMsg ).subscribe( insertSubscription ) ; } } ; From a142205f856d0944793400701ef747318167a876 Mon Sep 17 00:00:00 2001 From: Tim Yates Date: Thu, 13 Jun 2013 09:47:25 +0100 Subject: [PATCH 7/7] Clean up imports --- .../bloidonia/vertx/mods/integration/JavaBasedRxTest.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/bloidonia/vertx/mods/integration/JavaBasedRxTest.java b/src/test/java/com/bloidonia/vertx/mods/integration/JavaBasedRxTest.java index cddcc62..6ee23a8 100644 --- a/src/test/java/com/bloidonia/vertx/mods/integration/JavaBasedRxTest.java +++ b/src/test/java/com/bloidonia/vertx/mods/integration/JavaBasedRxTest.java @@ -2,17 +2,20 @@ import io.vertx.rxcore.java.eventbus.RxEventBus ; import io.vertx.rxcore.java.eventbus.RxMessage ; + +import java.util.ArrayList ; + import org.junit.Test ; + import org.vertx.java.core.AsyncResult ; import org.vertx.java.core.AsyncResultHandler ; import org.vertx.java.core.json.JsonObject ; import org.vertx.java.core.json.JsonArray ; -import java.util.ArrayList ; import org.vertx.testtools.TestVerticle ; + import rx.Observable ; import rx.util.functions.Action1 ; import rx.util.functions.Func1 ; -import rx.util.functions.Func2 ; import static org.vertx.testtools.VertxAssert.* ;