Search in sources :

Example 6 with LifecycleListener

use of org.jboss.msc.service.LifecycleListener in project wildfly by wildfly.

the class MailSessionDefinitionInjectionSource method startMailSession.

private void startMailSession(final MailSessionService mailSessionService, final String jndiName, final EEModuleDescription moduleDescription, final ResolutionContext context, final ServiceTarget serviceTarget, final ServiceBuilder<?> valueSourceServiceBuilder, final Injector<ManagedReferenceFactory> injector) {
    final ServiceName mailSessionServiceName = MailSessionDefinition.SESSION_CAPABILITY.getCapabilityServiceName().append("MailSessionDefinition", moduleDescription.getApplicationName(), moduleDescription.getModuleName(), jndiName);
    final ServiceBuilder<?> mailSessionServiceBuilder = serviceTarget.addService(mailSessionServiceName, mailSessionService);
    final ContextNames.BindInfo bindInfo = ContextNames.bindInfoForEnvEntry(context.getApplicationName(), context.getModuleName(), context.getComponentName(), !context.isCompUsesModule(), jndiName);
    final BinderService binderService = new BinderService(bindInfo.getBindName(), this);
    binderService.getManagedObjectInjector().inject(new MailSessionManagedReferenceFactory(mailSessionService));
    final ServiceBuilder<ManagedReferenceFactory> binderBuilder = serviceTarget.addService(bindInfo.getBinderServiceName(), binderService).addDependency(bindInfo.getParentContextServiceName(), ServiceBasedNamingStore.class, binderService.getNamingStoreInjector()).addListener(new LifecycleListener() {

        private volatile boolean bound;

        @Override
        public void handleEvent(final ServiceController<?> controller, final LifecycleEvent event) {
            switch(event) {
                case UP:
                    {
                        MailLogger.ROOT_LOGGER.boundMailSession(jndiName);
                        bound = true;
                        break;
                    }
                case DOWN:
                    {
                        if (bound) {
                            MailLogger.ROOT_LOGGER.unboundMailSession(jndiName);
                        }
                        break;
                    }
                case REMOVED:
                    {
                        MailLogger.ROOT_LOGGER.debugf("Removed Mail Session [%s]", jndiName);
                        break;
                    }
            }
        }
    });
    mailSessionServiceBuilder.setInitialMode(ServiceController.Mode.ACTIVE).install();
    binderBuilder.setInitialMode(ServiceController.Mode.ACTIVE).install();
    valueSourceServiceBuilder.addDependency(bindInfo.getBinderServiceName(), ManagedReferenceFactory.class, injector);
}
Also used : LifecycleListener(org.jboss.msc.service.LifecycleListener) BinderService(org.jboss.as.naming.service.BinderService) ServiceName(org.jboss.msc.service.ServiceName) ServiceBasedNamingStore(org.jboss.as.naming.ServiceBasedNamingStore) ManagedReferenceFactory(org.jboss.as.naming.ManagedReferenceFactory) LifecycleEvent(org.jboss.msc.service.LifecycleEvent) ContextNames(org.jboss.as.naming.deployment.ContextNames)

Example 7 with LifecycleListener

use of org.jboss.msc.service.LifecycleListener in project wildfly by wildfly.

the class ServiceLifecycle method transition.

private void transition(Transition transition) {
    // Short-circuit if the service is already at the target state
    if (this.isComplete(transition))
        return;
    CountDownLatch latch = new CountDownLatch(1);
    LifecycleListener listener = new CountDownLifecycleListener(latch, transition.targetEvents);
    this.controller.addListener(listener);
    try {
        if (this.isComplete(transition))
            return;
        // Force service to transition to desired state
        Mode currentMode = this.controller.getMode();
        if (currentMode == ServiceController.Mode.REMOVE) {
            throw new IllegalStateException(new ServiceNotFoundException(this.controller.getName().getCanonicalName()));
        }
        Mode targetMode = transition.modeTransitions.get(currentMode);
        if (targetMode == null) {
            throw new IllegalStateException(currentMode.name());
        }
        this.controller.setMode(targetMode);
        latch.await();
        if (this.controller.getState() == State.START_FAILED) {
            throw new IllegalStateException(this.controller.getStartException());
        }
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
    } finally {
        this.controller.removeListener(listener);
    }
}
Also used : ServiceNotFoundException(org.jboss.msc.service.ServiceNotFoundException) Mode(org.jboss.msc.service.ServiceController.Mode) CountDownLifecycleListener(org.wildfly.clustering.service.CountDownLifecycleListener) LifecycleListener(org.jboss.msc.service.LifecycleListener) CountDownLifecycleListener(org.wildfly.clustering.service.CountDownLifecycleListener) CountDownLatch(java.util.concurrent.CountDownLatch)

