Martin Peřina has uploaded a new change for review.

Change subject: core: Fix CDI in dal module to work with EAP/WildFly
......................................................................

core: Fix CDI in dal module to work with EAP/WildFly

1. Removes infra for injecting beans in external JARs introduced in
   I3b3c2c57178b5df4f98b4191ac9a06f9129414d0, because it's incompatible
   with WildFly 8.1

2. Adds beans.xml into dal module to allow automatic beans discovery.

3. Adds parametric constructor to PostgresDbEngineDialect to prevent CDI
   1.0 ambiguity error between constructor and producer method
   DbFacadeLocator.produceDbEngineDialect during automatic bean
   discovery.

Change-Id: I122b02f846cfbb9b861d13792790cf93ca7ee0d6
Bug-Url: https://bugzilla.redhat.com/1121327
Signed-off-by: Martin Perina <mper...@redhat.com>
---
M backend/manager/dependencies/common/pom.xml
D 
backend/manager/dependencies/common/src/main/modules/org/deltaspike/main/module.xml
D 
backend/manager/dependencies/common/src/main/modules/org/reflections/main/module.xml
M backend/manager/modules/bll/pom.xml
D 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/ModuleConfigurationExtension.java
D 
backend/manager/modules/bll/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacadeLocator.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/PostgresDbEngineDialect.java
A backend/manager/modules/dal/src/main/resources/META-INF/beans.xml
D backend/manager/modules/dal/src/test/resources/test-beans.xml
M ear/src/main/resources/META-INF/MANIFEST.MF
M pom.xml
12 files changed, 11 insertions(+), 264 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/51/40151/1

diff --git a/backend/manager/dependencies/common/pom.xml 
b/backend/manager/dependencies/common/pom.xml
index 84c80a6..c0fc456 100644
--- a/backend/manager/dependencies/common/pom.xml
+++ b/backend/manager/dependencies/common/pom.xml
@@ -397,25 +397,6 @@
       <artifactId>cors-filter</artifactId>
       <version>1.0.1</version>
     </dependency>
-
-    <dependency>
-      <groupId>org.apache.deltaspike.core</groupId>
-      <artifactId>deltaspike-core-api</artifactId>
-      <version>${deltaspike.version}</version>
-    </dependency>
-
-    <dependency>
-      <groupId>org.apache.deltaspike.core</groupId>
-      <artifactId>deltaspike-core-impl</artifactId>
-      <version>${deltaspike.version}</version>
-    </dependency>
-
-    <dependency>
-      <groupId>org.reflections</groupId>
-      <artifactId>reflections</artifactId>
-      <version>${reflections.version}</version>
-    </dependency>
-
   </dependencies>
 
   <build>
@@ -788,25 +769,6 @@
                 <artifactId>cors-filter</artifactId>
                 <moduleName>org.ebaysf.web.cors-filter</moduleName>
               </module>
-
-              <module>
-                <groupId>org.apache.deltaspike.core</groupId>
-                <artifactId>deltaspike-core-api</artifactId>
-                <moduleName>org.deltaspike</moduleName>
-              </module>
-
-              <module>
-                <groupId>org.apache.deltaspike.core</groupId>
-                <artifactId>deltaspike-core-impl</artifactId>
-                <moduleName>org.deltaspike</moduleName>
-              </module>
-
-              <module>
-                <groupId>org.reflections</groupId>
-                <artifactId>reflections</artifactId>
-                <moduleName>org.reflections</moduleName>
-              </module>
-
             </modules>
           </configuration>
         </plugin>
diff --git 
a/backend/manager/dependencies/common/src/main/modules/org/deltaspike/main/module.xml
 
b/backend/manager/dependencies/common/src/main/modules/org/deltaspike/main/module.xml
deleted file mode 100644
index 323bb1e..0000000
--- 
a/backend/manager/dependencies/common/src/main/modules/org/deltaspike/main/module.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<module xmlns="urn:jboss:module:1.1" name="org.deltaspike">
-
-    <resources>
-        <resource-root path="deltaspike-core-api.jar" />
-        <resource-root path="deltaspike-core-impl.jar" />
-    </resources>
-
-    <dependencies>
-        <module name="com.google.guava" />
-        <module name="javax.enterprise.api" />
-        <module name="javax.inject.api" />
-    </dependencies>
-</module>
diff --git 
a/backend/manager/dependencies/common/src/main/modules/org/reflections/main/module.xml
 
