*/
public class SharedSessionManagerDeploymentProcessor implements DeploymentUnitProcessor {
@Override
public void deploy(DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException {
DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit();
SharedSessionManagerConfig sharedConfig = deploymentUnit.getAttachment(UndertowAttachments.SHARED_SESSION_MANAGER_CONFIG);
if (sharedConfig == null) {
return;
}
ServiceTarget target = phaseContext.getServiceTarget();
ServiceName deploymentServiceName = deploymentUnit.getServiceName();
ServiceName managerServiceName = deploymentServiceName.append(SharedSessionManagerConfig.SHARED_SESSION_MANAGER_SERVICE_NAME);
DistributableSessionManagerFactoryBuilder builder = new DistributableSessionManagerFactoryBuilderValue().getValue();
if (builder != null) {
Module module = deploymentUnit.getAttachment(Attachments.MODULE);
builder.build(target, managerServiceName, new SimpleDistributableSessionManagerConfiguration(sharedConfig, deploymentUnit.getName(), module))
.setInitialMode(Mode.ON_DEMAND)
.install();
} else {
InMemorySessionManager manager = new InMemorySessionManager(deploymentUnit.getName(), sharedConfig.getMaxActiveSessions());
if (sharedConfig.getSessionConfig() != null) {
if (sharedConfig.getSessionConfig().getSessionTimeoutSet()) {
manager.setDefaultSessionTimeout(sharedConfig.getSessionConfig().getSessionTimeout());
}
}
SessionManagerFactory factory = new ImmediateSessionManagerFactory(manager);
target.addService(managerServiceName, new ValueService<>(new ImmediateValue<>(factory))).setInitialMode(Mode.ON_DEMAND).install();
}