Example 8 with LifecycleListener

use of org.jboss.msc.service.LifecycleListener in project wildfly by wildfly.

the class DsXmlDeploymentInstallProcessor method startDataSource.

private void startDataSource(final AbstractDataSourceService dataSourceService, final String jndiName, final String driverName, final ServiceTarget serviceTarget, final ManagementResourceRegistration registration, final Resource resource, final String managementName, boolean requireLegacySecurity, final boolean isTransactional, final CapabilityServiceSupport support) throws DeploymentUnitProcessingException {
    final ContextNames.BindInfo bindInfo = ContextNames.bindInfoFor(jndiName);
    final ServiceName dataSourceServiceName = AbstractDataSourceService.getServiceName(bindInfo);
    final ServiceBuilder<?> dataSourceServiceBuilder = Services.addServerExecutorDependency(serviceTarget.addService(dataSourceServiceName, dataSourceService), dataSourceService.getExecutorServiceInjector()).addDependency(ConnectorServices.IRONJACAMAR_MDR, MetadataRepository.class, dataSourceService.getMdrInjector()).addDependency(ConnectorServices.RA_REPOSITORY_SERVICE, ResourceAdapterRepository.class, dataSourceService.getRaRepositoryInjector()).addDependency(support.getCapabilityServiceName(ConnectorServices.TRANSACTION_INTEGRATION_CAPABILITY_NAME), TransactionIntegration.class, dataSourceService.getTransactionIntegrationInjector()).addDependency(ConnectorServices.MANAGEMENT_REPOSITORY_SERVICE, ManagementRepository.class, dataSourceService.getManagementRepositoryInjector()).addDependency(ConnectorServices.CCM_SERVICE, CachedConnectionManager.class, dataSourceService.getCcmInjector()).addDependency(ConnectorServices.JDBC_DRIVER_REGISTRY_SERVICE, DriverRegistry.class, dataSourceService.getDriverRegistryInjector());
    dataSourceServiceBuilder.requires(ConnectorServices.BOOTSTRAP_CONTEXT_SERVICE.append(DEFAULT_NAME));
    dataSourceServiceBuilder.requires(support.getCapabilityServiceName(NamingService.CAPABILITY_NAME));
    if (requireLegacySecurity) {
        throw ConnectorLogger.DS_DEPLOYER_LOGGER.legacySecurityNotAvailableForDsXml(managementName);
    }
    // Register an empty override model regardless of we're enabled or not - the statistics listener will add the relevant childresources
    if (registration.isAllowsOverride()) {
        ManagementResourceRegistration overrideRegistration = registration.getOverrideModel(managementName);
        if (overrideRegistration == null || overrideRegistration.isAllowsOverride()) {
            overrideRegistration = registration.registerOverrideModel(managementName, DataSourcesSubsystemProviders.OVERRIDE_DS_DESC);
        }
        DataSourceStatisticsService statsService = new DataSourceStatisticsService(registration, false);
        final ServiceBuilder statsServiceSB = serviceTarget.addService(dataSourceServiceName.append(Constants.STATISTICS), statsService);
        statsServiceSB.requires(dataSourceServiceName);
        statsServiceSB.addDependency(CommonDeploymentService.getServiceName(bindInfo), CommonDeployment.class, statsService.getCommonDeploymentInjector());
        statsServiceSB.setInitialMode(ServiceController.Mode.PASSIVE);
        statsServiceSB.install();
        DataSourceStatisticsService.registerStatisticsResources(resource);
    }
    // else should probably throw an ISE or something
    final ServiceName driverServiceName = ServiceName.JBOSS.append("jdbc-driver", driverName.replaceAll("\\.", "_"));
    if (driverServiceName != null) {
        dataSourceServiceBuilder.addDependency(driverServiceName, Driver.class, dataSourceService.getDriverInjector());
    }
    final DataSourceReferenceFactoryService referenceFactoryService = new DataSourceReferenceFactoryService();
    final ServiceName referenceFactoryServiceName = DataSourceReferenceFactoryService.SERVICE_NAME_BASE.append(jndiName);
    final ServiceBuilder<?> referenceBuilder = serviceTarget.addService(referenceFactoryServiceName, referenceFactoryService).addDependency(dataSourceServiceName, javax.sql.DataSource.class, referenceFactoryService.getDataSourceInjector());
    final BinderService binderService = new BinderService(bindInfo.getBindName());
    final ServiceBuilder<?> binderBuilder = serviceTarget.addService(bindInfo.getBinderServiceName(), binderService).addDependency(referenceFactoryServiceName, ManagedReferenceFactory.class, binderService.getManagedObjectInjector()).addDependency(bindInfo.getParentContextServiceName(), ServiceBasedNamingStore.class, binderService.getNamingStoreInjector()).addListener(new LifecycleListener() {

        private volatile boolean bound;

        public void handleEvent(final ServiceController<?> controller, final LifecycleEvent event) {
            switch(event) {
                case UP:
                    {
                        if (isTransactional) {
                            SUBSYSTEM_DATASOURCES_LOGGER.boundDataSource(jndiName);
                        } else {
                            SUBSYSTEM_DATASOURCES_LOGGER.boundNonJTADataSource(jndiName);
                        }
                        bound = true;
                        break;
                    }
                case DOWN:
                    {
                        if (bound) {
                            if (isTransactional) {
                                SUBSYSTEM_DATASOURCES_LOGGER.unboundDataSource(jndiName);
                            } else {
                                SUBSYSTEM_DATASOURCES_LOGGER.unBoundNonJTADataSource(jndiName);
                            }
                        }
                        break;
                    }
                case REMOVED:
                    {
                        SUBSYSTEM_DATASOURCES_LOGGER.debugf("Removed JDBC Data-source [%s]", jndiName);
                        break;
                    }
            }
        }
    });
    dataSourceServiceBuilder.setInitialMode(ServiceController.Mode.ACTIVE).install();
    referenceBuilder.setInitialMode(ServiceController.Mode.ACTIVE).install();
    binderBuilder.setInitialMode(ServiceController.Mode.ACTIVE).install();
}
Also used : TransactionIntegration(org.jboss.jca.core.spi.transaction.TransactionIntegration) DataSourceStatisticsService(org.jboss.as.connector.services.datasources.statistics.DataSourceStatisticsService) DataSourceReferenceFactoryService(org.jboss.as.connector.subsystems.datasources.DataSourceReferenceFactoryService) ManagementResourceRegistration(org.jboss.as.controller.registry.ManagementResourceRegistration) LifecycleListener(org.jboss.msc.service.LifecycleListener) ServiceBuilder(org.jboss.msc.service.ServiceBuilder) BinderService(org.jboss.as.naming.service.BinderService) MetadataRepository(org.jboss.jca.core.spi.mdr.MetadataRepository) CachedConnectionManager(org.jboss.jca.core.api.connectionmanager.ccm.CachedConnectionManager) ServiceName(org.jboss.msc.service.ServiceName) ServiceBasedNamingStore(org.jboss.as.naming.ServiceBasedNamingStore) LifecycleEvent(org.jboss.msc.service.LifecycleEvent) ContextNames(org.jboss.as.naming.deployment.ContextNames)