b/backend/manager/dependencies/common/src/main/modules/org/reflections/main/module.xml
deleted file mode 100644
index 88d66f9..0000000
--- 
a/backend/manager/dependencies/common/src/main/modules/org/reflections/main/module.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<module xmlns="urn:jboss:module:1.1" name="org.reflections">
-
-    <resources>
-        <resource-root path="reflections.jar" />
-    </resources>
-
-    <dependencies>
-        <module name="com.google.guava" />
-        <module name="org.javassist" />
-        <module name="org.slf4j" />
-    </dependencies>
-</module>
diff --git a/backend/manager/modules/bll/pom.xml 
b/backend/manager/modules/bll/pom.xml
index a90f096..11bdece 100644
--- a/backend/manager/modules/bll/pom.xml
+++ b/backend/manager/modules/bll/pom.xml
@@ -163,29 +163,6 @@
         <artifactId>cdi-api</artifactId>
         <scope>provided</scope>
      </dependency>
-     <dependency>
-         <groupId>org.springframework.boot</groupId>
-         <artifactId>spring-boot-starter-test</artifactId>
-         <version>1.1.4.RELEASE</version>
-         <scope>test</scope>
-     </dependency>
-     <dependency>
-         <groupId>org.apache.deltaspike.core</groupId>
-         <artifactId>deltaspike-core-api</artifactId>
-         <version>${deltaspike.version}</version>
-         <scope>compile</scope>
-     </dependency>
-     <dependency>
-         <groupId>org.apache.deltaspike.core</groupId>
-         <artifactId>deltaspike-core-impl</artifactId>
-         <version>${deltaspike.version}</version>
-         <scope>runtime</scope>
-     </dependency>
-     <dependency>
-         <groupId>org.reflections</groupId>
-         <artifactId>reflections</artifactId>
-         <version>${reflections.version}</version>
-     </dependency>
   </dependencies>
 
   <build>
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/ModuleConfigurationExtension.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/ModuleConfigurationExtension.java
deleted file mode 100644
index 42d6445..0000000
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/ModuleConfigurationExtension.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package org.ovirt.engine.core.bll.utils;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-import javax.enterprise.event.Observes;
-import javax.enterprise.inject.Any;
-import javax.enterprise.inject.spi.AfterBeanDiscovery;
-import javax.enterprise.inject.spi.AnnotatedType;
-import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.BeanManager;
-import javax.enterprise.inject.spi.BeforeBeanDiscovery;
-import javax.enterprise.inject.spi.Extension;
-import javax.enterprise.util.AnnotationLiteral;
-import javax.inject.Named;
-import javax.inject.Singleton;
-
-import org.apache.deltaspike.core.util.bean.BeanBuilder;
-import org.apache.deltaspike.core.util.metadata.builder.AnnotatedTypeBuilder;
-import org.reflections.Reflections;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Strings;
-
-public class ModuleConfigurationExtension implements Extension {
-    private static final Logger log = 
LoggerFactory.getLogger(ModuleConfigurationExtension.class);
-    private final Map<String, AnnotatedType<Object>> beans = new HashMap<>();
-
-    /**
-     * This method is automatically activated by CDI, and loads all classes in 
the org.ovirt package that has NAMED or
-     * SINGLETON annotations.
-     * @param bdd
-     */
-    void readAllConfigurations(final @Observes BeforeBeanDiscovery bdd, 
BeanManager bm) {
-        log.info("Starting to load beans from modules");
-        addBeansFromPackage(bdd, bm, "org.ovirt.engine.core.dal");
-        addBeansFromPackage(bdd, bm, "org.ovirt.engine.core.dao");
-    }
-
-    private void addBeansFromPackage(final BeforeBeanDiscovery bdd, 
BeanManager bm, String packageName) {
-        Reflections reflections = new Reflections(packageName);
-        Set<Class<?>> beanClasses = 
reflections.getTypesAnnotatedWith(Named.class);
-        beanClasses.addAll(reflections.getTypesAnnotatedWith(Singleton.class));
-
-        for (Class<?> bean : beanClasses) {
-            @SuppressWarnings({ "unchecked", "rawtypes" })
-            AnnotatedType<Object> annotatedType = new 
AnnotatedTypeBuilder().readFromType(bean).create();
-            Set<Bean<?>> foundBeans = bm.getBeans(annotatedType.getBaseType(), 
new AnnotationLiteral<Any>() {
-            });
-
-            if (foundBeans.size() == 0) {
-                bdd.addAnnotatedType(annotatedType);
-                String name;
-                Named named = bean.getAnnotation(Named.class);
-                if (named == null || Strings.isNullOrEmpty(named.value())) {
-                    name = bean.getSimpleName();
-                } else {
-                    name = named.value();
-                }
-                beans.put(name, annotatedType);
-            }
-        }
-    }
-
-    /**
-     * This method actually initializes the beans we discovered in 
<code>readAllConfigurations</code>. Again - this
-     * method is automatically activated by CDI
-     * @param abd
-     * @param bm
-     * @throws Exception
-     */
-    public void addCdiBeans(final @Observes AfterBeanDiscovery abd, final 
BeanManager bm) throws Exception {
-        log.info("Starting to initialize beans from modules");
-
-        for (Map.Entry<String, AnnotatedType<Object>> bean : beans.entrySet()) 
{
-            Set<Bean<?>> foundBeans = 
bm.getBeans(bean.getValue().getBaseType());
-            if (foundBeans.size() == 0) {
-                final Bean<Object> cdiBean = createBean(bm, bean.getKey(), 
bean.getValue());
-                abd.addBean(cdiBean);
-                log.debug("Added bean " + cdiBean.getName());
-            }
-        }
-    }
-
-    private static Bean<Object> createBean(final BeanManager bm,
-            final String name,
-            final AnnotatedType<Object> annotatedType)
-            throws Exception {
-        final BeanBuilder<Object> beanBuilder = new BeanBuilder<Object>(bm).
-                readFromType(annotatedType).
-                name(name);
-
-        return beanBuilder.create();
-    }
-}
diff --git 
a/backend/manager/modules/bll/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
 
