Yevgeny Zaspitsky has uploaded a new change for review.

Change subject: engine: move Injector to vdsbroker
......................................................................

engine: move Injector to vdsbroker

1. add CDI functionality to vdsbroker
2. move Injector to vdsbroker

Change-Id: I0009744272e5eef1ca505d4d5fd8030058c40f33
Signed-off-by: Yevgeny Zaspitsky <yzasp...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/Backend.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandsFactory.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkHelper.java
D 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/Injector.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/NetworkValidator.java
A 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/di/Injector.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/ResourceManager.java
A backend/manager/modules/vdsbroker/src/main/resources/META-INF/beans.xml
8 files changed, 112 insertions(+), 97 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/38/34138/11

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/Backend.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/Backend.java
index 20c4c52..03cdd6e 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/Backend.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/Backend.java
@@ -62,7 +62,6 @@
 import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
 import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
-import org.ovirt.engine.core.bll.utils.Injector;
 import org.ovirt.engine.core.common.utils.SimpleDependecyInjector;
 import org.ovirt.engine.core.common.utils.customprop.VmPropertiesUtils;
 import org.ovirt.engine.core.compat.DateTime;
@@ -70,6 +69,7 @@
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.dal.dbbroker.generic.DBConfigUtils;
 import org.ovirt.engine.core.dal.job.ExecutionMessageDirector;
+import org.ovirt.engine.core.di.Injector;
 import org.ovirt.engine.core.searchbackend.BaseConditionFieldAutoCompleter;
 import org.ovirt.engine.core.searchbackend.OsValueAutoCompleter;
 import org.ovirt.engine.core.utils.EngineLocalConfig;
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandsFactory.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandsFactory.java
index 1d8ce46..6d410a1 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandsFactory.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandsFactory.java
@@ -9,18 +9,17 @@
 
 import org.ovirt.engine.core.bll.context.CommandContext;
 import org.ovirt.engine.core.bll.context.EngineContext;