Example 9 with LifecycleListener

use of org.jboss.msc.service.LifecycleListener in project wildfly by wildfly.

the class EECleanUpProcessor method undeploy.

@Override
public void undeploy(final DeploymentUnit context) {
    final Module module = context.getAttachment(org.jboss.as.server.deployment.Attachments.MODULE);
    ServiceName deploymentService = context.getServiceName();
    ServiceController<?> controller = context.getServiceRegistry().getRequiredService(deploymentService);
    // WFLY-9666 we do this cleanup at the end of undeploy
    // if we do it now any code in the undeploy sequence that attempts to use EL can cause it to be re-added
    controller.addListener(new LifecycleListener() {

        @Override
        public void handleEvent(ServiceController<?> serviceController, LifecycleEvent lifecycleEvent) {
            if (lifecycleEvent == LifecycleEvent.DOWN) {
                FactoryFinderCache.clearClassLoader(module.getClassLoader());
                controller.removeListener(this);
            }
        }
    });
}
Also used : ServiceName(org.jboss.msc.service.ServiceName) LifecycleEvent(org.jboss.msc.service.LifecycleEvent) LifecycleListener(org.jboss.msc.service.LifecycleListener) Module(org.jboss.modules.Module)

Example 10 with LifecycleListener

use of org.jboss.msc.service.LifecycleListener in project wildfly by wildfly.

the class JMSService method doStart.