b/backend/manager/modules/bll/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
deleted file mode 100644
index 2184d5b..0000000
--- 
a/backend/manager/modules/bll/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
+++ /dev/null
@@ -1 +0,0 @@
-org.ovirt.engine.core.bll.utils.ModuleConfigurationExtension
\ No newline at end of file
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacadeLocator.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacadeLocator.java
index c6dbf1e..6770ce8 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacadeLocator.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacadeLocator.java
@@ -2,7 +2,6 @@
 
 import java.io.IOException;
 import java.util.Properties;
-
 import javax.annotation.Resource;
 import javax.enterprise.inject.Produces;
 import javax.inject.Singleton;
@@ -94,7 +93,7 @@
             );
         }
         try {
-            return (DbEngineDialect) Class.forName(dialect).newInstance();
+            return (DbEngineDialect) 
Class.forName(dialect).getDeclaredConstructor(Boolean.TYPE).newInstance(false);
         }
         catch (Exception exception) {
             throw new IllegalStateException(
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/PostgresDbEngineDialect.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/PostgresDbEngineDialect.java
index b38ebb8..1181e83 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/PostgresDbEngineDialect.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/PostgresDbEngineDialect.java
@@ -204,4 +204,14 @@
                 
.append(procNameFromDB).append("(").append(params).append(")}");
         return sqlCommand.toString();
     }
+
+    /**
+     * We need to provide parametrized constructor to prevent CDI 1.0 
ambiguity error between this class and producer
+     * method.
+     *
+     * TODO: This can be changed after movement to CDI >= 1.1 and setting 
bean-discovery-mode="annotated" in beans.xml
+     */
+    @SuppressWarnings("unused")
+    public PostgresDbEngineDialect(boolean value) {
+    }
 }
