Skip to content

Commit

Permalink
WFLY-4017 Pass the selector service into the DUP on creation instead …
Browse files Browse the repository at this point in the history
…of using a service lookup
  • Loading branch information
stuartwdouglas committed Oct 27, 2014
1 parent 09378c3 commit dd51cbc
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 30 deletions.
Expand Up @@ -50,8 +50,14 @@
*/
public class EjbClientContextSetupProcessor implements DeploymentUnitProcessor {

private final TCCLEJBClientContextSelectorService tcclEJBClientContextSelectorServiceController;

private static final Logger logger = Logger.getLogger(EjbClientContextSetupProcessor.class);

public EjbClientContextSetupProcessor(TCCLEJBClientContextSelectorService tcclEJBClientContextSelectorServiceController) {
this.tcclEJBClientContextSelectorServiceController = tcclEJBClientContextSelectorServiceController;
}

@Override
public void deploy(final DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException {
final DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit();
Expand All @@ -60,15 +66,12 @@ public void deploy(final DeploymentPhaseContext phaseContext) throws DeploymentU
return;
}
final EJBClientContext ejbClientContext = this.getEJBClientContext(phaseContext);
final ServiceController<TCCLEJBClientContextSelectorService> tcclEJBClientContextSelectorServiceController = (ServiceController<TCCLEJBClientContextSelectorService>) phaseContext.getServiceRegistry().getService(TCCLEJBClientContextSelectorService.TCCL_BASED_EJB_CLIENT_CONTEXT_SELECTOR_SERVICE_NAME);
if (tcclEJBClientContextSelectorServiceController != null) {
final TCCLEJBClientContextSelectorService tcclBasedEJBClientContextSelector = tcclEJBClientContextSelectorServiceController.getValue();
// associate the EJB client context with the deployment classloader
logger.debug("Registering EJB client context " + ejbClientContext + " for classloader " + module.getClassLoader());
tcclBasedEJBClientContextSelector.registerEJBClientContext(ejbClientContext, module.getClassLoader());
}
final TCCLEJBClientContextSelectorService tcclBasedEJBClientContextSelector = tcclEJBClientContextSelectorServiceController.getValue();
// associate the EJB client context with the deployment classloader
logger.debugf("Registering EJB client context %s for classloader %s", ejbClientContext, module.getClassLoader());
tcclBasedEJBClientContextSelector.registerEJBClientContext(ejbClientContext, module.getClassLoader());
final EEModuleDescription moduleDescription = deploymentUnit.getAttachment(Attachments.EE_MODULE_DESCRIPTION);
if(moduleDescription == null) {
if (moduleDescription == null) {
return;
}
//we need to make sure all our components have a dependency on the EJB client context
Expand All @@ -79,20 +82,15 @@ public void deploy(final DeploymentPhaseContext phaseContext) throws DeploymentU
}

@Override
public void undeploy(final DeploymentUnit context) {
final DeploymentUnit deploymentUnit = context;
public void undeploy(final DeploymentUnit deploymentUnit) {
final Module module = deploymentUnit.getAttachment(org.jboss.as.server.deployment.Attachments.MODULE);
if (module == null) {
return;
}
final ServiceController<TCCLEJBClientContextSelectorService> tcclEJBClientContextSelectorServiceController = (ServiceController<TCCLEJBClientContextSelectorService>) context.getServiceRegistry().getService(TCCLEJBClientContextSelectorService.TCCL_BASED_EJB_CLIENT_CONTEXT_SELECTOR_SERVICE_NAME);

if (tcclEJBClientContextSelectorServiceController != null) {
final TCCLEJBClientContextSelectorService tcclBasedEJBClientContextSelector = tcclEJBClientContextSelectorServiceController.getValue();
// de-associate the EJB client context with the deployment classloader
logger.debug("unRegistering EJB client context for classloader " + module.getClassLoader());
tcclBasedEJBClientContextSelector.unRegisterEJBClientContext(module.getClassLoader());
}
final TCCLEJBClientContextSelectorService tcclBasedEJBClientContextSelector = tcclEJBClientContextSelectorServiceController.getValue();
// de-associate the EJB client context with the deployment classloader
logger.debugf("unRegistering EJB client context for classloader %s", module.getClassLoader());
tcclBasedEJBClientContextSelector.unRegisterEJBClientContext(module.getClassLoader());
}

private EJBClientContext getEJBClientContext(final DeploymentPhaseContext phaseContext) {
Expand All @@ -109,8 +107,7 @@ private EJBClientContext getEJBClientContext(final DeploymentPhaseContext phaseC
if (ejbClientContext != null) {
return ejbClientContext;
}
logger.debug("Deployment unit " + deploymentUnit + " doesn't have any explicit EJB client context configured. " +
"Falling back on the default " + DefaultEjbClientContextService.DEFAULT_SERVICE_NAME + " EJB client context service");
logger.debugf("Deployment unit %s doesn't have any explicit EJB client context configured. Falling back on the default %s EJB client context service", deploymentUnit, DefaultEjbClientContextService.DEFAULT_SERVICE_NAME);
final ServiceRegistry serviceRegistry = phaseContext.getServiceRegistry();
final ServiceController<EJBClientContext> ejbClientContextServiceController = (ServiceController<EJBClientContext>) serviceRegistry.getRequiredService(DefaultEjbClientContextService.DEFAULT_SERVICE_NAME);
return ejbClientContextServiceController.getValue();
Expand Down
Expand Up @@ -42,6 +42,7 @@
import org.jboss.msc.value.InjectedValue;
import org.jboss.remoting3.Connection;
import org.xnio.IoFuture;
import org.xnio.IoUtils;
import org.xnio.OptionMap;

import java.io.IOException;
Expand Down Expand Up @@ -127,14 +128,10 @@ public synchronized void stop(StopContext context) {
final LocalEjbReceiver localEjbReceiver = this.localEjbReceiverInjectedValue.getOptionalValue();
if (localEjbReceiver != null) {
localEjbReceiver.stop(context);
logger.debug("Removed a local EJB receiver from descriptor based EJB client context named " + context.getController().getName());
logger.debugf("Removed a local EJB receiver from descriptor based EJB client context named %s", context.getController().getName());
}
if(this.ejbClientContext != null) {
try {
this.ejbClientContext.close();
} catch(IOException e) {
logger.warn("Failed to close ejb context", e);
}
IoUtils.safeClose(this.ejbClientContext);
}
this.ejbClientContext = null;
}
Expand Down
Expand Up @@ -213,6 +213,8 @@ protected void performBoottime(final OperationContext context, ModelNode operati
final boolean defaultMissingMethodValue = defaultMissingMethod.asBoolean();
this.missingMethodPermissionsDenyAccessMergingProcessor.setDenyAccessByDefault(defaultMissingMethodValue);

final TCCLEJBClientContextSelectorService tcclBasedClientContextSelector = new TCCLEJBClientContextSelectorService();


context.addStep(new AbstractDeploymentChainStep() {
@Override
Expand Down Expand Up @@ -241,7 +243,7 @@ protected void execute(DeploymentProcessorTarget processorTarget) {
processorTarget.addDeploymentProcessor(EJB3Extension.SUBSYSTEM_NAME, Phase.POST_MODULE, Phase.POST_MODULE_EE_COMPONENT_SUSPEND, new EJBComponentSuspendDeploymentUnitProcessor());


processorTarget.addDeploymentProcessor(EJB3Extension.SUBSYSTEM_NAME, Phase.INSTALL, Phase.INSTALL_EJB_CLIENT_CONTEXT, new EjbClientContextSetupProcessor());
processorTarget.addDeploymentProcessor(EJB3Extension.SUBSYSTEM_NAME, Phase.INSTALL, Phase.INSTALL_EJB_CLIENT_CONTEXT, new EjbClientContextSetupProcessor(tcclBasedClientContextSelector));
processorTarget.addDeploymentProcessor(EJB3Extension.SUBSYSTEM_NAME, Phase.INSTALL, Phase.INSTALL_EJB_JACC_PROCESSING, new JaccEjbDeploymentProcessor());

processorTarget.addDeploymentProcessor(EJB3Extension.SUBSYSTEM_NAME, Phase.CLEANUP, Phase.CLEANUP_EJB, new EjbCleanUpProcessor());
Expand Down Expand Up @@ -336,7 +338,7 @@ protected void execute(DeploymentProcessorTarget processorTarget) {

newControllers.add(context.getServiceTarget().addService(DeploymentRepository.SERVICE_NAME, new DeploymentRepository()).install());

addRemoteInvocationServices(context, newControllers, model, appclient);
addRemoteInvocationServices(context, newControllers, model, appclient, tcclBasedClientContextSelector);
// add clustering service
addClusteringServices(context, newControllers, appclient);

Expand Down Expand Up @@ -372,11 +374,10 @@ protected void execute(DeploymentProcessorTarget processorTarget) {
}

private static void addRemoteInvocationServices(final OperationContext context, final List<ServiceController<?>> newControllers,
final ModelNode ejbSubsystemModel, final boolean appclient) throws OperationFailedException {
final ModelNode ejbSubsystemModel, final boolean appclient, TCCLEJBClientContextSelectorService tcclBasedClientContextSelector) throws OperationFailedException {

final ServiceTarget serviceTarget = context.getServiceTarget();
// Add the tccl based client context selector
final TCCLEJBClientContextSelectorService tcclBasedClientContextSelector = new TCCLEJBClientContextSelectorService();
context.getServiceTarget().addService(TCCLEJBClientContextSelectorService.TCCL_BASED_EJB_CLIENT_CONTEXT_SELECTOR_SERVICE_NAME,
tcclBasedClientContextSelector).install();

Expand Down

0 comments on commit dd51cbc

Please sign in to comment.