diff --git a/src/main/java/org/springframework/data/couchbase/config/CouchbaseClusterParser.java b/src/main/java/org/springframework/data/couchbase/config/CouchbaseClusterParser.java index 3897b87e..9c07b0a8 100644 --- a/src/main/java/org/springframework/data/couchbase/config/CouchbaseClusterParser.java +++ b/src/main/java/org/springframework/data/couchbase/config/CouchbaseClusterParser.java @@ -19,7 +19,9 @@ package org.springframework.data.couchbase.config; import java.util.ArrayList; import java.util.List; +import com.couchbase.client.java.Cluster; import com.couchbase.client.java.CouchbaseCluster; +import com.couchbase.client.java.env.CouchbaseEnvironment; import org.w3c.dom.Element; import org.springframework.beans.factory.support.AbstractBeanDefinition; @@ -29,6 +31,19 @@ import org.springframework.beans.factory.xml.ParserContext; import org.springframework.util.StringUtils; import org.springframework.util.xml.DomUtils; +/** + * The XML parser for a {@link Cluster} definition. + * + * Such a definition can be tuned by either referencing a {@link CouchbaseEnvironment} via + * the {@value #CLUSTER_ENVIRONMENT_REF} attribute or define a custom environment inline via + * the <{@value #CLUSTER_ENVIRONMENT_TAG}> tag (not recommended, environments should be + * shared as possible). + * + * To bootstrap the connection, one can provide IPs or hostnames of nodes to connect to + * via 1 or more <{@value #CLUSTER_NODE_TAG}> tags. + * + * @author Simon Baslé + */ public class CouchbaseClusterParser extends AbstractSingleBeanDefinitionParser { /** @@ -39,12 +54,19 @@ public class CouchbaseClusterParser extends AbstractSingleBeanDefinitionParser { /** * The unique <env> element in a cluster definition define the environment customizations. * - * @see CouchbaseEnvironmentParser for the possible fields. - * @see #CLUSTER_ENVIRONMENT_REF as an alternative (giving a reference to an env instead of inline description) + * @see CouchbaseEnvironmentParser CouchbaseEnvironmentParser for the possible fields. + * @see #CLUSTER_ENVIRONMENT_REF CLUSTER_ENVIRONMENT_REF as an alternative (giving a reference to + * an env instead of inline description, lower precedence) */ public static final String CLUSTER_ENVIRONMENT_TAG = "env"; - + /** + * The <env-ref> attribute allows to use a reference to an {@link CouchbaseEnvironment} to + * tune the connection. + * + * @see #CLUSTER_ENVIRONMENT_TAG CLUSTER_ENVIRONMENT_TAG for an inline alternative + * (which takes priority over this reference) + */ public static final String CLUSTER_ENVIRONMENT_REF = "env-ref"; /** 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 c5a57f56..e452b50e 100644 --- a/src/main/java/org/springframework/data/couchbase/config/CouchbaseEnvironmentFactoryBean.java +++ b/src/main/java/org/springframework/data/couchbase/config/CouchbaseEnvironmentFactoryBean.java @@ -24,6 +24,11 @@ import com.couchbase.client.java.env.DefaultCouchbaseEnvironment; import org.springframework.beans.factory.config.AbstractFactoryBean; +/** + * Factory Bean to help create a CouchbaseEnvironment (by offering setters for supported tuning methods). + * + * @author Simon Baslé + */ /*package*/ class CouchbaseEnvironmentFactoryBean extends AbstractFactoryBean { private static final CouchbaseEnvironment DEFAULT_ENV = DefaultCouchbaseEnvironment.create(); 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 a6c0f503..b4bf013f 100644 --- a/src/main/java/org/springframework/data/couchbase/config/CouchbaseEnvironmentParser.java +++ b/src/main/java/org/springframework/data/couchbase/config/CouchbaseEnvironmentParser.java @@ -65,6 +65,8 @@ import org.springframework.util.StringUtils; *
  • {@link DefaultCouchbaseEnvironment.Builder#autoreleaseAfter(long) autoreleaseAfter}
  • *
  • {@link DefaultCouchbaseEnvironment.Builder#bufferPoolingEnabled(boolean) bufferPoolingEnabled}
  • * + * + * @author Simon Baslé */ public class CouchbaseEnvironmentParser extends AbstractSingleBeanDefinitionParser { diff --git a/src/main/java/org/springframework/data/couchbase/config/CouchbaseJmxParser.java b/src/main/java/org/springframework/data/couchbase/config/CouchbaseJmxParser.java index 22c2969d..98653eda 100644 --- a/src/main/java/org/springframework/data/couchbase/config/CouchbaseJmxParser.java +++ b/src/main/java/org/springframework/data/couchbase/config/CouchbaseJmxParser.java @@ -79,7 +79,7 @@ public class CouchbaseJmxParser implements BeanDefinitionParser { * * @param clazz the class type to register. * @param compositeDef component that can hold nested components. - * @param refName the reference name to the couchbase client. + * @param refName the reference name to the couchbase bucket. * @param eleSource source element to reference. * @param parserContext encapsulates the parsing state and configuration. */ diff --git a/src/main/resources/org/springframework/data/couchbase/config/spring-couchbase-2.0.xsd b/src/main/resources/org/springframework/data/couchbase/config/spring-couchbase-2.0.xsd index 23f3fd24..669cb5f1 100644 --- a/src/main/resources/org/springframework/data/couchbase/config/spring-couchbase-2.0.xsd +++ b/src/main/resources/org/springframework/data/couchbase/config/spring-couchbase-2.0.xsd @@ -42,37 +42,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -81,14 +50,14 @@ Defines a CouchbaseClient instance used for accessing a Couchbase Cluster. The id of the couchbase definition (by default "couchbaseFactory").]]> - + - The reference to a CouchbaseClient object. + The reference to a Bucket object. - + @@ -151,10 +120,10 @@ Defines a JMX Model MBeans for monitoring a Couchbase cluster'. ]]> - + @@ -183,56 +152,15 @@ The name of the Couchbase object that determines what connection to monitor. (by - + - + - - - - - The reference to a CouchbaseTemplate. Will default to 'couchbaseTemplate'. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/test/java/org/springframework/data/couchbase/config/CouchbaseBucketParserTest.java b/src/test/java/org/springframework/data/couchbase/config/CouchbaseBucketParserTest.java index 38b61f43..932e1d29 100644 --- a/src/test/java/org/springframework/data/couchbase/config/CouchbaseBucketParserTest.java +++ b/src/test/java/org/springframework/data/couchbase/config/CouchbaseBucketParserTest.java @@ -132,87 +132,5 @@ public class CouchbaseBucketParserTest { .getArgumentValue(2, Object.class); assertThat(passwordHolder.getValue(), is(instanceOf(String.class))); assertThat(passwordHolder.getValue().toString(), is((equalTo("123")))); - } - -// @Test -// public void testClusterWithNodes() { -// BeanDefinition def = factory.getBeanDefinition("clusterWithNodes"); -// -// assertThat(def, is(notNullValue())); -// assertThat(def.getConstructorArgumentValues().getArgumentCount(), is(equalTo(1))); -// assertThat(def.getPropertyValues().size(), is(equalTo(0))); -// assertThat(def.getFactoryMethodName(), is(equalTo("create"))); -// -// ConstructorArgumentValues.ValueHolder holder = def.getConstructorArgumentValues() -// .getArgumentValue(0, List.class); -// assertThat(holder.getValue(), is(instanceOf(List.class))); -// List nodes = (List) holder.getValue(); -// -// assertThat(nodes.size(), is(equalTo(2))); -// assertThat((String) nodes.get(0), is(equalTo("192.1.2.3"))); -// assertThat((String) nodes.get(1), is(equalTo("192.4.5.6"))); -// } -// -// @Test -// public void testClusterWithEnvInline() { -// BeanDefinition def = factory.getBeanDefinition("clusterWithEnvInline"); -// -// assertThat(def, is(notNullValue())); -// assertThat(def.getConstructorArgumentValues().getArgumentCount(), is(equalTo(1))); -// assertThat(def.getPropertyValues().size(), is(equalTo(0))); -// -// ConstructorArgumentValues.ValueHolder holder = def.getConstructorArgumentValues() -// .getArgumentValue(0, CouchbaseEnvironment.class); -// GenericBeanDefinition envDef = (GenericBeanDefinition) holder.getValue(); -// -// assertThat(envDef.getBeanClassName(), is(equalTo(CouchbaseEnvironmentFactoryBean.class.getName()))); -// assertThat("unexpected attribute", envDef.getPropertyValues().contains("managementTimeout")); -// } -// -// @Test -// public void testClusterWithEnvRef() { -// BeanDefinition def = factory.getBeanDefinition("clusterWithEnvRef"); -// -// assertThat(def, is(notNullValue())); -// assertThat(def.getConstructorArgumentValues().getArgumentCount(), is(equalTo(1))); -// assertThat(def.getPropertyValues().size(), is(equalTo(0))); -// -// ConstructorArgumentValues.ValueHolder holder = def.getConstructorArgumentValues() -// .getArgumentValue(0, CouchbaseEnvironment.class); -// -// assertThat(holder.getValue(), instanceOf(RuntimeBeanReference.class)); -// RuntimeBeanReference envRef = (RuntimeBeanReference) holder.getValue(); -// -// assertThat(envRef.getBeanName(), is(equalTo("someEnv"))); -// } -// @Test -// public void testClusterConfigurationPrecedence() { -// BeanDefinition def = factory.getBeanDefinition("clusterWithAll"); -// -// assertThat(def, is(notNullValue())); -// assertThat(def.getConstructorArgumentValues().getArgumentCount(), is(equalTo(2))); -// assertThat(def.getPropertyValues().size(), is(equalTo(0))); -// assertThat(def.getFactoryMethodName(), is(equalTo("create"))); -// -// assertThat(def.getConstructorArgumentValues().getIndexedArgumentValues().get(0).getValue(), -// instanceOf(GenericBeanDefinition.class)); -// assertThat(def.getConstructorArgumentValues().getIndexedArgumentValues().get(1).getValue(), -// instanceOf(List.class)); -// -// ConstructorArgumentValues.ValueHolder holderEnv = def.getConstructorArgumentValues() -// .getArgumentValue(0, CouchbaseEnvironment.class); -// GenericBeanDefinition envDef = (GenericBeanDefinition) holderEnv.getValue(); -// -// assertThat(envDef.getBeanClassName(), is(equalTo(CouchbaseEnvironmentFactoryBean.class.getName()))); -// assertThat("unexpected attribute", envDef.getPropertyValues().contains("autoreleaseAfter")); -// -// ConstructorArgumentValues.ValueHolder holderNodes = def.getConstructorArgumentValues() -// .getArgumentValue(1, List.class); -// List nodes = (List) holderNodes.getValue(); -// -// assertThat(nodes.size(), is(equalTo(2))); -// assertThat((String) nodes.get(0), is(equalTo("2.2.2.2"))); -// assertThat((String) nodes.get(1), is(equalTo("4.4.4.4"))); -// } } \ No newline at end of file