New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JCache CacheResultInterceptor does not allow null values to be cached [SPR-13641] #18218

Closed
spring-issuemaster opened this Issue Nov 4, 2015 · 2 comments

Comments

Projects
None yet
2 participants
@spring-issuemaster
Copy link
Collaborator

spring-issuemaster commented Nov 4, 2015

Rosendo Alvarez opened SPR-13641 and commented

When using jcache annotations to cache the results of a method call using ehcache as the caching implementation, the caching of null values is not allowed even though the JCacheCacheManager explicitly has an option to "allowNullValues".

App context:

<cache:annotation-driven />
<bean id="cacheManager" class="org.springframework.cache.jcache.JCacheCacheManager">
	<property name="allowNullValues" value="true" />
</bean>

dependencies:

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context-support</artifactId>
</dependency>
<dependency>
	<groupId>org.ehcache</groupId>
	<artifactId>jcache</artifactId>
	<version>1.0.1</version>
</dependency>
<dependency>
	<groupId>net.sf.ehcache</groupId>
	<artifactId>ehcache</artifactId>
	<version>2.10.1</version>
</dependency>
@CacheResult(cacheName = "reserveTypes")
public String findReserveTypeByName(String reserveTypeName) {
	if (reserveTypeName == "test") {
logger.info("This is not being retrieved from cache.");
		return null;
	}
return "this will be cached";
}

Affects: 4.2.2

Attachments:

1 votes, 3 watchers

@spring-issuemaster

This comment has been minimized.

Copy link
Collaborator Author

spring-issuemaster commented Nov 9, 2015

Stéphane Nicoll commented

it should be noted that this only happens with the standard annotations for some reason. If you use @Cacheable this works fine now.

@spring-issuemaster

This comment has been minimized.

Copy link
Collaborator Author

spring-issuemaster commented Nov 9, 2015

Stéphane Nicoll commented

This is now fixed. Please note that the JCache spec does not allow you to store "null" in a JSR-107 cache so sensu stricto you're not spec compliant if that's you want to do.

That being said, it's just a detail and we could store a placeholder instead of null. That's what we were doing before anyway, the only problem that I just fixed is that the JSR-107 annotations interceptor did not allow that.

It does now, can you give the next 4.2.3.BUILD-SNAPSHOT a try please? Should be available in the next couple of hours.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment