Roy Golan has uploaded a new change for review. Change subject: core: enable ConfigValues injection ......................................................................
core: enable ConfigValues injection a draft of how to inject config values instead of interacting with the Config class directly; @Inject @ConfigValue(ConfigValues.vdsRetries) Integer vdsRetries; this paradaigm may be suited for Command injection as well (and throw the command factory all together) Change-Id: I63c4d5f6239d5f4fd7737f9637d1a6e999020b1b Signed-off-by: Roy Golan <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/BllCDIAdapter.java A backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/DependencyProducers.java A backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/InjectionTest.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/Config.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValue.java 5 files changed, 116 insertions(+), 1 deletion(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/39/29539/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/BllCDIAdapter.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/BllCDIAdapter.java index c397219..038cf71 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/BllCDIAdapter.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/BllCDIAdapter.java @@ -1,8 +1,12 @@ package org.ovirt.engine.core.bll.utils; +import javax.enterprise.inject.Any; import javax.enterprise.inject.Produces; import javax.enterprise.inject.spi.InjectionPoint; +import javax.inject.Inject; +import org.ovirt.engine.core.common.config.Config; +import org.ovirt.engine.core.common.config.ConfigValue; import org.ovirt.engine.core.dal.dbbroker.DbFacade; import org.ovirt.engine.core.utils.log.Log; import org.ovirt.engine.core.utils.log.LogFactory; @@ -25,6 +29,9 @@ @Produces DbFacade dbFacade = DbFacade.getInstance(); + @Inject + private Config config; + /** * this producer enables injection of Log instance. Its not * intended to be used as protected instance as the runtime instance is the declaring class so @@ -42,6 +49,11 @@ return LogFactory.getLog(injectionPoint.getMember().getDeclaringClass()); } + @Produces @ConfigValue + public Integer produceConfigValue(InjectionPoint injectionPoint) { + return config.get(injectionPoint.getAnnotated().getAnnotation(ConfigValue.class).value()); + } + private BllCDIAdapter() { // hide me diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/DependencyProducers.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/DependencyProducers.java new file mode 100644 index 0000000..9d8c220 --- /dev/null +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/DependencyProducers.java @@ -0,0 +1,34 @@ +package org.ovirt.engine.core.bll; + +import org.ovirt.engine.core.common.config.Config; +import org.ovirt.engine.core.common.config.ConfigValues; +import org.ovirt.engine.core.common.config.DataType; +import org.ovirt.engine.core.utils.ConfigUtilsBase; + +public class DependencyProducers { + + public static class DummyConfig extends Config { + + public DummyConfig() { + setConfigUtils(new ConfigUtilsBase() { + @Override protected void setValue(String name, String value, String version) { + + } + + @Override protected Object getValue(DataType type, String name, String defaultValue) { + return null; + } + + @Override public <T> T getValue(ConfigValues configValue, String version) { + switch (configValue) { + case vdsRetries: + return (T) Integer.valueOf(3); + default: + return null; + } + } + }); + } + } + +} diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/InjectionTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/InjectionTest.java new file mode 100644 index 0000000..f1e17b7 --- /dev/null +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/InjectionTest.java @@ -0,0 +1,38 @@ +package org.ovirt.engine.core.bll; + +import org.jboss.arquillian.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.asset.EmptyAsset; +import org.jboss.shrinkwrap.api.spec.JavaArchive; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.ovirt.engine.core.bll.utils.BllCDIAdapter; +import org.ovirt.engine.core.common.config.ConfigValue; +import org.ovirt.engine.core.common.config.ConfigValues; + +import javax.inject.Inject; + +@RunWith(Arquillian.class) +public class InjectionTest { + + @Inject + DependencyProducers dependencyProducers; + + @Inject @ConfigValue(ConfigValues.vdsRetries) + Integer vdsRetries; + + @Test + public void testConfigInject() { + Assert.assertEquals(3, vdsRetries.intValue()); + } + + @Deployment + public static JavaArchive createDeployment() { + return ShrinkWrap.create(JavaArchive.class) + .addClasses( DependencyProducers.class, BllCDIAdapter.class) + .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); + } + +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/Config.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/Config.java index 4b35df7..9c512ee 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/Config.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/Config.java @@ -1,9 +1,12 @@ package org.ovirt.engine.core.common.config; +import javax.inject.Singleton; + /** * Config Class */ -public final class Config { +@Singleton +public class Config { private static IConfigUtilsInterface _configUtils; public static IConfigUtilsInterface getConfigUtils() { @@ -18,10 +21,19 @@ return Config.<T> getValue(value, ConfigCommon.defaultConfigurationVersion); } + public <T> T get(ConfigValues value, String version) { + return getConfigUtils().<T>getValue(value, version); + } + + public <T> T get(ConfigValues value) { + return Config.<T> getValue(value, ConfigCommon.defaultConfigurationVersion); + } + public static <T> T getValue(ConfigValues value, String version) { return getConfigUtils().<T>getValue(value, version); } + /** * Fetch the oVirtISOsRepositoryPath configuration value and, if it is not an absolute path, resolve it relative to * the DataDir configuration value. diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValue.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValue.java new file mode 100644 index 0000000..6d7b3de --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValue.java @@ -0,0 +1,19 @@ +package org.ovirt.engine.core.common.config; + +import javax.enterprise.util.Nonbinding; +import javax.inject.Qualifier; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.ElementType.TYPE; + +@Qualifier +@Retention(RetentionPolicy.RUNTIME) +@Target({ TYPE, METHOD, FIELD, PARAMETER}) +public @interface ConfigValue { + @Nonbinding ConfigValues value() default ConfigValues.Invalid; +} -- To view, visit http://gerrit.ovirt.org/29539 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I63c4d5f6239d5f4fd7737f9637d1a6e999020b1b Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Roy Golan <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
