diff --git a/pom.xml b/pom.xml
index 6c18a032..da989770 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,8 +21,8 @@
DATACOUCH
- 2.5.5
- 2.5.5
+ 2.2.8
+ 2.2.8
1.13.11.BUILD-SNAPSHOT
1.0.0.GA
diff --git a/src/integration/java/org/springframework/data/couchbase/IntegrationTestNoShutdownApplicationConfig.java b/src/integration/java/org/springframework/data/couchbase/IntegrationTestNoShutdownApplicationConfig.java
deleted file mode 100644
index 172ac369..00000000
--- a/src/integration/java/org/springframework/data/couchbase/IntegrationTestNoShutdownApplicationConfig.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package org.springframework.data.couchbase;
-
-import java.util.Collections;
-import java.util.List;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
-import org.springframework.core.env.Environment;
-import org.springframework.data.couchbase.config.AbstractCouchbaseConfiguration;
-import org.springframework.data.couchbase.config.CouchbaseConfigurer;
-
-/**
- * Configuration for testing no shutdown
- *
- * @author Subhashni Balakrishnan
- */
-public class IntegrationTestNoShutdownApplicationConfig extends AbstractCouchbaseConfiguration {
-
- @Autowired
- private Environment springEnv;
-
- @Bean
- public String couchbaseAdminUser() {
- return springEnv.getProperty("couchbase.adminUser", "Administrator");
- }
-
- @Bean
- public String couchbaseAdminPassword() {
- return springEnv.getProperty("couchbase.adminUser", "password");
- }
-
- @Override
- protected List getBootstrapHosts() {
- return Collections.singletonList(springEnv.getProperty("couchbase.host", "127.0.0.1"));
- }
-
- @Override
- protected String getBucketName() {
- return springEnv.getProperty("couchbase.bucket", "default");
- }
-
- @Override
- protected String getBucketPassword() {
- return springEnv.getProperty("couchbase.password", "");
- }
-
- @Override
- protected boolean isEnvironmentManagedBySpring() {
- return false;
- }
-
- @Override
- protected CouchbaseConfigurer couchbaseConfigurer() {
- return this;
- }
-}
\ No newline at end of file
diff --git a/src/integration/java/org/springframework/data/couchbase/config/CouchbaseEnvironmentNoShutdownProxyTest.java b/src/integration/java/org/springframework/data/couchbase/config/CouchbaseEnvironmentNoShutdownProxyTest.java
deleted file mode 100644
index 3c9f6c27..00000000
--- a/src/integration/java/org/springframework/data/couchbase/config/CouchbaseEnvironmentNoShutdownProxyTest.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package org.springframework.data.couchbase.config;
-
-import com.couchbase.client.java.env.CouchbaseEnvironment;
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.couchbase.IntegrationTestNoShutdownApplicationConfig;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-
-/**
- * Simple test to make sure that environment is not shutdown if not life cycle managed by Spring.
- */
-@RunWith(SpringJUnit4ClassRunner.class)
-@ContextConfiguration(classes = IntegrationTestNoShutdownApplicationConfig.class)
-public class CouchbaseEnvironmentNoShutdownProxyTest {
-
- @Autowired
- public CouchbaseEnvironment environment;
-
- @Test
- public void testEnvironmentShutDown() {
- Assert.assertEquals("Should return false", false, environment.shutdown());
- }
-}
\ No newline at end of file
diff --git a/src/main/java/org/springframework/data/couchbase/config/AbstractCouchbaseConfiguration.java b/src/main/java/org/springframework/data/couchbase/config/AbstractCouchbaseConfiguration.java
index da8345ad..639312a5 100644
--- a/src/main/java/org/springframework/data/couchbase/config/AbstractCouchbaseConfiguration.java
+++ b/src/main/java/org/springframework/data/couchbase/config/AbstractCouchbaseConfiguration.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2012-2018 the original author or authors
+ * Copyright 2012-2015 the original author or authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,7 +16,6 @@
package org.springframework.data.couchbase.config;
-import java.lang.reflect.Proxy;
import java.util.List;
import com.couchbase.client.java.Bucket;
@@ -87,18 +86,15 @@ public abstract class AbstractCouchbaseConfiguration
return this;
}
- @Override
- @Bean(destroyMethod = "shutdown", name = BeanNames.COUCHBASE_ENV)
- public CouchbaseEnvironment couchbaseEnvironment() {
- if (isEnvironmentManagedBySpring()) {
- return getEnvironment();
- } else {
- CouchbaseEnvironment proxy = (CouchbaseEnvironment) Proxy.newProxyInstance(CouchbaseEnvironment.class.getClassLoader(),
- new Class[]{CouchbaseEnvironment.class},
- new CouchbaseEnvironmentNoShutdownInvocationHandler(getEnvironment()));
- return proxy;
- }
+ @Override
+ @Bean(destroyMethod = "shutdown", name = BeanNames.COUCHBASE_ENV)
+ public CouchbaseEnvironment couchbaseEnvironment() {
+ CouchbaseEnvironment env = getEnvironment();
+ if (isEnvironmentManagedBySpring()) {
+ return env;
}
+ return new CouchbaseEnvironmentNoShutdownProxy(env);
+ }
/**
* Returns the {@link Cluster} instance to connect to.
diff --git a/src/main/java/org/springframework/data/couchbase/config/CouchbaseEnvironmentFactoryBean.java b/src/main/java/org/springframework/data/couchbase/config/CouchbaseEnvironmentFactoryBean.java
index 30b55213..c1c9f5a6 100644
--- a/src/main/java/org/springframework/data/couchbase/config/CouchbaseEnvironmentFactoryBean.java
+++ b/src/main/java/org/springframework/data/couchbase/config/CouchbaseEnvironmentFactoryBean.java
@@ -107,6 +107,10 @@ import org.springframework.beans.factory.config.AbstractFactoryBean;
this.couchbaseEnvBuilder.dnsSrvEnabled(dnsSrvEnabled);
}
+ public void setDcpEnabled(boolean dcpEnabled) {
+ this.couchbaseEnvBuilder.dcpEnabled(dcpEnabled);
+ }
+
public void setSslEnabled(boolean sslEnabled) {
this.couchbaseEnvBuilder.sslEnabled(sslEnabled);
}
@@ -119,6 +123,14 @@ import org.springframework.beans.factory.config.AbstractFactoryBean;
this.couchbaseEnvBuilder.sslKeystorePassword(sslKeystorePassword);
}
+ public void setQueryEnabled(boolean queryEnabled) {
+ this.couchbaseEnvBuilder.queryEnabled(queryEnabled);
+ }
+
+ public void setQueryPort(int queryPort) {
+ this.couchbaseEnvBuilder.queryPort(queryPort);
+ }
+
public void setBootstrapHttpEnabled(boolean bootstrapHttpEnabled) {
this.couchbaseEnvBuilder.bootstrapHttpEnabled(bootstrapHttpEnabled);
}
diff --git a/src/main/java/org/springframework/data/couchbase/config/CouchbaseEnvironmentNoShutdownInvocationHandler.java b/src/main/java/org/springframework/data/couchbase/config/CouchbaseEnvironmentNoShutdownInvocationHandler.java
deleted file mode 100644
index 28ad57f6..00000000
--- a/src/main/java/org/springframework/data/couchbase/config/CouchbaseEnvironmentNoShutdownInvocationHandler.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2012-2017 the original author or authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.data.couchbase.config;
-
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import com.couchbase.client.java.env.CouchbaseEnvironment;
-
-/**
- * A dynamic proxy around a {@link CouchbaseEnvironment} that prevents its {@link CouchbaseEnvironment#shutdown()} method
- * to be invoked. Useful when the delegate is not to be lifecycle-managed by Spring.
- *
- * @author Simon Baslé
- * @author Jonathan Edwards
- * @author Subhashni Balakrishnan
- */
-public class CouchbaseEnvironmentNoShutdownInvocationHandler implements InvocationHandler {
-
- private final CouchbaseEnvironment environment;
-
- public CouchbaseEnvironmentNoShutdownInvocationHandler(CouchbaseEnvironment environment) {
- this.environment = environment;
- }
-
- @Override
- public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
- if (method.getName().contentEquals("shutdown")) {
- return false;
- }
- return method.invoke(this.environment, args);
- }
-}
\ No newline at end of file
diff --git a/src/main/java/org/springframework/data/couchbase/config/CouchbaseEnvironmentNoShutdownProxy.java b/src/main/java/org/springframework/data/couchbase/config/CouchbaseEnvironmentNoShutdownProxy.java
new file mode 100644
index 00000000..c5a18482
--- /dev/null
+++ b/src/main/java/org/springframework/data/couchbase/config/CouchbaseEnvironmentNoShutdownProxy.java
@@ -0,0 +1,327 @@
+/*
+ * Copyright 2012-2016 the original author or authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.data.couchbase.config;
+
+import com.couchbase.client.core.event.EventBus;
+import com.couchbase.client.core.metrics.MetricsCollector;
+import com.couchbase.client.core.metrics.NetworkLatencyMetricsCollector;
+import com.couchbase.client.core.retry.RetryStrategy;
+import com.couchbase.client.core.time.Delay;
+import com.couchbase.client.deps.io.netty.channel.EventLoopGroup;
+import com.couchbase.client.java.env.CouchbaseEnvironment;
+import rx.Observable;
+import rx.Scheduler;
+
+/**
+ * A proxy around a {@link CouchbaseEnvironment} that prevents its {@link #shutdown()} method
+ * to be invoked. Useful when the delegate is not to be lifecycle-managed by Spring.
+ *
+ * @author Simon Baslé
+ * @author Jonathan Edwards
+ */
+public class CouchbaseEnvironmentNoShutdownProxy implements CouchbaseEnvironment {
+
+ private final CouchbaseEnvironment delegate;
+
+ public CouchbaseEnvironmentNoShutdownProxy(CouchbaseEnvironment delegate) {
+ this.delegate = delegate;
+ }
+
+ @Override
+ public Observable shutdown() {
+ return Observable.just(false);
+ }
+
+ //===== DELEGATION METHODS =====
+
+ @Override
+ public Observable shutdownAsync() {
+ return delegate.shutdownAsync();
+ }
+
+ @Override
+ public EventLoopGroup ioPool() {
+ return delegate.ioPool();
+ }
+
+ @Override
+ public Scheduler scheduler() {
+ return delegate.scheduler();
+ }
+
+ @Override
+ public boolean dcpEnabled() {
+ return delegate.dcpEnabled();
+ }
+
+ @Override
+ public boolean sslEnabled() {
+ return delegate.sslEnabled();
+ }
+
+ @Override
+ public String sslKeystoreFile() {
+ return delegate.sslKeystoreFile();
+ }
+
+ @Override
+ public String sslKeystorePassword() {
+ return delegate.sslKeystorePassword();
+ }
+
+ @Override
+ @Deprecated
+ public boolean queryEnabled() {
+ return delegate.queryEnabled();
+ }
+
+ @Override
+ @Deprecated
+ public int queryPort() {
+ return delegate.queryPort();
+ }
+
+ @Override
+ public boolean bootstrapHttpEnabled() {
+ return delegate.bootstrapHttpEnabled();
+ }
+
+ @Override
+ public boolean bootstrapCarrierEnabled() {
+ return delegate.bootstrapCarrierEnabled();
+ }
+
+ @Override
+ public int bootstrapHttpDirectPort() {
+ return delegate.bootstrapHttpDirectPort();
+ }
+
+ @Override
+ public int bootstrapHttpSslPort() {
+ return delegate.bootstrapHttpSslPort();
+ }
+
+ @Override
+ public int bootstrapCarrierDirectPort() {
+ return delegate.bootstrapCarrierDirectPort();
+ }
+
+ @Override
+ public int bootstrapCarrierSslPort() {
+ return delegate.bootstrapCarrierSslPort();
+ }
+
+ @Override
+ public int ioPoolSize() {
+ return delegate.ioPoolSize();
+ }
+
+ @Override
+ public int computationPoolSize() {
+ return delegate.computationPoolSize();
+ }
+
+ @Override
+ public Delay observeIntervalDelay() {
+ return delegate.observeIntervalDelay();
+ }
+
+ @Override
+ public Delay reconnectDelay() {
+ return delegate.reconnectDelay();
+ }
+
+ @Override
+ public Delay retryDelay() {
+ return delegate.retryDelay();
+ }
+
+ @Override
+ public int requestBufferSize() {
+ return delegate.requestBufferSize();
+ }
+
+ @Override
+ public int responseBufferSize() {
+ return delegate.responseBufferSize();
+ }
+
+ @Override
+ public int dcpConnectionBufferSize() {
+ return delegate.dcpConnectionBufferSize();
+ }
+
+ @Override
+ public double dcpConnectionBufferAckThreshold() {
+ return delegate.dcpConnectionBufferAckThreshold();
+ }
+
+ @Override
+ public int kvEndpoints() {
+ return delegate.kvEndpoints();
+ }
+
+ @Override
+ public int viewEndpoints() {
+ return delegate.viewEndpoints();
+ }
+
+ @Override
+ public int queryEndpoints() {
+ return delegate.queryEndpoints();
+ }
+
+ @Override
+ public String userAgent() {
+ return delegate.userAgent();
+ }
+
+ @Override
+ public String packageNameAndVersion() {
+ return delegate.packageNameAndVersion();
+ }
+
+ @Override
+ public RetryStrategy retryStrategy() {
+ return delegate.retryStrategy();
+ }
+
+ @Override
+ public long maxRequestLifetime() {
+ return delegate.maxRequestLifetime();
+ }
+
+ @Override
+ public long autoreleaseAfter() {
+ return delegate.autoreleaseAfter();
+ }
+
+ @Override
+ public long keepAliveInterval() {
+ return delegate.keepAliveInterval();
+ }
+
+ @Override
+ public EventBus eventBus() {
+ return delegate.eventBus();
+ }
+
+ @Override
+ public boolean bufferPoolingEnabled() {
+ return delegate.bufferPoolingEnabled();
+ }
+
+ @Override
+ public long managementTimeout() {
+ return delegate.managementTimeout();
+ }
+
+ @Override
+ public long queryTimeout() {
+ return delegate.queryTimeout();
+ }
+
+ @Override
+ public long viewTimeout() {
+ return delegate.viewTimeout();
+ }
+
+ @Override
+ public long kvTimeout() {
+ return delegate.kvTimeout();
+ }
+
+ @Override
+ public long connectTimeout() {
+ return delegate.connectTimeout();
+ }
+
+ @Override
+ public long disconnectTimeout() {
+ return delegate.disconnectTimeout();
+ }
+
+ @Override
+ public boolean dnsSrvEnabled() {
+ return delegate.dnsSrvEnabled();
+ }
+
+ @Override
+ public NetworkLatencyMetricsCollector networkLatencyMetricsCollector() {
+ return delegate.networkLatencyMetricsCollector();
+ }
+
+ @Override
+ public int socketConnectTimeout() {
+ return delegate.socketConnectTimeout();
+ }
+
+ @Override
+ public MetricsCollector runtimeMetricsCollector() {
+ return delegate.runtimeMetricsCollector();
+ }
+
+ @Override
+ public boolean mutationTokensEnabled() {
+ return delegate.mutationTokensEnabled();
+ }
+
+ @Override
+ public boolean tcpNodelayEnabled() {
+ return delegate.tcpNodelayEnabled();
+ }
+
+ @Override
+ public boolean callbacksOnIoPool() {
+ return delegate.callbacksOnIoPool();
+ }
+
+ @Override
+ public String coreBuild() {
+ return delegate.coreBuild();
+ }
+
+ @Override
+ public String coreVersion() {
+ return delegate.coreVersion();
+ }
+
+ @Override
+ public String dcpConnectionName() {
+ return delegate.dcpConnectionName();
+ }
+
+ @Override
+ public int searchEndpoints() {
+ return delegate.searchEndpoints();
+ }
+
+ @Override
+ public String clientBuild() {
+ return delegate.clientBuild();
+ }
+
+ @Override
+ public String clientVersion() {
+ return delegate.clientVersion();
+ }
+
+ @Override
+ public long searchTimeout() {
+ return delegate.searchTimeout();
+ }
+}
diff --git a/src/main/java/org/springframework/data/couchbase/config/CouchbaseEnvironmentParser.java b/src/main/java/org/springframework/data/couchbase/config/CouchbaseEnvironmentParser.java
index f9fc3e13..61caa967 100644
--- a/src/main/java/org/springframework/data/couchbase/config/CouchbaseEnvironmentParser.java
+++ b/src/main/java/org/springframework/data/couchbase/config/CouchbaseEnvironmentParser.java
@@ -40,9 +40,12 @@ import org.springframework.util.StringUtils;
* {@link DefaultCouchbaseEnvironment.Builder#disconnectTimeout(long) disconnectTimeout}
* {@link DefaultCouchbaseEnvironment.Builder#dnsSrvEnabled(boolean) dnsSrvEnabled}
*
+ * {@link DefaultCouchbaseEnvironment.Builder#dcpEnabled(boolean) dcpEnabled}
* {@link DefaultCouchbaseEnvironment.Builder#sslEnabled(boolean) sslEnabled}
* {@link DefaultCouchbaseEnvironment.Builder#sslKeystoreFile(String) sslKeystoreFile}
* {@link DefaultCouchbaseEnvironment.Builder#sslKeystorePassword(String) sslKeystorePassword}
+ * {@link DefaultCouchbaseEnvironment.Builder#queryEnabled(boolean) queryEnabled}
+ * {@link DefaultCouchbaseEnvironment.Builder#queryPort(int) queryPort}
* {@link DefaultCouchbaseEnvironment.Builder#bootstrapHttpEnabled(boolean) bootstrapHttpEnabled}
* {@link DefaultCouchbaseEnvironment.Builder#bootstrapCarrierEnabled(boolean) bootstrapCarrierEnabled}
* {@link DefaultCouchbaseEnvironment.Builder#bootstrapHttpDirectPort(int) bootstrapHttpDirectPort}
@@ -110,9 +113,12 @@ public class CouchbaseEnvironmentParser extends AbstractSingleBeanDefinitionPars
setPropertyValue(envDefinitionBuilder, envElement, "disconnectTimeout", "disconnectTimeout");
setPropertyValue(envDefinitionBuilder, envElement, "dnsSrvEnabled", "dnsSrvEnabled");
+ setPropertyValue(envDefinitionBuilder, envElement, "dcpEnabled", "dcpEnabled");
setPropertyValue(envDefinitionBuilder, envElement, "sslEnabled", "sslEnabled");
setPropertyValue(envDefinitionBuilder, envElement, "sslKeystoreFile", "sslKeystoreFile");
setPropertyValue(envDefinitionBuilder, envElement, "sslKeystorePassword", "sslKeystorePassword");
+ setPropertyValue(envDefinitionBuilder, envElement, "queryEnabled", "queryEnabled");
+ setPropertyValue(envDefinitionBuilder, envElement, "queryPort", "queryPort");
setPropertyValue(envDefinitionBuilder, envElement, "bootstrapHttpEnabled", "bootstrapHttpEnabled");
setPropertyValue(envDefinitionBuilder, envElement, "bootstrapCarrierEnabled", "bootstrapCarrierEnabled");
setPropertyValue(envDefinitionBuilder, envElement, "bootstrapHttpDirectPort", "bootstrapHttpDirectPort");
diff --git a/src/main/resources/org/springframework/data/couchbase/config/spring-couchbase-env-2.0.xsd b/src/main/resources/org/springframework/data/couchbase/config/spring-couchbase-env-2.0.xsd
index ce59527a..0647c96b 100644
--- a/src/main/resources/org/springframework/data/couchbase/config/spring-couchbase-env-2.0.xsd
+++ b/src/main/resources/org/springframework/data/couchbase/config/spring-couchbase-env-2.0.xsd
@@ -29,9 +29,12 @@
+
+
+
diff --git a/src/test/java/org/springframework/data/couchbase/config/CouchbaseEnvironmentParserTest.java b/src/test/java/org/springframework/data/couchbase/config/CouchbaseEnvironmentParserTest.java
index 0ee7c60a..b1b84863 100644
--- a/src/test/java/org/springframework/data/couchbase/config/CouchbaseEnvironmentParserTest.java
+++ b/src/test/java/org/springframework/data/couchbase/config/CouchbaseEnvironmentParserTest.java
@@ -75,9 +75,12 @@ public class CouchbaseEnvironmentParserTest {
assertThat(env.disconnectTimeout(), is(equalTo(6L)));
assertThat(env.dnsSrvEnabled(), allOf(equalTo(true), not(defaultEnv.dnsSrvEnabled())));
+ assertThat(env.dcpEnabled(), allOf(equalTo(true), not(defaultEnv.dcpEnabled())));
assertThat(env.sslEnabled(), allOf(equalTo(true), not(defaultEnv.sslEnabled())));
assertThat(env.sslKeystoreFile(), is(equalTo("test")));
assertThat(env.sslKeystorePassword(), is(equalTo("test")));
+ assertThat(env.queryEnabled(), allOf(equalTo(true), not(defaultEnv.queryEnabled())));
+ assertThat(env.queryPort(), is(equalTo(7)));
assertThat(env.bootstrapHttpEnabled(), allOf(equalTo(false), not(defaultEnv.bootstrapHttpEnabled())));
assertThat(env.bootstrapCarrierEnabled(), allOf(equalTo(false), not(defaultEnv.bootstrapCarrierEnabled())));
assertThat(env.bootstrapHttpDirectPort(), is(equalTo(8)));
diff --git a/src/test/resources/configurations/couchbaseEnv-bean.xml b/src/test/resources/configurations/couchbaseEnv-bean.xml
index 0fa764c9..d280a67c 100644
--- a/src/test/resources/configurations/couchbaseEnv-bean.xml
+++ b/src/test/resources/configurations/couchbaseEnv-bean.xml
@@ -19,9 +19,12 @@
disconnectTimeout="6"
dnsSrvEnabled="true"
+ dcpEnabled="true"
sslEnabled="true"
sslKeystoreFile="test"
sslKeystorePassword="test"
+ queryEnabled="true"
+ queryPort="7"
bootstrapHttpEnabled="false"
bootstrapCarrierEnabled="false"
bootstrapHttpDirectPort="8"