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