Skip to content

Commit

Permalink
INTERNAL: add ArcusCacheConfigurationFactoryBean
Browse files Browse the repository at this point in the history
  • Loading branch information
oliviarla committed Sep 25, 2024
1 parent ebc7663 commit dd0b588
Show file tree
Hide file tree
Showing 9 changed files with 123 additions and 17 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ Spring Cache configuration is required before using arcus-spring. Create ArcusCa
</constructor-arg>
</bean>

<bean id="defaultCacheConfig" class="com.navercorp.arcus.spring.cache.ArcusCacheConfiguration">
<bean id="defaultCacheConfig" class="com.navercorp.arcus.spring.ArcusCacheConfigurationFactoryBean">
<property name="prefix" value="DEFAULT"/>
<property name="expireSeconds" value="60"/>
<property name="timeoutMilliSeconds" value="800"/>
Expand Down
2 changes: 1 addition & 1 deletion docs/03-arcus-spring-usage.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ Spring Cache Abstraction을 통해 ARCUS Cache를 사용하려면, 다음과 같
</constructor-arg>
</bean>

<bean id="defaultCacheConfig" class="com.navercorp.arcus.spring.cache.ArcusCacheConfiguration"/>
<bean id="defaultCacheConfig" class="com.navercorp.arcus.spring.ArcusCacheConfigurationFactoryBean"/>

