/* * Copyright 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. * 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.aerospike.config; import org.springframework.beans.factory.FactoryBean; import com.aerospike.client.policy.ConsistencyLevel; import com.aerospike.client.policy.Policy; import com.aerospike.client.policy.Priority; /** * A {@link FactoryBean} implementation that exposes the setters necessary to configure a {@link ReadPolicy} via XML. * * @author Peter Milne */ public class ReadPolicyFactoryBean implements FactoryBean<Policy> { private final Policy policy; /** * Creates a new {@link ReadPolicyFactoryBean}. */ public ReadPolicyFactoryBean() { this.policy = new Policy(); } /** * Configures the timeout for an operation. * @param timeout */ public void setTimeout(int timeout){ this.policy.timeout = timeout; } /** * Configures the maximum number of retries before aborting the current transaction. * A retry is attempted when there is a network error other than timeout. * If maxRetries is exceeded, the abort will occur even if the timeout * has not yet been exceeded. The default number of retries is 1. */ public void setMaxRetries(int maxRetries){ this.policy.maxRetries = maxRetries; } /** * Configures the sleep between retries if a transaction fails and the * timeout was not exceeded. Enter zero to skip sleep. * The default sleep between retries is 500 ms. */ public void setSleepBetweenRetries(int sleepBetweenRetries){ this.policy.sleepBetweenRetries = sleepBetweenRetries; } /** * Configures how replicas should be consulted in a read operation to provide the desired * consistency guarantee. Default to allowing one replica to be used in the * read operation. */ public void setConsistencyLevel(ConsistencyLevel consistencyLevel){ this.policy.consistencyLevel = consistencyLevel; } /** * Configures the priority of request relative to other transactions. * Currently, only used for scans. */ public void setPriority(Priority priority){ this.policy.priority = priority; } /* * (non-Javadoc) * @see org.springframework.beans.factory.FactoryBean#getObject() */ @Override public Policy getObject() throws Exception { return policy; } /* * (non-Javadoc) * @see org.springframework.beans.factory.FactoryBean#isSingleton() */ @Override public boolean isSingleton() { return false; } /* * (non-Javadoc) * @see org.springframework.beans.factory.FactoryBean#getObjectType() */ @Override public Class<?> getObjectType() { return Policy.class; } }