diff --git a/backend/manager/modules/dal/src/main/resources/META-INF/beans.xml 
b/backend/manager/modules/dal/src/main/resources/META-INF/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/backend/manager/modules/dal/src/main/resources/META-INF/beans.xml
diff --git a/backend/manager/modules/dal/src/test/resources/test-beans.xml 
b/backend/manager/modules/dal/src/test/resources/test-beans.xml
deleted file mode 100644
index 716cf4b..0000000
--- a/backend/manager/modules/dal/src/test/resources/test-beans.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans";
-       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-       xmlns:context="http://www.springframework.org/schema/context";
-
-       xsi:schemaLocation="
-    http://www.springframework.org/schema/beans
-    http://www.springframework.org/schema/beans/spring-beans.xsd
-    http://www.springframework.org/schema/context
-    http://www.springframework.org/schema/context/spring-context.xsd";>
-
-    <context:component-scan base-package="org.ovirt.engine"/>
-    <context:annotation-config/>
-
-    <bean id="dbFacadeLocator" 
class="org.ovirt.engine.core.dal.dbbroker.DbFacadeLocator"/>
-
-    <bean id="sqlExceptionTranslator"
-          
class="org.ovirt.engine.core.dal.dbbroker.CustomSQLErrorCodeSQLExceptionTranslator"/>
-
-    <bean id="dbEngineDialect" factory-bean="dbFacadeLocator" 
factory-method="produceDbEngineDialect"/>
-
-    <bean id="jdbcTemplate" factory-bean="dbFacadeLocator"
-          factory-method="produceJdbcTemplate">
-        <constructor-arg ref="engineDataSource"/>
-        <constructor-arg ref="dbEngineDialect"/>
-        <constructor-arg ref="sqlExceptionTranslator"/>
-    </bean>
-
-    <bean id="callsHandler" 
class="org.ovirt.engine.core.dal.dbbroker.SimpleJdbcCallsHandler">
-        <constructor-arg ref="dbEngineDialect"/>
-        <constructor-arg ref="jdbcTemplate"/>
-    </bean>
-
-    <bean id="dbFacade" class="org.ovirt.engine.core.dal.dbbroker.DbFacade" 
depends-on="daos">
-        <constructor-arg ref="jdbcTemplate"/>
-        <constructor-arg ref="dbEngineDialect"/>
-        <constructor-arg ref="callsHandler"/>
-        <constructor-arg ref="dbFacadeLocator"/>
-    </bean>
-
-    <bean name="transactionManager"
-          
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
-        <constructor-arg ref="engineDataSource"/>
-    </bean>
-
-    <bean id="engineDataSource" 
class="org.ovirt.engine.core.dao.BaseDAOTestCase"
-          factory-method="getDataSource"/>
-
-    <bean id="transactionManagerJPA" 
class="org.springframework.orm.jpa.JpaTransactionManager">
-        <property name="entityManagerFactory" ref="entityManagerFactory" />
-    </bean>
-
-    <bean id="entityManagerFactory"
-        
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
-        <property name="dataSource" ref="engineDataSource" />
-        <property name="packagesToScan"
-            value="org.ovirt.engine.core.common.businessentities" />
-        <property name="jpaVendorAdapter">
-            <bean 
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
-        </property>
-        <property name="jpaProperties">
-            <props>
-                <prop 
key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
-            </props>
-        </property>
-    </bean>
-</beans>
diff --git a/ear/src/main/resources/META-INF/MANIFEST.MF 
b/ear/src/main/resources/META-INF/MANIFEST.MF
index 16c4496..abb7dbb 100644
--- a/ear/src/main/resources/META-INF/MANIFEST.MF
+++ b/ear/src/main/resources/META-INF/MANIFEST.MF
@@ -1,6 +1,5 @@
 Manifest-Version: 1.0
 Dependencies: asm.asm,
- com.google.guava,
  javax.validation.api,
  org.apache.commons.beanutils,
  org.apache.commons.codec,
@@ -11,13 +10,11 @@
  org.apache.xmlrpc,
  org.codehaus.jackson.jackson-core-asl,
  org.codehaus.jackson.jackson-mapper-asl,
- org.deltaspike,
  org.dom4j,
  org.hibernate.validator,
  org.infinispan,
  org.ovirt.engine.core.common,
  org.ovirt.engine.core.compat,
- org.ovirt.engine.core.dal meta-inf,
  org.ovirt.engine.core.searchbackend,
  org.ovirt.engine.core.utils,
  org.ovirt.engine.core.uutils,
@@ -29,7 +26,6 @@
  org.ovirt.engine.api.ovirt-engine-extensions-api,
  org.ovirt.vdsm-jsonrpc-java,
  org.quartz,
- org.reflections,
  org.slf4j,
  org.springframework,
  com.woorea.openstack.sdk services,
diff --git a/pom.xml b/pom.xml
index b110e75..99caf50 100644
--- a/pom.xml
+++ b/pom.xml
@@ -113,9 +113,6 @@
     
<gwt-maven-plugin.workingRefresh.version>2.4.0</gwt-maven-plugin.workingRefresh.version>
     <cdi.api.version>1.0-SP4</cdi.api.version>
     <javacc.version>2.6</javacc.version>
-    <antlr.version>4.2.2</antlr.version>
-    <deltaspike.version>1.1.0</deltaspike.version>
-    <reflections.version>0.9.9-RC1</reflections.version>
   </properties>
   <dependencyManagement>
     <dependencies>


-- 
To view, visit https://gerrit.ovirt.org/40151
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I122b02f846cfbb9b861d13792790cf93ca7ee0d6
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Martin Peřina <mper...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to