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

Reply via email to