Search in sources :

Example 1 with CircularDependencyException

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

the class ModuleJndiBindingProcessor method addJndiBinding.

protected void addJndiBinding(final EEModuleConfiguration module, final BindingConfiguration bindingConfiguration, final DeploymentPhaseContext phaseContext, final List<ServiceName> dependencies) throws DeploymentUnitProcessingException {
    // Gather information about the dependency
    final String bindingName = bindingConfiguration.getName().startsWith("java:") ? bindingConfiguration.getName() : "java:module/env/" + bindingConfiguration.getName();
    InjectionSource.ResolutionContext resolutionContext = new InjectionSource.ResolutionContext(true, module.getModuleName(), module.getModuleName(), module.getApplicationName());
    // Check to see if this entry should actually be bound into JNDI.
    if (bindingName != null) {
        final ContextNames.BindInfo bindInfo = ContextNames.bindInfoForEnvEntry(module.getApplicationName(), module.getModuleName(), module.getModuleName(), false, bindingName);
        dependencies.add(bindInfo.getBinderServiceName());
        if (bindingName.startsWith("java:comp") || bindingName.startsWith("java:module") || bindingName.startsWith("java:app")) {
            //this is a binding that does not need to be shared.
            try {
                final BinderService service = new BinderService(bindInfo.getBindName(), bindingConfiguration.getSource());
                ServiceBuilder<ManagedReferenceFactory> serviceBuilder = phaseContext.getServiceTarget().addService(bindInfo.getBinderServiceName(), service);
                bindingConfiguration.getSource().getResourceValue(resolutionContext, serviceBuilder, phaseContext, service.getManagedObjectInjector());
                serviceBuilder.addDependency(bindInfo.getParentContextServiceName(), ServiceBasedNamingStore.class, service.getNamingStoreInjector());
                serviceBuilder.install();
            } catch (DuplicateServiceException e) {
                ServiceController<ManagedReferenceFactory> registered = (ServiceController<ManagedReferenceFactory>) CurrentServiceContainer.getServiceContainer().getService(bindInfo.getBinderServiceName());
                if (registered == null)
                    throw e;
                BinderService service = (BinderService) registered.getService();
                if (!service.getSource().equals(bindingConfiguration.getSource()))
                    throw EeLogger.ROOT_LOGGER.conflictingBinding(bindingName, bindingConfiguration.getSource());
            } catch (CircularDependencyException e) {
                throw EeLogger.ROOT_LOGGER.circularDependency(bindingName);
            }
        } else {
            BinderService service;
            try {
                service = new BinderService(bindInfo.getBindName(), bindingConfiguration.getSource(), true);
                ServiceBuilder<ManagedReferenceFactory> serviceBuilder = CurrentServiceContainer.getServiceContainer().addService(bindInfo.getBinderServiceName(), service);
                bindingConfiguration.getSource().getResourceValue(resolutionContext, serviceBuilder, phaseContext, service.getManagedObjectInjector());
                serviceBuilder.addDependency(bindInfo.getParentContextServiceName(), ServiceBasedNamingStore.class, service.getNamingStoreInjector());
                serviceBuilder.install();
            } catch (DuplicateServiceException e) {
                final ServiceController<ManagedReferenceFactory> controller = (ServiceController<ManagedReferenceFactory>) CurrentServiceContainer.getServiceContainer().getService(bindInfo.getBinderServiceName());
                if (controller == null)
                    throw e;
                service = (BinderService) controller.getService();
                if (!equals(service.getSource(), bindingConfiguration.getSource())) {
                    throw EeLogger.ROOT_LOGGER.conflictingBinding(bindingName, bindingConfiguration.getSource());
                }
            }
            //as these bindings are not child services
            //we need to add a listener that released the service when the deployment stops
            service.acquire();
            ServiceController<?> unitService = CurrentServiceContainer.getServiceContainer().getService(phaseContext.getDeploymentUnit().getServiceName());
            unitService.addListener(new BinderReleaseListener(service));
        }
    } else {
        throw EeLogger.ROOT_LOGGER.nullBindingName(bindingConfiguration);
    }
}
Also used : BinderService(org.jboss.as.naming.service.BinderService) DuplicateServiceException(org.jboss.msc.service.DuplicateServiceException) ContextInjectionSource(org.jboss.as.ee.naming.ContextInjectionSource) InjectionSource(org.jboss.as.ee.component.InjectionSource) ManagedReferenceFactory(org.jboss.as.naming.ManagedReferenceFactory) ServiceController(org.jboss.msc.service.ServiceController) CircularDependencyException(org.jboss.msc.service.CircularDependencyException) ContextNames(org.jboss.as.naming.deployment.ContextNames)