</beans>
```
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
package com.navercorp.arcus.spring;

import com.navercorp.arcus.spring.cache.ArcusCacheConfiguration;
import com.navercorp.arcus.spring.cache.front.ArcusFrontCache;

import net.spy.memcached.transcoders.Transcoder;

import org.springframework.beans.factory.FactoryBean;
import org.springframework.lang.Nullable;

import static com.navercorp.arcus.spring.cache.ArcusCacheConfiguration.DEFAULT_ALLOW_NULL_VALUES;
import static com.navercorp.arcus.spring.cache.ArcusCacheConfiguration.DEFAULT_TIMEOUT_MILLISECONDS;
import static com.navercorp.arcus.spring.cache.ArcusCacheConfiguration.DEFAULT_WANT_TO_GET_EXCEPTION;

/**
* FactoryBean for creating an {@link ArcusCacheConfiguration} bean in xml configuration.
*/
public class ArcusCacheConfigurationFactoryBean implements FactoryBean<ArcusCacheConfiguration> {

private String serviceId = "";
@Nullable
private String prefix;
private int expireSeconds;
private long timeoutMilliSeconds = DEFAULT_TIMEOUT_MILLISECONDS;
@Nullable
private Transcoder<Object> operationTranscoder;
@Nullable
private ArcusFrontCache arcusFrontCache;
private int frontExpireSeconds = 5;
private boolean forceFrontCaching;
private boolean wantToGetException = DEFAULT_WANT_TO_GET_EXCEPTION;
private boolean allowNullValues = DEFAULT_ALLOW_NULL_VALUES;

@Override
public ArcusCacheConfiguration getObject() {
ArcusCacheConfiguration arcusCacheConfiguration = new ArcusCacheConfiguration();
arcusCacheConfiguration.withServiceId(serviceId)
.withExpireSeconds(expireSeconds)
.withTimeoutMilliSeconds(timeoutMilliSeconds)
.withFrontExpireSeconds(frontExpireSeconds);
if (prefix != null) {
arcusCacheConfiguration.withPrefix(prefix);
}
if (operationTranscoder != null) {
arcusCacheConfiguration.withOperationTranscoder(operationTranscoder);
}
if (arcusFrontCache != null) {
arcusCacheConfiguration.withArcusFrontCache(arcusFrontCache);
}
if (forceFrontCaching) {
arcusCacheConfiguration.enableForcingFrontCache();
}
if (wantToGetException) {
arcusCacheConfiguration.enableGettingException();
}
if (!allowNullValues) {
arcusCacheConfiguration.disableCachingNullValues();}

return arcusCacheConfiguration;
}

@Override
public Class<?> getObjectType() {
return ArcusCacheConfiguration.class;
}

public void setServiceId(String serviceId) {
this.serviceId = serviceId;
}

public void setPrefix(@Nullable String prefix) {
this.prefix = prefix;
}

public void setExpireSeconds(int expireSeconds) {
this.expireSeconds = expireSeconds;
}

public void setTimeoutMilliSeconds(long timeoutMilliSeconds) {
this.timeoutMilliSeconds = timeoutMilliSeconds;
}

public void setOperationTranscoder(@Nullable Transcoder<Object> operationTranscoder) {
this.operationTranscoder = operationTranscoder;
}

public void setArcusFrontCache(@Nullable ArcusFrontCache arcusFrontCache) {
this.arcusFrontCache = arcusFrontCache;
}

public void setFrontExpireSeconds(int frontExpireSeconds) {
this.frontExpireSeconds = frontExpireSeconds;
}

public void setForceFrontCaching(boolean forceFrontCaching) {
this.forceFrontCaching = forceFrontCaching;
}

public void setWantToGetException(boolean wantToGetException) {
this.wantToGetException = wantToGetException;
}

public void setAllowNullValues(boolean allowNullValues) {
this.allowNullValues = allowNullValues;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@
import org.springframework.beans.factory.InitializingBean;
import org.springframework.util.Assert;

/**
* FactoryBean for creating an {@link net.spy.memcached.ArcusClientPool} bean in xml configuration.
*/
public class ArcusClientFactoryBean implements FactoryBean<ArcusClientPool>,
DisposableBean, InitializingBean {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@
@SuppressWarnings("DeprecatedIsStillUsed")
public class ArcusCacheConfiguration {

static final long DEFAULT_TIMEOUT_MILLISECONDS = 700L;
static final boolean DEFAULT_WANT_TO_GET_EXCEPTION = false;
static final boolean DEFAULT_ALLOW_NULL_VALUES = true;
public static final long DEFAULT_TIMEOUT_MILLISECONDS = 700L;
public static final boolean DEFAULT_WANT_TO_GET_EXCEPTION = false;
public static final boolean DEFAULT_ALLOW_NULL_VALUES = true;

private String serviceId = "";
@Nullable
Expand All @@ -46,9 +46,6 @@ public class ArcusCacheConfiguration {
private boolean wantToGetException = DEFAULT_WANT_TO_GET_EXCEPTION;
private boolean allowNullValues = DEFAULT_ALLOW_NULL_VALUES;

public ArcusCacheConfiguration() {
}

public ArcusCacheConfiguration withServiceId(String serviceId) {
Assert.notNull(serviceId, "ServiceId must not be null.");
this.serviceId = serviceId;
Expand Down
10 changes: 5 additions & 5 deletions src/test/resources/arcus_spring_arcusCacheManager_test.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
p:serviceCode="#{arcusConfig['serviceCode']}"
p:poolSize="4"/>

<bean id="default-cache" class="com.navercorp.arcus.spring.cache.ArcusCacheConfiguration"
<bean id="default-cache-config" class="com.navercorp.arcus.spring.ArcusCacheConfigurationFactoryBean"
p:serviceId="test-service-id"
p:prefix="test-prefix"
p:expireSeconds="1"
Expand All @@ -26,11 +26,11 @@

<bean id="arcusCacheManagerFromClient" class="com.navercorp.arcus.spring.cache.ArcusCacheManager">
<constructor-arg ref="arcusClient"/>
<constructor-arg ref="default-cache"/>
<constructor-arg ref="default-cache-config"/>
<constructor-arg>
<map>
<entry key="pre-defined-cache">
<bean parent="default-cache"
<bean parent="default-cache-config"
p:expireSeconds="2"/>
</entry>
</map>
Expand All @@ -44,11 +44,11 @@
<bean class="net.spy.memcached.ConnectionFactoryBuilder"/>
</constructor-arg>
<constructor-arg value="4"/>
<constructor-arg ref="default-cache"/>
<constructor-arg ref="default-cache-config"/>
<constructor-arg>
<map>
<entry key="pre-defined-cache">
<bean parent="default-cache"
<bean parent="default-cache-config"
p:expireSeconds="2"/>
</entry>
</map>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
p:url="#{arcusConfig['url']}"
p:serviceCode="#{arcusConfig['serviceCode']}"
p:poolSize="4"/>
<bean id="arcusCacheConfiguration" class="com.navercorp.arcus.spring.cache.ArcusCacheConfiguration"
<bean id="arcusCacheConfiguration" class="com.navercorp.arcus.spring.ArcusCacheConfigurationFactoryBean"
p:timeoutMilliSeconds="500"
p:expireSeconds="3000"
p:serviceId="testService-"
Expand Down
4 changes: 2 additions & 2 deletions src/test/resources/arcus_spring_arcusCache_test.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
p:serviceCode="#{arcusConfig['serviceCode']}"
p:poolSize="4"/>

<bean id="arcusCacheConfiguration" class="com.navercorp.arcus.spring.cache.ArcusCacheConfiguration"
<bean id="arcusCacheConfiguration" class="com.navercorp.arcus.spring.ArcusCacheConfigurationFactoryBean"
p:timeoutMilliSeconds="500"
p:expireSeconds="3000"
p:serviceId="testService-"
Expand All @@ -26,7 +26,7 @@
<constructor-arg name="configuration" ref="arcusCacheConfiguration"/>
</bean>

<bean id="configWithoutAllowingNullValue" class="com.navercorp.arcus.spring.cache.ArcusCacheConfiguration"
<bean id="configWithoutAllowingNullValue" class="com.navercorp.arcus.spring.ArcusCacheConfigurationFactoryBean"
p:allowNullValues="false"
p:timeoutMilliSeconds="500"
p:expireSeconds="3000"
Expand Down
2 changes: 1 addition & 1 deletion src/test/resources/arcus_spring_basic_context_test.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
p:serviceCode="#{arcusConfig['serviceCode']}"
p:poolSize="4"/>

<bean id="arcusCacheConfiguration" class="com.navercorp.arcus.spring.cache.ArcusCacheConfiguration"
<bean id="arcusCacheConfiguration" class="com.navercorp.arcus.spring.ArcusCacheConfigurationFactoryBean"
p:timeoutMilliSeconds="500"
p:expireSeconds="3000"
p:serviceId="testService-"
Expand Down

0 comments on commit dd0b588

Please sign in to comment.