From 567fa43e60fee63e3bf2aae0f422ebe67f454896 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Mon, 12 Mar 2018 16:41:04 +0100 Subject: [PATCH] DATAREDIS-785 - Export composable repositories via CDI. We now export composable repositories through our CDI extension. Repositories can now be customized either by a single custom implementation (as it was before) and by providing fragment interfaces along their fragment implementation. This change aligns CDI support with the existing RepositoryFactory support we provide within a Spring application context. --- .../redis/repository/cdi/RedisRepositoryBean.java | 14 ++++++++------ ...onRepositoryCustom.java => PersonFragment.java} | 3 +-- ...RepositoryImpl.java => PersonFragmentImpl.java} | 3 +-- .../redis/repository/cdi/PersonRepository.java | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) rename src/test/java/org/springframework/data/redis/repository/cdi/{PersonRepositoryCustom.java => PersonFragment.java} (95%) rename src/test/java/org/springframework/data/redis/repository/cdi/{PersonRepositoryImpl.java => PersonFragmentImpl.java} (91%) diff --git a/src/main/java/org/springframework/data/redis/repository/cdi/RedisRepositoryBean.java b/src/main/java/org/springframework/data/redis/repository/cdi/RedisRepositoryBean.java index 40d079a22..ac3b193d8 100644 --- a/src/main/java/org/springframework/data/redis/repository/cdi/RedisRepositoryBean.java +++ b/src/main/java/org/springframework/data/redis/repository/cdi/RedisRepositoryBean.java @@ -55,18 +55,20 @@ public class RedisRepositoryBean extends CdiRepositoryBean { Class repositoryType, BeanManager beanManager, @Nullable CustomRepositoryImplementationDetector detector) { super(qualifiers, repositoryType, beanManager, Optional.ofNullable(detector)); + Assert.notNull(keyValueTemplate, "Bean holding keyvalue template must not be null!"); this.keyValueTemplate = keyValueTemplate; } - protected T create(CreationalContext creationalContext, Class repositoryType, - Optional customImplementation) { + /* + * (non-Javadoc) + * @see org.springframework.data.repository.cdi.CdiRepositoryBean#create(javax.enterprise.context.spi.CreationalContext, java.lang.Class) + */ + @Override + protected T create(CreationalContext creationalContext, Class repositoryType) { KeyValueOperations keyValueTemplate = getDependencyInstance(this.keyValueTemplate, KeyValueOperations.class); - RedisRepositoryFactory factory = new RedisRepositoryFactory(keyValueTemplate, RedisQueryCreator.class); - return customImplementation.map(o -> factory.getRepository(repositoryType, o)) - .orElseGet(() -> factory.getRepository(repositoryType)); + return create(() -> new RedisRepositoryFactory(keyValueTemplate, RedisQueryCreator.class), repositoryType); } - } diff --git a/src/test/java/org/springframework/data/redis/repository/cdi/PersonRepositoryCustom.java b/src/test/java/org/springframework/data/redis/repository/cdi/PersonFragment.java similarity index 95% rename from src/test/java/org/springframework/data/redis/repository/cdi/PersonRepositoryCustom.java rename to src/test/java/org/springframework/data/redis/repository/cdi/PersonFragment.java index d0dca8cb9..4ed7a71b9 100644 --- a/src/test/java/org/springframework/data/redis/repository/cdi/PersonRepositoryCustom.java +++ b/src/test/java/org/springframework/data/redis/repository/cdi/PersonFragment.java @@ -13,13 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.springframework.data.redis.repository.cdi; /** * @author Mark Paluch */ -interface PersonRepositoryCustom { +interface PersonFragment { int returnOne(); } diff --git a/src/test/java/org/springframework/data/redis/repository/cdi/PersonRepositoryImpl.java b/src/test/java/org/springframework/data/redis/repository/cdi/PersonFragmentImpl.java similarity index 91% rename from src/test/java/org/springframework/data/redis/repository/cdi/PersonRepositoryImpl.java rename to src/test/java/org/springframework/data/redis/repository/cdi/PersonFragmentImpl.java index 702b729a3..4c2d478e2 100644 --- a/src/test/java/org/springframework/data/redis/repository/cdi/PersonRepositoryImpl.java +++ b/src/test/java/org/springframework/data/redis/repository/cdi/PersonFragmentImpl.java @@ -13,13 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.springframework.data.redis.repository.cdi; /** * @author Mark Paluch */ -public class PersonRepositoryImpl implements PersonRepositoryCustom { +public class PersonFragmentImpl implements PersonFragment { @Override public int returnOne() { diff --git a/src/test/java/org/springframework/data/redis/repository/cdi/PersonRepository.java b/src/test/java/org/springframework/data/redis/repository/cdi/PersonRepository.java index 08d62eb92..735bd85c5 100644 --- a/src/test/java/org/springframework/data/redis/repository/cdi/PersonRepository.java +++ b/src/test/java/org/springframework/data/redis/repository/cdi/PersonRepository.java @@ -24,7 +24,7 @@ import org.springframework.data.repository.cdi.Eager; * @author Mark Paluch */ @Eager -public interface PersonRepository extends CrudRepository, PersonRepositoryCustom { +public interface PersonRepository extends CrudRepository, PersonFragment { List findAll();