예제 #1
0
 // needs to be resolved once extension beans are deployed
 private void installFastProcessAnnotatedTypeResolver(ServiceRegistry services) {
   ClassFileServices classFileServices = services.get(ClassFileServices.class);
   if (classFileServices != null) {
     final GlobalObserverNotifierService observers =
         services.get(GlobalObserverNotifierService.class);
     try {
       final FastProcessAnnotatedTypeResolver resolver =
           new FastProcessAnnotatedTypeResolver(observers.getAllObserverMethods());
       services.add(FastProcessAnnotatedTypeResolver.class, resolver);
     } catch (UnsupportedObserverMethodException e) {
       BootstrapLogger.LOG.notUsingFastResolver(e.getObserver());
       return;
     }
   }
 }
예제 #2
0
  private void addImplementationServices(ServiceRegistry services) {
    final WeldModules modules = new WeldModules();
    services.add(WeldModules.class, modules);

    final WeldConfiguration configuration = services.get(WeldConfiguration.class);
    services.add(SlimAnnotatedTypeStore.class, new SlimAnnotatedTypeStoreImpl());
    if (services.get(ClassTransformer.class) == null) {
      throw new IllegalStateException(ClassTransformer.class.getSimpleName() + " not installed.");
    }
    services.add(
        MemberTransformer.class, new MemberTransformer(services.get(ClassTransformer.class)));
    services.add(
        MetaAnnotationStore.class, new MetaAnnotationStore(services.get(ClassTransformer.class)));

    BeanIdentifierIndex beanIdentifierIndex = null;
    if (configuration.getBooleanProperty(ConfigurationKey.BEAN_IDENTIFIER_INDEX_OPTIMIZATION)) {
      beanIdentifierIndex = new BeanIdentifierIndex();
      services.add(BeanIdentifierIndex.class, beanIdentifierIndex);
    }

    services.add(ContextualStore.class, new ContextualStoreImpl(contextId, beanIdentifierIndex));
    services.add(CurrentInjectionPoint.class, new CurrentInjectionPoint());
    services.add(CurrentEventMetadata.class, new CurrentEventMetadata());
    services.add(
        SpecializationAndEnablementRegistry.class, new SpecializationAndEnablementRegistry());
    services.add(MissingDependenciesRegistry.class, new MissingDependenciesRegistry());

    /*
     * Setup ExecutorServices
     */
    ExecutorServices executor = services.get(ExecutorServices.class);
    if (executor == null) {
      executor = ExecutorServicesFactory.create(DefaultResourceLoader.INSTANCE, configuration);
      if (executor != null) {
        services.add(ExecutorServices.class, executor);
      }
    }

    services.add(
        RequiredAnnotationDiscovery.class,
        new RequiredAnnotationDiscovery(services.get(ReflectionCache.class)));

    services.add(GlobalEnablementBuilder.class, new GlobalEnablementBuilder());
    if (!services.contains(HttpContextActivationFilter.class)) {
      services.add(
          HttpContextActivationFilter.class, AcceptingHttpContextActivationFilter.INSTANCE);
    }
    services.add(ProtectionDomainCache.class, new ProtectionDomainCache());

    services.add(ProxyInstantiator.class, ProxyInstantiator.Factory.create(configuration));

    services.add(ObserverNotifierFactory.class, DefaultObserverNotifierFactory.INSTANCE);

    services.add(ResourceInjectionFactory.class, new ResourceInjectionFactory());

    modules.postServiceRegistration(contextId, services);

    /*
     * Setup Validator
     */
    if (configuration.getBooleanProperty(ConfigurationKey.CONCURRENT_DEPLOYMENT)
        && services.contains(ExecutorServices.class)) {
      services.add(
          Validator.class, new ConcurrentValidator(modules.getPluggableValidators(), executor));
    } else {
      services.add(Validator.class, new Validator(modules.getPluggableValidators()));
    }

    GlobalObserverNotifierService observerNotificationService =
        new GlobalObserverNotifierService(services, contextId);
    services.add(GlobalObserverNotifierService.class, observerNotificationService);

    /*
     * Preloader for container lifecycle events
     */
    ContainerLifecycleEventPreloader preloader = null;
    int preloaderThreadPoolSize =
        configuration.getIntegerProperty(ConfigurationKey.PRELOADER_THREAD_POOL_SIZE);
    if (preloaderThreadPoolSize > 0 && Permissions.hasPermission(Permissions.MODIFY_THREAD_GROUP)) {
      preloader =
          new ContainerLifecycleEventPreloader(
              preloaderThreadPoolSize,
              observerNotificationService.getGlobalLenientObserverNotifier());
    }
    services.add(
        ContainerLifecycleEvents.class,
        new ContainerLifecycleEvents(preloader, services.get(RequiredAnnotationDiscovery.class)));
    if (isEEModulesAwareEnvironment()) {
      services.add(BeanDeploymentModules.class, new BeanDeploymentModules(contextId, services));
    }
  }