diff --git a/core/src/main/java/fi/testee/deployment/BeanDeployment.java b/core/src/main/java/fi/testee/deployment/BeanDeployment.java new file mode 100644 index 0000000..3b6a26a --- /dev/null +++ b/core/src/main/java/fi/testee/deployment/BeanDeployment.java @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2017 Alex Stockinger + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package fi.testee.deployment; + +import fi.testee.spi.DynamicArchiveContributor; +import org.jboss.weld.bootstrap.api.ServiceRegistry; +import org.jboss.weld.bootstrap.spi.BeanDeploymentArchive; + +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; +import java.util.function.Predicate; +import java.util.function.Supplier; + +import static java.util.stream.Collectors.toSet; + +public class BeanDeployment implements DynamicArchiveContributor { + private final BeanArchiveDiscovery beanArchiveDiscovery; + private final Predicate beanArchiveFilter; + + public BeanDeployment( + final BeanArchiveDiscovery beanArchiveDiscovery, + final Predicate beanArchiveFilter + ) { + this.beanArchiveDiscovery = beanArchiveDiscovery; + this.beanArchiveFilter = beanArchiveFilter; + } + + @Override + public Collection contribute( + final ServiceRegistry serviceRegistry, + final Supplier> archives + ) { + final Set beanArchives = beanArchiveDiscovery.getBeanArchives().stream().filter(beanArchiveFilter).collect(toSet()); + return beanArchives.stream() + .map(it -> new BeanDeploymentArchiveImpl(serviceRegistry, it, archives)) + .collect(toSet()); + } + + public static Collection and(Collection c, T t) { + final HashSet ts = new HashSet<>(c); + ts.add(t); + return ts; + } +} diff --git a/core/src/main/java/fi/testee/deployment/DeploymentImpl.java b/core/src/main/java/fi/testee/deployment/DeploymentImpl.java index fb53550..a4a7a87 100644 --- a/core/src/main/java/fi/testee/deployment/DeploymentImpl.java +++ b/core/src/main/java/fi/testee/deployment/DeploymentImpl.java @@ -15,8 +15,8 @@ */ package fi.testee.deployment; -import fi.testee.spi.DynamicArchiveContributor; import fi.testee.spi.BeansXmlModifier; +import fi.testee.spi.DynamicArchiveContributor; import org.jboss.weld.bootstrap.api.ServiceRegistry; import org.jboss.weld.bootstrap.spi.BeanDeploymentArchive; import org.jboss.weld.bootstrap.spi.CDI11Deployment; @@ -24,12 +24,9 @@ import javax.enterprise.inject.spi.Extension; import java.util.Collection; -import java.util.HashSet; import java.util.Map; -import java.util.Set; import static java.util.stream.Collectors.toMap; -import static java.util.stream.Collectors.toSet; /** * Implementation of the {@link CDI11Deployment}, which is basically tying together the service @@ -45,21 +42,14 @@ public class DeploymentImpl implements CDI11Deployment { private final Map archives; public DeploymentImpl( - final Collection beanArchives, final Collection dynamicArchiveContributors, final ServiceRegistry serviceRegistry, final Collection> extensions, final BeansXmlModifier modifier ) { - // TODO contribute those instead of directly passing them in - final Set deploymentArchives = new HashSet<>(); - deploymentArchives.addAll(beanArchives.stream() - .map(it -> new BeanDeploymentArchiveImpl(serviceRegistry, it, this::archiveSupplier)) - .collect(toSet()) - ); - dynamicArchiveContributors - .forEach(it -> deploymentArchives.addAll(it.contribute(serviceRegistry, this::archiveSupplier))); - archives = deploymentArchives.stream() + archives = dynamicArchiveContributors.stream() + .map(it -> it.contribute(serviceRegistry, this::archiveSupplier)) + .flatMap(Collection::stream) .collect(toMap( it -> it, it -> new WrappedBeanDeploymentArchive(it, modifier, this::mapper) diff --git a/core/src/main/java/fi/testee/runtime/DependencyInjectionRealm.java b/core/src/main/java/fi/testee/runtime/DependencyInjectionRealm.java index 67be31c..1e490ab 100644 --- a/core/src/main/java/fi/testee/runtime/DependencyInjectionRealm.java +++ b/core/src/main/java/fi/testee/runtime/DependencyInjectionRealm.java @@ -17,12 +17,13 @@ import fi.testee.deployment.BeanArchive; import fi.testee.deployment.BeanArchiveDiscovery; +import fi.testee.deployment.BeanDeploymentArchiveImpl; import fi.testee.deployment.DeploymentImpl; import fi.testee.exceptions.TestEEfiException; import fi.testee.services.TransactionServicesImpl; -import fi.testee.spi.DynamicArchiveContributor; import fi.testee.spi.BeansXmlModifier; import fi.testee.spi.DependencyInjection; +import fi.testee.spi.DynamicArchiveContributor; import fi.testee.spi.ReleaseCallbackHandler; import org.jboss.weld.Container; import org.jboss.weld.bean.AbstractClassBean; @@ -45,11 +46,11 @@ import javax.enterprise.inject.spi.Extension; import javax.enterprise.inject.spi.InjectionTarget; import java.util.Collection; +import java.util.HashSet; import java.util.Set; import java.util.UUID; import java.util.function.BiConsumer; import java.util.function.Predicate; -import java.util.stream.Collectors; import static java.util.stream.Collectors.toSet; @@ -67,17 +68,15 @@ public class DependencyInjectionRealm implements DependencyInjection { public DependencyInjectionRealm init( final ServiceRegistry serviceRegistry, - final BeanArchiveDiscovery beanArchiveDiscovery, final Environments environment, final Collection> extensions, final BeansXmlModifier beansXmlModifier, - final Predicate beanArchiveFilter, final Collection archiveContributors ) { LOG.trace("Starting dependency injection realm {}", contextId); ensureTransactionServices(serviceRegistry); + deployment = new DeploymentImpl( - beanArchiveDiscovery.getBeanArchives().stream().filter(beanArchiveFilter).collect(toSet()), archiveContributors, serviceRegistry, extensions, diff --git a/core/src/main/java/fi/testee/runtime/TestInstanceRealm.java b/core/src/main/java/fi/testee/runtime/TestInstanceRealm.java index 7519fc2..b219467 100644 --- a/core/src/main/java/fi/testee/runtime/TestInstanceRealm.java +++ b/core/src/main/java/fi/testee/runtime/TestInstanceRealm.java @@ -17,6 +17,7 @@ import fi.testee.deployment.BeanArchive; import fi.testee.deployment.BeanArchiveDiscovery; +import fi.testee.deployment.BeanDeployment; import fi.testee.services.ResourceInjectionServicesImpl; import fi.testee.spi.BeansXmlModifier; import fi.testee.spi.CdiExtensionFactory; @@ -45,6 +46,7 @@ import java.util.Set; import static fi.testee.deployment.DeploymentImpl.UNMODIFIED; +import static java.util.Arrays.asList; import static java.util.Collections.emptySet; import static java.util.stream.Collectors.toSet; @@ -61,14 +63,13 @@ public TestInstanceRealm init( final Method method, final Collection setupResourceProviders ) { + final BeanDeployment beanDeployment = new BeanDeployment(beanArchiveDiscovery, BeanArchive::isFrameworkRelevant); super.init( serviceRegistry(resourceProviders(testInstance, method, setupResourceProviders)), - beanArchiveDiscovery, Environments.SE, emptySet(), UNMODIFIED, - BeanArchive::isFrameworkRelevant, - emptySet() + asList(beanDeployment) ); this.instanceId = instanceId; this.testInstance = testInstance; diff --git a/core/src/main/java/fi/testee/runtime/TestRuntime.java b/core/src/main/java/fi/testee/runtime/TestRuntime.java index eabd85a..0b0f6fa 100644 --- a/core/src/main/java/fi/testee/runtime/TestRuntime.java +++ b/core/src/main/java/fi/testee/runtime/TestRuntime.java @@ -17,6 +17,7 @@ import fi.testee.deployment.BeanArchive; import fi.testee.deployment.BeanArchiveDiscovery; +import fi.testee.deployment.BeanDeployment; import fi.testee.spi.Releaser; import fi.testee.spi.RuntimeLifecycleListener; import org.jboss.weld.bootstrap.api.ServiceRegistry; @@ -25,6 +26,7 @@ import org.slf4j.LoggerFactory; import static fi.testee.deployment.DeploymentImpl.UNMODIFIED; +import static java.util.Arrays.asList; import static java.util.Collections.emptySet; import static org.jboss.weld.bootstrap.api.Environments.SE; @@ -55,14 +57,13 @@ public static synchronized TestRuntime instance() { private TestRuntime() { final ServiceRegistry serviceRegistry = new SimpleServiceRegistry(); + final BeanDeployment beanDeployment = new BeanDeployment(beanArchiveDiscovery, BeanArchive::isFrameworkRelevant); realm = new DependencyInjectionRealm().init( serviceRegistry, - beanArchiveDiscovery, SE, emptySet(), UNMODIFIED, - BeanArchive::isFrameworkRelevant, - emptySet() + asList(beanDeployment) ); Runtime.getRuntime().addShutdownHook(new Thread() { @Override diff --git a/core/src/main/java/fi/testee/runtime/TestSetup.java b/core/src/main/java/fi/testee/runtime/TestSetup.java index 9fab19c..c87dc78 100644 --- a/core/src/main/java/fi/testee/runtime/TestSetup.java +++ b/core/src/main/java/fi/testee/runtime/TestSetup.java @@ -17,6 +17,7 @@ import fi.testee.deployment.BeanArchive; import fi.testee.deployment.BeanArchiveDiscovery; +import fi.testee.deployment.BeanDeployment; import fi.testee.jdbc.ConnectionFactoryManager; import fi.testee.jdbc.TestDataSource; import fi.testee.services.ResourceInjectionServicesImpl; @@ -84,14 +85,13 @@ public TestSetup init() { final ResourceProvider setupResources = createSetupResources(false); serviceRegistry.add(ResourceInjectionServices.class, new ResourceInjectionServicesImpl(asList(setupResources))); final BeanArchiveDiscovery beanArchiveDiscovery = runtime.getBeanArchiveDiscorvery(); + final BeanDeployment beanDeployment = new BeanDeployment(beanArchiveDiscovery, BeanArchive::isFrameworkRelevant); super.init( serviceRegistry, - beanArchiveDiscovery, Environments.SE, emptySet(), UNMODIFIED, - BeanArchive::isFrameworkRelevant, - emptySet() + asList(beanDeployment) ); setupTestData(setupResources); return this; diff --git a/core/src/main/java/fi/testee/runtime/TransactionalContext.java b/core/src/main/java/fi/testee/runtime/TransactionalContext.java index fad6c3c..150408a 100644 --- a/core/src/main/java/fi/testee/runtime/TransactionalContext.java +++ b/core/src/main/java/fi/testee/runtime/TransactionalContext.java @@ -17,6 +17,7 @@ import fi.testee.deployment.BeanArchive; import fi.testee.deployment.BeanArchiveDiscovery; +import fi.testee.deployment.BeanDeployment; import fi.testee.deployment.EjbDescriptorImpl; import fi.testee.deployment.InterceptorChain; import fi.testee.ejb.EjbContainer; @@ -32,13 +33,11 @@ import fi.testee.services.SecurityServicesImpl; import fi.testee.services.TransactionServicesImpl; import fi.testee.spi.BeansXmlModifier; -import fi.testee.spi.DependencyInjection; import fi.testee.spi.DynamicArchiveContributor; import fi.testee.spi.PersistenceUnitPropertyContributor; import fi.testee.spi.Releaser; import fi.testee.spi.ResourceProvider; import fi.testee.spi.SessionBeanAlternatives; -import fi.testee.utils.InjectionPointUtils; import org.jboss.weld.bean.SessionBean; import org.jboss.weld.bootstrap.api.Environments; import org.jboss.weld.bootstrap.api.ServiceRegistry; @@ -73,6 +72,7 @@ import java.util.Set; import java.util.function.Predicate; +import static fi.testee.deployment.BeanDeployment.and; import static fi.testee.utils.InjectionPointUtils.injectionPointOf; import static java.util.Arrays.asList; import static java.util.Arrays.stream; @@ -127,14 +127,13 @@ public void initialize( ejbContainer::lookupDescriptor, ejbContainer::createInstance, propertyContributor()); + final BeanDeployment beanDeployment = new BeanDeployment(beanArchiveDiscovery, archiveFilter); realm = new DependencyInjectionRealm().init( instanceServiceRegistry, - beanArchiveDiscovery, Environments.EE_INJECT, extensions, beansXmlModifier, - archiveFilter, - archiveContributors + and(archiveContributors, beanDeployment) ); ejbContainer.init( new EjbContainer.EjbDescriptorHolderResolver() {