diff --git a/pom.xml b/pom.xml
index 57662b90..4a250d73 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,8 +18,8 @@
- 2.2.8
- 2.2.8
+ 2.4.1
+ 2.4.1
2.0.0.BUILD-SNAPSHOT
diff --git a/src/integration/java/org/springframework/data/couchbase/core/CouchbaseTemplateViewListener.java b/src/integration/java/org/springframework/data/couchbase/core/CouchbaseTemplateQueryListener.java
similarity index 88%
rename from src/integration/java/org/springframework/data/couchbase/core/CouchbaseTemplateViewListener.java
rename to src/integration/java/org/springframework/data/couchbase/core/CouchbaseTemplateQueryListener.java
index 86fa8f69..822ae50d 100644
--- a/src/integration/java/org/springframework/data/couchbase/core/CouchbaseTemplateViewListener.java
+++ b/src/integration/java/org/springframework/data/couchbase/core/CouchbaseTemplateQueryListener.java
@@ -20,18 +20,21 @@ import java.util.Collections;
import com.couchbase.client.java.Bucket;
import com.couchbase.client.java.cluster.ClusterInfo;
+import com.couchbase.client.java.query.Index;
+import com.couchbase.client.java.query.N1qlQuery;
import com.couchbase.client.java.view.DefaultView;
import com.couchbase.client.java.view.DesignDocument;
import com.couchbase.client.java.view.View;
import org.springframework.data.couchbase.config.BeanNames;
+import org.springframework.data.couchbase.repository.index.IndexedRepositoryTests;
import org.springframework.test.context.TestContext;
import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;
/**
* @author Michael Nitschinger
*/
-public class CouchbaseTemplateViewListener extends DependencyInjectionTestExecutionListener {
+public class CouchbaseTemplateQueryListener extends DependencyInjectionTestExecutionListener {
@Override
public void beforeTestClass(final TestContext testContext) throws Exception {
@@ -39,6 +42,7 @@ public class CouchbaseTemplateViewListener extends DependencyInjectionTestExecut
ClusterInfo clusterInfo = (ClusterInfo) testContext.getApplicationContext().getBean(BeanNames.COUCHBASE_CLUSTER_INFO);
populateTestData(client, clusterInfo);
createAndWaitForDesignDocs(client);
+ client.query(N1qlQuery.simple(Index.createPrimaryIndex().on(client.name())));
}
private void populateTestData(Bucket client, ClusterInfo clusterInfo) {
diff --git a/src/integration/java/org/springframework/data/couchbase/core/CouchbaseTemplateTests.java b/src/integration/java/org/springframework/data/couchbase/core/CouchbaseTemplateTests.java
index ac01c09e..5e7d97ea 100644
--- a/src/integration/java/org/springframework/data/couchbase/core/CouchbaseTemplateTests.java
+++ b/src/integration/java/org/springframework/data/couchbase/core/CouchbaseTemplateTests.java
@@ -67,7 +67,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
* @author Anastasiia Smirnova */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = IntegrationTestApplicationConfig.class)
-@TestExecutionListeners(CouchbaseTemplateViewListener.class)
+@TestExecutionListeners(CouchbaseTemplateQueryListener.class)
public class CouchbaseTemplateTests {
@Rule
@@ -83,7 +83,7 @@ public class CouchbaseTemplateTests {
private void removeIfExist(String key) {
try {
- client.remove(key);
+ template.remove(key);
}
catch (DocumentDoesNotExistException e) {
//ignore
diff --git a/src/integration/java/org/springframework/data/couchbase/core/ReactiveCouchbaseTemplateViewListener.java b/src/integration/java/org/springframework/data/couchbase/core/RxCouchbaseTemplateQueryListener.java
similarity index 91%
rename from src/integration/java/org/springframework/data/couchbase/core/ReactiveCouchbaseTemplateViewListener.java
rename to src/integration/java/org/springframework/data/couchbase/core/RxCouchbaseTemplateQueryListener.java
index 9fc8909c..fd543982 100644
--- a/src/integration/java/org/springframework/data/couchbase/core/ReactiveCouchbaseTemplateViewListener.java
+++ b/src/integration/java/org/springframework/data/couchbase/core/RxCouchbaseTemplateQueryListener.java
@@ -21,6 +21,8 @@ import java.util.Collections;
import com.couchbase.client.java.Bucket;
import com.couchbase.client.java.cluster.ClusterInfo;
import com.couchbase.client.java.error.DocumentDoesNotExistException;
+import com.couchbase.client.java.query.Index;
+import com.couchbase.client.java.query.N1qlQuery;
import com.couchbase.client.java.view.*;
import org.springframework.data.couchbase.config.BeanNames;
@@ -31,7 +33,7 @@ import rx.Observable;
/**
* @author Subhashni Balakrishnan
*/
-public class ReactiveCouchbaseTemplateViewListener extends DependencyInjectionTestExecutionListener {
+public class RxCouchbaseTemplateQueryListener extends DependencyInjectionTestExecutionListener {
@Override
public void beforeTestClass(final TestContext testContext) throws Exception {
@@ -39,6 +41,7 @@ public class ReactiveCouchbaseTemplateViewListener extends DependencyInjectionTe
ClusterInfo clusterInfo = (ClusterInfo) testContext.getApplicationContext().getBean(BeanNames.COUCHBASE_CLUSTER_INFO);
populateTestData(client, clusterInfo);
createAndWaitForDesignDocs(client);
+ client.query(N1qlQuery.simple(Index.createPrimaryIndex().on(client.name())));
}
private void populateTestData(Bucket client, ClusterInfo clusterInfo) {
diff --git a/src/integration/java/org/springframework/data/couchbase/core/RxJavaCouchbaseTemplateTests.java b/src/integration/java/org/springframework/data/couchbase/core/RxJavaCouchbaseTemplateTests.java
index e4aba8cf..41a5d95f 100644
--- a/src/integration/java/org/springframework/data/couchbase/core/RxJavaCouchbaseTemplateTests.java
+++ b/src/integration/java/org/springframework/data/couchbase/core/RxJavaCouchbaseTemplateTests.java
@@ -28,8 +28,6 @@ import com.couchbase.client.java.Bucket;
import com.couchbase.client.java.PersistTo;
import com.couchbase.client.java.ReplicateTo;
import com.couchbase.client.java.document.RawJsonDocument;
-import com.couchbase.client.java.error.DocumentAlreadyExistsException;
-import com.couchbase.client.java.error.DocumentDoesNotExistException;
import com.couchbase.client.java.query.AsyncN1qlQueryResult;
import com.couchbase.client.java.query.N1qlParams;
import com.couchbase.client.java.query.N1qlQuery;
@@ -39,7 +37,6 @@ import com.couchbase.client.java.view.Stale;
import com.couchbase.client.java.view.ViewQuery;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
-import org.junit.After;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestName;
@@ -60,7 +57,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
**/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = ReactiveIntegrationTestApplicationConfig.class)
-@TestExecutionListeners(ReactiveCouchbaseTemplateViewListener.class)
+@TestExecutionListeners(RxCouchbaseTemplateQueryListener.class)
public class RxJavaCouchbaseTemplateTests {
@Rule
@@ -76,12 +73,18 @@ public class RxJavaCouchbaseTemplateTests {
private void removeIfExist(String key) {
- template.remove(key).subscribe();
+ template.remove(key).subscribe(
+ v -> {},
+ err -> {}
+ );
}
private void removeCollectionIfExist(Collection beers) {
template.remove(beers, PersistTo.MASTER, ReplicateTo.NONE)
- .subscribe();
+ .subscribe(
+ v -> {},
+ err -> {}
+ );
}
@Test
@@ -129,7 +132,7 @@ public class RxJavaCouchbaseTemplateTests {
removeIfExist(id);
template.save(beer).subscribe();
- Object result = client.get(id);
+ Object result = template.findById(id, ReactiveBeer.class).toBlocking().single();
assertNotNull(result);
template.remove(beer).subscribe();
@@ -154,7 +157,7 @@ public class RxJavaCouchbaseTemplateTests {
ComplexPerson complex = new ComplexPerson(id, names, votes, info1, info2);
- template.save(complex).toBlocking();
+ template.save(complex).subscribe();
assertNotNull(client.get(id));
ComplexPerson response = template.findById(id, ComplexPerson.class).toBlocking().single();
@@ -199,12 +202,10 @@ public class RxJavaCouchbaseTemplateTests {
@Test
public void shouldQueryRaw() {
- N1qlQuery query = N1qlQuery.simple(select("name").from(i(client.name()))
- .where(x("name").isNotMissing()));
+ N1qlQuery query = N1qlQuery.simple(select("name").from(i(client.name())).limit(1));
AsyncN1qlQueryResult queryResult = template.queryN1QL(query).toBlocking().single();
- assertNotNull(queryResult);
- assertTrue(queryResult.errors().toString(), queryResult.finalSuccess().toBlocking().single());
+ assertTrue(queryResult.finalSuccess().toBlocking().single());
assertFalse(queryResult.rows().toList().toBlocking().single().isEmpty());
}
@@ -212,7 +213,7 @@ public class RxJavaCouchbaseTemplateTests {
public void shouldQueryWithMapping() {
FullFragment ff1 = new FullFragment("fullFragment1", 1, "fullFragment", "test1");
FullFragment ff2 = new FullFragment("fullFragment2", 2, "fullFragment", "test2");
- template.save(Arrays.asList(ff1, ff2));
+ template.save(Arrays.asList(ff1, ff2)).subscribe();
N1qlQuery query = N1qlQuery.simple(select(i("value")) //"value" is a n1ql keyword apparently
.from(i(client.name()))
@@ -270,9 +271,9 @@ public class RxJavaCouchbaseTemplateTests {
String id = "simple-doc-with-update-expiry-for-read";
DocumentWithTouchOnRead doc = new DocumentWithTouchOnRead(id);
template.save(doc).subscribe();
- Thread.sleep(1500);
+ Thread.sleep(1000);
assertNotNull(template.findById(id, DocumentWithTouchOnRead.class).toBlocking().single());
- Thread.sleep(1500);
+ Thread.sleep(1000);
assertNotNull(template.findById(id, DocumentWithTouchOnRead.class).toBlocking().single());
Thread.sleep(3000);
assertNull(template.findById(id, DocumentWithTouchOnRead.class).toBlocking().single());
diff --git a/src/integration/java/org/springframework/data/couchbase/repository/ReactivePartyRepository.java b/src/integration/java/org/springframework/data/couchbase/repository/ReactivePartyRepository.java
index 7e8cd4c5..a1be5f7d 100644
--- a/src/integration/java/org/springframework/data/couchbase/repository/ReactivePartyRepository.java
+++ b/src/integration/java/org/springframework/data/couchbase/repository/ReactivePartyRepository.java
@@ -13,15 +13,15 @@ import reactor.core.publisher.Mono;
/**
* @author Subhashni Balakrishnan
*/
-@ViewIndexed(designDoc = "party", viewName = "all")
-@N1qlSecondaryIndexed(indexName = "party")
+@ViewIndexed(designDoc = "reactiveParty", viewName = "all")
+@N1qlSecondaryIndexed(indexName = "reactiveParty")
public interface ReactivePartyRepository extends ReactiveCouchbaseRepository {
Flux findByAttendeesGreaterThanEqual(int minAttendees);
Flux findByEventDateIs(Date targetDate);
- @View(designDocument = "party", viewName = "byDate")
+ @View(designDocument = "reactiveParty", viewName = "byDate")
Flux findFirst3ByEventDateGreaterThanEqual(Date targetDate);
Flux