-import org.ovirt.engine.core.bll.utils.Injector;
 import org.ovirt.engine.core.common.action.VdcActionParametersBase;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
 import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.di.Injector;
 import org.ovirt.engine.core.utils.ReflectionUtils;
 import org.ovirt.engine.core.utils.log.Log;
 import org.ovirt.engine.core.utils.log.LogFactory;
 
 public final class CommandsFactory {
-    private static final Injector injector = new Injector();
     private static final String CLASS_NAME_FORMAT = "%1$s.%2$s%3$s";
     private static final String CommandSuffix = "Command";
     private static final String QueryPrefix = "Query";
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkHelper.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkHelper.java
index fc9b5f5..426addd 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkHelper.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkHelper.java
@@ -9,7 +9,6 @@
 import org.ovirt.engine.core.bll.context.CommandContext;
 import org.ovirt.engine.core.bll.network.NetworkParametersBuilder;
 import org.ovirt.engine.core.bll.network.RemoveNetworkParametersBuilder;
-import org.ovirt.engine.core.bll.utils.Injector;
 import org.ovirt.engine.core.bll.utils.VersionSupport;
 import org.ovirt.engine.core.common.VdcObjectType;
 import org.ovirt.engine.core.common.action.VdcActionParametersBase;
@@ -20,6 +19,7 @@
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.compat.Version;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
+import org.ovirt.engine.core.di.Injector;
 import org.ovirt.engine.core.utils.NetworkUtils;
 
 /**
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/Injector.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/Injector.java
deleted file mode 100644
index 1d06274..0000000
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/Injector.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package org.ovirt.engine.core.bll.utils;
-
-import javax.annotation.PostConstruct;
-import javax.enterprise.inject.spi.AnnotatedType;
-import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.BeanManager;
-import javax.enterprise.inject.spi.InjectionTarget;
-import javax.inject.Inject;
-import javax.inject.Singleton;
-
-import org.ovirt.engine.core.bll.CommandBase;
-import org.ovirt.engine.core.common.action.VdcActionParametersBase;
-
-/**
- * an application wide interaction point with the CDI container mostly to gap 
all the existing unmanged code
- * or for unmanaged code which wants interaction with managed beans.
- * Typically this injector could be used anywhere to get a manage instance 
from instances which
- * aren't managed like some utility singletons etc
- */
-@Singleton
-public class Injector {
-
-    private static Injector injector;
-
-    @Inject
-    private BeanManager manager;
-
-    @PostConstruct
-    private void init() {
-        injector = this;
-    }
-
-    /**
-     * This method will take an instance and will fulfill all its 
dependencies, which are members
-     * annotated with <code>@Inject</code>.
-     * @param instance unmanaged CDI bean, essentially a regular object which 
is not managed by
-     *                  the CDI container.
-     * @param <T> an unmanaged CDI instance with some members containing 
<code>@Inject</code> annotated
-     *           members
-     */
-    public static <T extends  CommandBase<? extends VdcActionParametersBase>> 
T injectMembers(T instance) {
-        AnnotatedType type = 
injector.manager.createAnnotatedType(instance.getClass());
-        InjectionTarget injectionTarget = 
injector.manager.createInjectionTarget(type);
-        injectionTarget.inject(instance, 
injector.manager.createCreationalContext(null));
-        injectionTarget.postConstruct(instance);
-        return instance;
-    }
-
-    /**
-     * This method will fetch a managed CDI bean from the CDI container.
-     * Using this method should help us bridge all places where we are in 
unmanaged instances
-     * and we want an already managed instance. e.g all our Singletons 
getInstance methods are candidates for this usage,
-     * meaning we Make the Singleton a manged bean but let the existing code 
still
-     * get a reference by invoking getInstance which delegate to this method.
-     * @param clazz the Runtime class representing the desired instance
-     * @param <T>
-     * @return the instance of type <code><T></T></code> which is manged by 
the CDI container
-     */
-    public static <T extends Object> T get(Class<T> clazz) {
-        return injector.instanceOf(clazz);
-    }
-
-    /**
-     * convenience method, good for mocking and whoever holds a direct 
instance of Injector in hand.<br>
-     * after all its a jdk "bug" to call a static method on an instance.<br>
-     *{@link Injector#get(Class)} should supply the same behaiour exactly
-     * @param clazz
-     * @param <T>
-     * @return instance of T
-     * @see #get(Class)
-     */
-    public <T extends Object> T instanceOf(Class<T> clazz) {
-        Bean bean = injector.manager.getBeans(clazz).iterator().next();
-        return (T) injector.manager.getReference(bean, clazz, 
injector.manager.createCreationalContext(bean));
-    }
-}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/NetworkValidator.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/NetworkValidator.java
index 4766870..bb7c7ec 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/NetworkValidator.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/NetworkValidator.java
@@ -5,7 +5,6 @@
 
 import org.ovirt.engine.core.bll.ValidationResult;
 import org.ovirt.engine.core.bll.network.cluster.ManagementNetworkUtil;
-import org.ovirt.engine.core.bll.utils.Injector;
 import org.ovirt.engine.core.common.FeatureSupported;
 import org.ovirt.engine.core.common.businessentities.IscsiBond;
 import org.ovirt.engine.core.common.businessentities.Nameable;
@@ -15,6 +14,7 @@
 import org.ovirt.engine.core.common.businessentities.network.Network;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
+import org.ovirt.engine.core.di.Injector;
 import org.ovirt.engine.core.utils.NetworkUtils;
 import org.ovirt.engine.core.utils.ReplacementUtils;
 
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/di/Injector.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/di/Injector.java
new file mode 100644
index 0000000..36cd588
--- /dev/null
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/di/Injector.java
@@ -0,0 +1,92 @@
+package org.ovirt.engine.core.di;
+
+import javax.annotation.PostConstruct;
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.InjectionTarget;
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+/**
+ * an application wide interaction point with the CDI container mostly to gap 
all the existing unmanaged code
+ * or for unmanaged code which wants interaction with managed beans.
+ * Typically this injector could be used anywhere to get a manage instance 
from instances which
+ * aren't managed like some utility singletons etc
+ */
+@Singleton
+public class Injector {
+
+    private static Injector injector;
+
+    @Inject
+    private BeanManager manager;
+
+    @PostConstruct
+    private void init() {
+        injector = this;
+    }
+
+    /**
+     * This method will take an instance and will fulfill all its 
dependencies, which are members
+     * annotated with <code>@Inject</code>.
+     *
+     * @param instance
+     *            unmanaged CDI bean, essentially a regular object which is 
not managed by
+     *            the CDI container.
+     * @param <T>
+     *            an unmanaged CDI instance with some members containing 
<code>@Inject</code> annotated
+     *            members
+     */
+    public static <T> T injectMembers(T instance) {
+        final BeanManager manager = injector.getManager();
+        @SuppressWarnings("unchecked")
+        final Class<T> clazz = (Class<T>) instance.getClass();
+        AnnotatedType<T> type = manager.createAnnotatedType(clazz);
+        InjectionTarget<T> injectionTarget = 
manager.createInjectionTarget(type);
+        final CreationalContext<T> creationalContext = 
manager.createCreationalContext(null);
+        injectionTarget.inject(instance, creationalContext);
+        injectionTarget.postConstruct(instance);
+        return instance;
+    }
+
+    /**
+     * This method will fetch a managed CDI bean from the CDI container.
+     * Using this method should help us bridge all places where we are in 
unmanaged instances
+     * and we want an already managed instance. e.g all our Singletons 
getInstance methods are candidates for this
+     * usage,
+     * meaning we Make the Singleton a manged bean but let the existing code 
still
+     * get a reference by invoking getInstance which delegate to this method.
+     *
+     * @param clazz
+     *            the Runtime class representing the desired instance
+     * @param <T>
+     * @return the instance of type <code><T></T></code> which is manged by 
the CDI container
+     */
+    public static <T extends Object> T get(Class<T> clazz) {
+        return injector.instanceOf(clazz);
+    }
+
+    /**
+     * convenience method, good for mocking and whoever holds a direct 
instance of Injector in hand.<br>
+     * after all its a jdk "bug" to call a static method on an instance.<br>
+     * {@link Injector#get(Class)} should supply the same behaiour exactly
+     *
+     * @param clazz
+     * @param <T>
+     * @return instance of T
+     * @see #get(Class)
+     */
+    @SuppressWarnings("unchecked")
+    public <T extends Object> T instanceOf(Class<T> clazz) {
+        final BeanManager manager = injector.getManager();
+        final Bean<T> bean = (Bean<T>) 
manager.getBeans(clazz).iterator().next();
+        final CreationalContext<T> creationalContext = 
manager.createCreationalContext(bean);
+        return (T) manager.getReference(bean, clazz, creationalContext);
+    }
+
+    private BeanManager getManager() {
+        return manager;
+    }
+}
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/ResourceManager.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/ResourceManager.java
index 4d425a2..cc21d83 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/ResourceManager.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/ResourceManager.java
@@ -36,6 +36,7 @@
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector;
 import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase;
+import org.ovirt.engine.core.di.Injector;
 import org.ovirt.engine.core.utils.ReflectionUtils;
 import org.ovirt.engine.core.utils.collections.MultiValueMapUtils;
 import org.ovirt.engine.core.utils.ejb.BeanProxyType;
@@ -363,22 +364,21 @@
 
     /**
      * Create the command which needs to run.
+     *
      * @param <P>
      * @param commandType
      * @param parameters
      * @return The command, or null if it can't be created.
      */
-    private <P extends VDSParametersBase> VDSCommandBase<P> CreateCommand(
-            VDSCommandType commandType, P parameters) {
+    private <P extends VDSParametersBase> VDSCommandBase<P> 
createCommand(VDSCommandType commandType, P parameters) {
         try {
             @SuppressWarnings("unchecked")
-            Class<VDSCommandBase<P>> type =
-                    (Class<VDSCommandBase<P>>) 
Class.forName(GetCommandTypeName(commandType));
-            Constructor<VDSCommandBase<P>> constructor =
-                    ReflectionUtils.findConstructor(type, 
parameters.getClass());
+            Class<VDSCommandBase<P>> type = (Class<VDSCommandBase<P>>) 
Class.forName(GetCommandTypeName(commandType));
+            Constructor<VDSCommandBase<P>> constructor = 
ReflectionUtils.findConstructor(type, parameters.getClass());
 
             if (constructor != null) {
-                return constructor.newInstance(new Object[] { parameters });
+                final VDSCommandBase<P> newCommandInstance = 
constructor.newInstance(new Object[] { parameters });
+                return Injector.injectMembers(newCommandInstance);
             }
         } catch (Exception e) {
             if (e.getCause() != null) {
@@ -390,17 +390,17 @@
         return null;
     }
 
-    private <P extends VdsIdVDSCommandParametersBase> FutureVDSCommand 
createFutureCommand(FutureVDSCommandType commandType,
-            P parameters) {
+    private <P extends VdsIdVDSCommandParametersBase> FutureVDSCommand<P> 
createFutureCommand(FutureVDSCommandType commandType,
+                                                                               
               P parameters) {
         try {
-            Class<FutureVDSCommand> type =
-                    (Class<FutureVDSCommand>) 
Class.forName(commandType.getFullyQualifiedClassName());
-            Constructor<FutureVDSCommand> constructor =
-                    ReflectionUtils.findConstructor(type,
-                            parameters.getClass());
+            @SuppressWarnings("unchecked")
+            Class<FutureVDSCommand<P>> type =
+                    (Class<FutureVDSCommand<P>>) 
Class.forName(commandType.getFullyQualifiedClassName());
+            Constructor<FutureVDSCommand<P>> constructor = 
ReflectionUtils.findConstructor(type, parameters.getClass());
 
             if (constructor != null) {
-                return constructor.newInstance(new Object[] { parameters });
+                final FutureVDSCommand<P> newCommandInstance = 
constructor.newInstance(new Object[] { parameters });
+                return Injector.injectMembers(newCommandInstance);
             }
         } catch (Exception e) {
             if (e.getCause() != null) {
@@ -415,7 +415,7 @@
 
     public <P extends VDSParametersBase> VDSReturnValue 
runVdsCommand(VDSCommandType commandType, P parameters) {
         // try run vds command
-        VDSCommandBase<P> command = CreateCommand(commandType, parameters);
+        VDSCommandBase<P> command = createCommand(commandType, parameters);
 
         if (command != null) {
             command.execute();
diff --git 
a/backend/manager/modules/vdsbroker/src/main/resources/META-INF/beans.xml 
b/backend/manager/modules/vdsbroker/src/main/resources/META-INF/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/backend/manager/modules/vdsbroker/src/main/resources/META-INF/beans.xml


-- 
To view, visit http://gerrit.ovirt.org/34138
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I0009744272e5eef1ca505d4d5fd8030058c40f33
Gerrit-PatchSet: 11
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Yevgeny Zaspitsky <yzasp...@redhat.com>
Gerrit-Reviewer: Alona Kaplan <alkap...@redhat.com>
Gerrit-Reviewer: Roy Golan <rgo...@redhat.com>
Gerrit-Reviewer: automat...@ovirt.org
Gerrit-Reviewer: oVirt Jenkins CI Server
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to