private synchronized void doStart(final StartContext context) throws StartException {
    final ServiceContainer serviceContainer = context.getController().getServiceContainer();
    ClassLoader oldTccl = WildFlySecurityManager.setCurrentContextClassLoaderPrivileged(getClass());
    try {
        jmsServer = new JMSServerManagerImpl(activeMQServer.getValue(), new WildFlyBindingRegistry(context.getController().getServiceContainer())) {

            @Override
            public void stop(ActiveMQServer server) {
            // Suppress ARTEMIS-2438
            }
        };
        activeMQServer.getValue().registerActivationFailureListener(e -> {
            StartException se = new StartException(e);
            context.failed(se);
        });
        activeMQServer.getValue().registerActivateCallback(new ActivateCallback() {

            private volatile ServiceController<Void> activeMQActivationController;

            public void preActivate() {
            }

            public void activated() {
                if (overrideInVMSecurity) {
                    activeMQServer.getValue().getRemotingService().allowInvmSecurityOverride(new ActiveMQPrincipal(DefaultCredentials.getUsername(), DefaultCredentials.getPassword()));
                }
                // ActiveMQ backup server is activated during failover while the WildFly server is shutting down.
                if (serviceContainer.isShutdown()) {
                    return;
                }
                if (activeMQActivationController == null) {
                    activeMQActivationController = serviceContainer.addService(ActiveMQActivationService.getServiceName(serverServiceName), new ActiveMQActivationService()).setInitialMode(Mode.ACTIVE).install();
                } else {
                    activeMQActivationController.setMode(ACTIVE);
                }
            }

            @Override
            public void activationComplete() {
            }

            public void deActivate() {
                // and *not* during AS7 service container shutdown or reload (AS7-6840 / AS7-6881)
                if (activeMQActivationController != null && !activeMQActivationController.getState().in(STOPPING, REMOVED)) {
                    // [WFLY-4597] When Artemis is deactivated during failover, we block until its
                    // activation controller is REMOVED before giving back control to Artemis.
                    // This allow to properly stop any service depending on the activation controller
                    // and avoid spurious warning messages because the resources used by the services
                    // are stopped outside the control of the services.
                    final CountDownLatch latch = new CountDownLatch(1);
                    activeMQActivationController.compareAndSetMode(ACTIVE, REMOVE);
                    activeMQActivationController.addListener(new LifecycleListener() {

                        @Override
                        public void handleEvent(ServiceController<?> controller, LifecycleEvent event) {
                            if (event == LifecycleEvent.REMOVED) {
                                latch.countDown();
                            }
                        }
                    });
                    try {
                        latch.await(5, TimeUnit.SECONDS);
                    } catch (InterruptedException e) {
                    }
                    activeMQActivationController = null;
                }
            }
        });
        jmsServer.start();
    } catch (StartException e) {
        throw e;
    } catch (Throwable t) {
        throw new StartException(t);
    } finally {
        WildFlySecurityManager.setCurrentContextClassLoaderPrivileged(oldTccl);
    }
}
Also used : ActiveMQPrincipal(org.apache.activemq.artemis.core.security.ActiveMQPrincipal) LifecycleListener(org.jboss.msc.service.LifecycleListener) CountDownLatch(java.util.concurrent.CountDownLatch) ActiveMQServer(org.apache.activemq.artemis.core.server.ActiveMQServer) ServiceContainer(org.jboss.msc.service.ServiceContainer) ActiveMQActivationService(org.wildfly.extension.messaging.activemq.ActiveMQActivationService) JMSServerManagerImpl(org.apache.activemq.artemis.jms.server.impl.JMSServerManagerImpl) LifecycleEvent(org.jboss.msc.service.LifecycleEvent) StartException(org.jboss.msc.service.StartException) ServiceController(org.jboss.msc.service.ServiceController) ActivateCallback(org.apache.activemq.artemis.core.server.ActivateCallback)

Aggregations

LifecycleListener (org.jboss.msc.service.LifecycleListener)23 LifecycleEvent (org.jboss.msc.service.LifecycleEvent)22 ServiceName (org.jboss.msc.service.ServiceName)11 CountDownLatch (java.util.concurrent.CountDownLatch)9 ContextNames (org.jboss.as.naming.deployment.ContextNames)8 ServiceController (org.jboss.msc.service.ServiceController)7 BinderService (org.jboss.as.naming.service.BinderService)6 ServiceBasedNamingStore (org.jboss.as.naming.ServiceBasedNamingStore)5 ServiceBuilder (org.jboss.msc.service.ServiceBuilder)5 ServiceRegistry (org.jboss.msc.service.ServiceRegistry)3 ExecutorService (java.util.concurrent.ExecutorService)2 DataSourceStatisticsService (org.jboss.as.connector.services.datasources.statistics.DataSourceStatisticsService)2 DataSourceReferenceFactoryService (org.jboss.as.connector.subsystems.datasources.DataSourceReferenceFactoryService)2 ContextListAndJndiViewManagedReferenceFactory (org.jboss.as.naming.ContextListAndJndiViewManagedReferenceFactory)2 ManagedReferenceFactory (org.jboss.as.naming.ManagedReferenceFactory)2 DeploymentUnit (org.jboss.as.server.deployment.DeploymentUnit)2 Module (org.jboss.modules.Module)2 ServiceContainer (org.jboss.msc.service.ServiceContainer)2 StartException (org.jboss.msc.service.StartException)2 CompletableFuture (java.util.concurrent.CompletableFuture)1