Skip to content
This repository has been archived by the owner on Apr 6, 2021. It is now read-only.

Commit

Permalink
Improving bean deployment management
Browse files Browse the repository at this point in the history
  • Loading branch information
Alex Stockinger committed Sep 7, 2017
1 parent 4cec8f3 commit 598ace9
Show file tree
Hide file tree
Showing 7 changed files with 81 additions and 33 deletions.
58 changes: 58 additions & 0 deletions 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<BeanArchive> beanArchiveFilter;

public BeanDeployment(
final BeanArchiveDiscovery beanArchiveDiscovery,
final Predicate<BeanArchive> beanArchiveFilter
) {
this.beanArchiveDiscovery = beanArchiveDiscovery;
this.beanArchiveFilter = beanArchiveFilter;
}

@Override
public Collection<BeanDeploymentArchive> contribute(
final ServiceRegistry serviceRegistry,
final Supplier<Collection<BeanDeploymentArchive>> archives
) {
final Set<BeanArchive> beanArchives = beanArchiveDiscovery.getBeanArchives().stream().filter(beanArchiveFilter).collect(toSet());
return beanArchives.stream()
.map(it -> new BeanDeploymentArchiveImpl(serviceRegistry, it, archives))
.collect(toSet());
}

public static <T> Collection<T> and(Collection<T> c, T t) {
final HashSet<T> ts = new HashSet<>(c);
ts.add(t);
return ts;
}
}
18 changes: 4 additions & 14 deletions core/src/main/java/fi/testee/deployment/DeploymentImpl.java
Expand Up @@ -15,21 +15,18 @@
*/
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;
import org.jboss.weld.bootstrap.spi.Metadata;

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
Expand All @@ -45,21 +42,14 @@ public class DeploymentImpl implements CDI11Deployment {
private final Map<BeanDeploymentArchive, BeanDeploymentArchive> archives;

public DeploymentImpl(
final Collection<BeanArchive> beanArchives,
final Collection<DynamicArchiveContributor> dynamicArchiveContributors,
final ServiceRegistry serviceRegistry,
final Collection<Metadata<Extension>> extensions,
final BeansXmlModifier modifier
) {
// TODO contribute those instead of directly passing them in
final Set<BeanDeploymentArchive> 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)
Expand Down
Expand Up @@ -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;
Expand All @@ -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;

Expand All @@ -67,17 +68,15 @@ public class DependencyInjectionRealm implements DependencyInjection {

public DependencyInjectionRealm init(
final ServiceRegistry serviceRegistry,
final BeanArchiveDiscovery beanArchiveDiscovery,
final Environments environment,
final Collection<Metadata<Extension>> extensions,
final BeansXmlModifier beansXmlModifier,
final Predicate<BeanArchive> beanArchiveFilter,
final Collection<DynamicArchiveContributor> archiveContributors
) {
LOG.trace("Starting dependency injection realm {}", contextId);
ensureTransactionServices(serviceRegistry);

deployment = new DeploymentImpl(
beanArchiveDiscovery.getBeanArchives().stream().filter(beanArchiveFilter).collect(toSet()),
archiveContributors,
serviceRegistry,
extensions,
Expand Down
7 changes: 4 additions & 3 deletions core/src/main/java/fi/testee/runtime/TestInstanceRealm.java
Expand Up @@ -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;
Expand Down Expand Up @@ -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;

Expand All @@ -61,14 +63,13 @@ public TestInstanceRealm init(
final Method method,
final Collection<ResourceProvider> 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;
Expand Down
7 changes: 4 additions & 3 deletions core/src/main/java/fi/testee/runtime/TestRuntime.java
Expand Up @@ -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;
Expand All @@ -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;

Expand Down Expand Up @@ -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
Expand Down
6 changes: 3 additions & 3 deletions core/src/main/java/fi/testee/runtime/TestSetup.java
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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() {
Expand Down

0 comments on commit 598ace9

Please sign in to comment.