@Override
  protected void storeSyntheticAnnotatedType(
      BeanDeployment deployment, AnnotatedType<?> type, String id) {
    SlimAnnotatedType<?> annotatedType =
        transformer.getUnbackedAnnotatedType(type, getBeanManager().getId(), id);
    Extension extension = getReceiver();
    SlimAnnotatedTypeContext<?> annotatedTypeContext =
        SlimAnnotatedTypeContext.of(annotatedType, extension);

    ProcessAnnotatedTypeImpl<?> event =
        events.fireProcessAnnotatedType(getBeanManager(), annotatedTypeContext);
    if (event == null) {
      deployment.getBeanDeployer().getEnvironment().addAnnotatedType(annotatedTypeContext);
      store.put(annotatedType);
    } else if (event.isVeto()) {
      return;
    } else {
      annotatedType = event.getResultingAnnotatedType();
      deployment
          .getBeanDeployer()
          .getEnvironment()
          .addSyntheticAnnotatedType(annotatedType, extension);
      store.put(annotatedType);
    }
  }
示例#2
0
  public void deployBeans() {
    for (BeanDeployment deployment : getBeanDeployments()) {
      deployment.createBeans(environment);
    }
    // we must use separate loops, otherwise cyclic specialization would not work
    for (BeanDeployment deployment : getBeanDeployments()) {
      deployment.getBeanDeployer().processClassBeanAttributes();
      deployment.getBeanDeployer().createProducersAndObservers();
    }
    for (BeanDeployment deployment : getBeanDeployments()) {
      deployment.getBeanDeployer().processProducerAttributes();
      deployment.getBeanDeployer().createNewBeans();
    }

    for (BeanDeployment beanDeployment : getBeanDeployments()) {
      beanDeployment.deploySpecialized(environment);
    }

    // TODO keep a list of new bdas, add them all in, and deploy beans for them, then merge into
    // existing
    for (BeanDeployment beanDeployment : getBeanDeployments()) {
      beanDeployment.deployBeans(environment);
    }

    getContainer().setState(ContainerState.DISCOVERED);

    // Flush caches for BeanManager.getBeans() to be usable in ABD (WELD-1729)
    flushCaches();

    AfterBeanDiscoveryImpl.fire(deploymentManager, deployment, bdaMapping, contexts);

    // Extensions may have registered beans / observers. We need to flush caches.
    flushCaches();

    // If needed, recreate enablement once again - extensions may have registered interceptors,
    // decorators and alternatives
    if (deployment.getServices().getRequired(GlobalEnablementBuilder.class).isDirty()) {
      for (BeanDeployment beanDeployment : getBeanDeployments()) {
        beanDeployment.createEnablement();
      }
    }

    // Re-read the deployment structure, bdaMapping will be the physical
    // structure, extensions, classes, and any beans added using addBean
    // outside the physical structure
    deploymentVisitor.visit();

    for (BeanDeployment beanDeployment : getBeanDeployments()) {
      beanDeployment.getBeanManager().getServices().get(InjectionTargetService.class).initialize();
      beanDeployment.afterBeanDiscovery(environment);
    }
    getContainer().putBeanDeployments(bdaMapping);
    getContainer().setState(ContainerState.DEPLOYED);
  }
示例#3
0
  public void endInitialization() {

    final BeanIdentifierIndex index =
        deploymentManager.getServices().get(BeanIdentifierIndex.class);
    if (index != null) {
      // Build a special index of bean identifiers
      index.build(getBeansForBeanIdentifierIndex());
    }

    // TODO rebuild the manager accessibility graph if the bdas have changed
    // Register the managers so external requests can handle them
    // clear the TypeSafeResolvers, so data that is only used at startup
    // is not kept around using up memory
    flushCaches();
    deploymentManager.getServices().cleanupAfterBoot();
    deploymentManager.cleanupAfterBoot();
    for (BeanDeployment beanDeployment : getBeanDeployments()) {
      BeanManagerImpl beanManager = beanDeployment.getBeanManager();
      beanManager.getInterceptorMetadataReader().cleanAfterBoot();
      beanManager.getServices().cleanupAfterBoot();
      beanManager.cleanupAfterBoot();
      // clean up beans
      for (Bean<?> bean : beanManager.getBeans()) {
        if (bean instanceof RIBean<?>) {
          RIBean<?> riBean = (RIBean<?>) bean;
          riBean.cleanupAfterBoot();
        }
      }
      // clean up decorators
      for (Decorator<?> decorator : beanManager.getDecorators()) {
        if (decorator instanceof DecoratorImpl<?>) {
          Reflections.<DecoratorImpl<?>>cast(decorator).cleanupAfterBoot();
        }
      }
      // clean up interceptors
      for (Interceptor<?> interceptor : beanManager.getInterceptors()) {
        if (interceptor instanceof InterceptorImpl<?>) {
          Reflections.<InterceptorImpl<?>>cast(interceptor).cleanupAfterBoot();
        }
      }
    }
    for (BeanDeployment beanDeployment : getBeanDeployments()) {
      beanDeployment.getBeanDeployer().cleanup();
    }
    // feed BeanDeploymentModule registry
    final BeanDeploymentModules modules =
        deploymentManager.getServices().get(BeanDeploymentModules.class);
    if (modules != null) {
      modules.processBeanDeployments(getBeanDeployments());
      BootstrapLogger.LOG.debugv("EE modules: {0}", modules);
    }

    getContainer().setState(ContainerState.INITIALIZED);

    if (modules != null) {
      // fire @Initialized(ApplicationScoped.class) for non-web modules
      // web modules are handled by HttpContextLifecycle
      for (BeanDeploymentModule module : modules) {
        if (!module.isWebModule()) {
          module.fireEvent(
              Object.class, ContextEvent.APPLICATION_INITIALIZED, InitializedLiteral.APPLICATION);
        }
      }
    }
  }