You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ji...@apache.org on 2018/05/02 14:57:25 UTC
[geode] branch develop updated: GEODE-5165: add capability to limit
the packages to scan for annotation. (#1893)
This is an automated email from the ASF dual-hosted git repository.
jinmeiliao pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/develop by this push:
new 9514935 GEODE-5165: add capability to limit the packages to scan for annotation. (#1893)
9514935 is described below
commit 9514935ba82aa37ba03f7c3eee706d8482684b4a
Author: jinmeiliao <ji...@pivotal.io>
AuthorDate: Wed May 2 07:57:19 2018 -0700
GEODE-5165: add capability to limit the packages to scan for annotation. (#1893)
---
.../InternalConfigurationPersistenceService.java | 13 ++++++++++++-
.../geode/internal/lang/SystemPropertyHelper.java | 12 +++++++++++-
...nternalConfigurationPersistenceServiceTest.java | 22 ++++++++++++++++++++++
3 files changed, 45 insertions(+), 2 deletions(-)
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceService.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceService.java
index 489801b..a6d7380 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceService.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceService.java
@@ -88,6 +88,7 @@ import org.apache.geode.internal.cache.persistence.PersistentMemberManager;
import org.apache.geode.internal.cache.persistence.PersistentMemberPattern;
import org.apache.geode.internal.cache.xmlcache.CacheXmlGenerator;
import org.apache.geode.internal.config.JAXBService;
+import org.apache.geode.internal.lang.SystemPropertyHelper;
import org.apache.geode.internal.logging.LogService;
import org.apache.geode.management.internal.beans.FileUploader;
import org.apache.geode.management.internal.cli.CliUtil;
@@ -179,13 +180,23 @@ public class InternalConfigurationPersistenceService implements ConfigurationPer
}
// else, scan the classpath to find all the classes annotated with XSDRootElement
else {
+ String[] packages = getPackagesToScan();
Set<Class<?>> scannedClasses =
- ClasspathScanLoadHelper.scanClasspathForAnnotation(XSDRootElement.class, "");
+ ClasspathScanLoadHelper.scanClasspathForAnnotation(XSDRootElement.class, packages);
this.jaxbService = new JAXBService(scannedClasses.toArray(new Class[scannedClasses.size()]));
}
jaxbService.validateWithLocalCacheXSD();
}
+ protected String[] getPackagesToScan() {
+ String sysProperty = SystemPropertyHelper.getProperty(SystemPropertyHelper.PACKAGES_TO_SCAN);
+ String[] packages = {""};
+ if (sysProperty != null) {
+ packages = sysProperty.split(",");
+ }
+ return packages;
+ }
+
/**
* Gets or creates (if not created) shared configuration lock service
*/
diff --git a/geode-core/src/main/java/org/apache/geode/internal/lang/SystemPropertyHelper.java b/geode-core/src/main/java/org/apache/geode/internal/lang/SystemPropertyHelper.java
index 91ede6c..7f1848b 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/lang/SystemPropertyHelper.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/lang/SystemPropertyHelper.java
@@ -70,6 +70,16 @@ public class SystemPropertyHelper {
"PERSISTENT_VIEW_RETRY_TIMEOUT_SECONDS";
/**
+ * a comma separated string to list out the packages to scan. If not specified, the entire
+ * classpath is scanned.
+ * This is used by the FastPathScanner to scan for:
+ * 1. XSDRootElement annotation
+ *
+ * @since Geode 1.7.0
+ */
+ public static final String PACKAGES_TO_SCAN = "packagesToScan";
+
+ /**
* This method will try to look up "geode." and "gemfire." versions of the system property. It
* will check and prefer "geode." setting first, then try to check "gemfire." setting.
*
@@ -113,7 +123,7 @@ public class SystemPropertyHelper {
return property != null ? Optional.of(property) : Optional.empty();
}
- private static String getProperty(String name) {
+ public static String getProperty(String name) {
String property = getGeodeProperty(name);
return property != null ? property : getGemfireProperty(name);
}
diff --git a/geode-core/src/test/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceServiceTest.java b/geode-core/src/test/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceServiceTest.java
index 1e520db..b0fa995 100644
--- a/geode-core/src/test/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceServiceTest.java
+++ b/geode-core/src/test/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceServiceTest.java
@@ -28,7 +28,9 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
+import org.junit.contrib.java.lang.system.RestoreSystemProperties;
import org.junit.experimental.categories.Category;
import org.apache.geode.cache.Region;
@@ -38,6 +40,7 @@ import org.apache.geode.cache.configuration.RegionConfig;
import org.apache.geode.internal.config.JAXBServiceTest;
import org.apache.geode.internal.config.JAXBServiceTest.ElementOne;
import org.apache.geode.internal.config.JAXBServiceTest.ElementTwo;
+import org.apache.geode.internal.lang.SystemPropertyHelper;
import org.apache.geode.management.internal.configuration.domain.Configuration;
import org.apache.geode.test.junit.categories.UnitTest;
@@ -47,6 +50,9 @@ public class InternalConfigurationPersistenceServiceTest {
private InternalConfigurationPersistenceService service, service2;
private Configuration configuration;
+ @Rule
+ public RestoreSystemProperties restore = new RestoreSystemProperties();
+
@Before
public void setUp() throws Exception {
service = spy(new InternalConfigurationPersistenceService(CacheConfig.class, ElementOne.class,
@@ -174,4 +180,20 @@ public class InternalConfigurationPersistenceServiceTest {
verify(region).put(eq("non-existing-group"), any());
}
+
+ @Test
+ public void getPackagesToScanWithoutSystemProperty() {
+ String[] packages = service.getPackagesToScan();
+ assertThat(packages).hasSize(1);
+ assertThat(packages[0]).isEqualTo("");
+ }
+
+ @Test
+ public void getPackagesToScanWithSystemProperty() {
+ System.setProperty("geode." + SystemPropertyHelper.PACKAGES_TO_SCAN,
+ "org.apache.geode,io.pivotal");
+ String[] packages = service.getPackagesToScan();
+ assertThat(packages).hasSize(2);
+ assertThat(packages).contains("org.apache.geode", "io.pivotal");
+ }
}
--
To stop receiving notification emails like this one, please contact
jinmeiliao@apache.org.