Example 2 with CircularDependencyException

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

the class ComponentInstallProcessor method processBindings.

@SuppressWarnings("unchecked")
private void processBindings(DeploymentPhaseContext phaseContext, ComponentConfiguration configuration, ServiceTarget serviceTarget, InjectionSource.ResolutionContext resolutionContext, List<BindingConfiguration> bindings, final ServiceBuilder<?> jndiDepServiceBuilder, final Set<ServiceName> bound) throws DeploymentUnitProcessingException {
    //we only handle java:comp bindings for components that have their own namespace here, the rest are processed by ModuleJndiBindingProcessor
    for (BindingConfiguration bindingConfiguration : bindings) {
        if (bindingConfiguration.getName().startsWith("java:comp") || !bindingConfiguration.getName().startsWith("java:")) {
            final String bindingName = bindingConfiguration.getName().startsWith("java:comp") ? bindingConfiguration.getName() : "java:comp/env/" + bindingConfiguration.getName();
            final ContextNames.BindInfo bindInfo = ContextNames.bindInfoForEnvEntry(configuration.getApplicationName(), configuration.getModuleName(), configuration.getComponentName(), configuration.getComponentDescription().getNamingMode() == ComponentNamingMode.CREATE, bindingName);
            if (bound.contains(bindInfo.getBinderServiceName())) {
                continue;
            }
            bound.add(bindInfo.getBinderServiceName());
            try {
                final BinderService service = new BinderService(bindInfo.getBindName(), bindingConfiguration.getSource());
                jndiDepServiceBuilder.addDependency(bindInfo.getBinderServiceName());
                ServiceBuilder<ManagedReferenceFactory> serviceBuilder = serviceTarget.addService(bindInfo.getBinderServiceName(), service);
                bindingConfiguration.getSource().getResourceValue(resolutionContext, serviceBuilder, phaseContext, service.getManagedObjectInjector());
                serviceBuilder.addDependency(bindInfo.getParentContextServiceName(), ServiceBasedNamingStore.class, service.getNamingStoreInjector());
                serviceBuilder.install();
            } catch (DuplicateServiceException e) {
                ServiceController<ManagedReferenceFactory> registered = (ServiceController<ManagedReferenceFactory>) CurrentServiceContainer.getServiceContainer().getService(bindInfo.getBinderServiceName());
                if (registered == null)
                    throw e;
                BinderService service = (BinderService) registered.getService();
                if (!service.getSource().equals(bindingConfiguration.getSource()))
                    throw EeLogger.ROOT_LOGGER.conflictingBinding(bindingName, bindingConfiguration.getSource());
            } catch (CircularDependencyException e) {
                throw EeLogger.ROOT_LOGGER.circularDependency(bindingName);
            }
        }
    }
}
Also used : BinderService(org.jboss.as.naming.service.BinderService) DuplicateServiceException(org.jboss.msc.service.DuplicateServiceException) ManagedReferenceFactory(org.jboss.as.naming.ManagedReferenceFactory) ServiceController(org.jboss.msc.service.ServiceController) BindingConfiguration(org.jboss.as.ee.component.BindingConfiguration) CircularDependencyException(org.jboss.msc.service.CircularDependencyException) ContextNames(org.jboss.as.naming.deployment.ContextNames)

Aggregations

ManagedReferenceFactory (org.jboss.as.naming.ManagedReferenceFactory)2 ContextNames (org.jboss.as.naming.deployment.ContextNames)2 BinderService (org.jboss.as.naming.service.BinderService)2 CircularDependencyException (org.jboss.msc.service.CircularDependencyException)2 DuplicateServiceException (org.jboss.msc.service.DuplicateServiceException)2 ServiceController (org.jboss.msc.service.ServiceController)2 BindingConfiguration (org.jboss.as.ee.component.BindingConfiguration)1 InjectionSource (org.jboss.as.ee.component.InjectionSource)1 ContextInjectionSource (org.jboss.as.ee.naming.ContextInjectionSource)1