SGF-92 - Improved error message in case no region can be found.

If the region referenced by an entity managed by a repository cannot be found in the application context we now throw an exception with an error message indicating the missing configuration.
This commit is contained in:
Oliver Gierke
2012-05-07 13:10:45 +02:00
parent f3cf6f013e
commit 78820a2a70
2 changed files with 17 additions and 1 deletions

View File

@@ -93,9 +93,14 @@ public class GemfireRepositoryFactory extends RepositoryFactorySupport {
private GemfireTemplate getTemplate(RepositoryMetadata metadata) {
Class<?> domainClass = metadata.getDomainType();
GemfirePersistentEntity<?> entity = context.getPersistentEntity(domainClass);
Region<?, ?> region = regions.getRegion(domainClass);
GemfirePersistentEntity<?> entity = context.getPersistentEntity(domainClass);
if (region == null) {
throw new IllegalStateException(String.format("No region '%s' found for domain class %s! Make sure you have "
+ "configured a Gemfire region of that name in your application context!", entity.getRegionName(), domainClass));
}
Class<?> regionKeyType = region.getAttributes().getKeyConstraint();
Class<?> entityIdType = metadata.getIdType();

View File

@@ -15,10 +15,13 @@
*/
package org.springframework.data.gemfire.repository.support;
import org.junit.Test;
import org.springframework.data.gemfire.mapping.Regions;
import org.springframework.data.gemfire.repository.sample.PersonRepository;
import org.springframework.test.context.ContextConfiguration;
import com.gemstone.bp.edu.emory.mathcs.backport.java.util.Collections;
/**
* Integration test for {@link GemfireRepositoryFactory}.
*
@@ -33,4 +36,12 @@ public class GemfireRepositoryFactoryIntegrationTests extends AbstractGemfireRep
GemfireRepositoryFactory factory = new GemfireRepositoryFactory(regions, null);
return factory.getRepository(PersonRepository.class);
}
@Test(expected = IllegalStateException.class)
@SuppressWarnings("unchecked")
public void throwsExceptionIfReferencedRegionIsNotConfigured() {
GemfireRepositoryFactory factory = new GemfireRepositoryFactory(Collections.emptySet(), null);
factory.getRepository(PersonRepository.class);
}
}