use of org.jboss.jca.core.workmanager.policy.WaterMark in project wildfly by wildfly.
the class DistributedWorkManagerAdd method performRuntime.
@Override
protected void performRuntime(final OperationContext context, final ModelNode operation, final Resource resource) throws OperationFailedException {
ModelNode model = resource.getModel();
String name = JcaDistributedWorkManagerDefinition.DWmParameters.NAME.getAttribute().resolveModelAttribute(context, model).asString();
boolean elytronEnabled = JcaWorkManagerDefinition.WmParameters.ELYTRON_ENABLED.getAttribute().resolveModelAttribute(context, resource.getModel()).asBoolean();
String policy = JcaDistributedWorkManagerDefinition.DWmParameters.POLICY.getAttribute().resolveModelAttribute(context, model).asString();
String selector = JcaDistributedWorkManagerDefinition.DWmParameters.SELECTOR.getAttribute().resolveModelAttribute(context, model).asString();
ServiceTarget serviceTarget = context.getServiceTarget();
NamedDistributedWorkManager namedDistributedWorkManager = new NamedDistributedWorkManager(name, elytronEnabled);
if (policy != null && !policy.trim().isEmpty()) {
switch(JcaDistributedWorkManagerDefinition.PolicyValue.valueOf(policy)) {
case NEVER:
{
namedDistributedWorkManager.setPolicy(new Never());
break;
}
case ALWAYS:
{
namedDistributedWorkManager.setPolicy(new Always());
break;
}
case WATERMARK:
{
namedDistributedWorkManager.setPolicy(new WaterMark());
break;
}
default:
throw ROOT_LOGGER.unsupportedPolicy(policy);
}
Injection injector = new Injection();
for (Map.Entry<String, String> entry : ((PropertiesAttributeDefinition) JcaDistributedWorkManagerDefinition.DWmParameters.POLICY_OPTIONS.getAttribute()).unwrap(context, model).entrySet()) {
try {
injector.inject(namedDistributedWorkManager.getPolicy(), entry.getKey(), entry.getValue());
} catch (Exception e) {
ROOT_LOGGER.unsupportedPolicyOption(entry.getKey());
}
}
} else {
namedDistributedWorkManager.setPolicy(new WaterMark());
}
if (selector != null && !selector.trim().isEmpty()) {
switch(JcaDistributedWorkManagerDefinition.SelectorValue.valueOf(selector)) {
case FIRST_AVAILABLE:
{
namedDistributedWorkManager.setSelector(new FirstAvailable());
break;
}
case MAX_FREE_THREADS:
{
namedDistributedWorkManager.setSelector(new MaxFreeThreads());
break;
}
case PING_TIME:
{
namedDistributedWorkManager.setSelector(new PingTime());
break;
}
default:
throw ROOT_LOGGER.unsupportedSelector(selector);
}
Injection injector = new Injection();
for (Map.Entry<String, String> entry : ((PropertiesAttributeDefinition) JcaDistributedWorkManagerDefinition.DWmParameters.SELECTOR_OPTIONS.getAttribute()).unwrap(context, model).entrySet()) {
try {
injector.inject(namedDistributedWorkManager.getSelector(), entry.getKey(), entry.getValue());
} catch (Exception e) {
ROOT_LOGGER.unsupportedSelectorOption(entry.getKey());
}
}
} else {
namedDistributedWorkManager.setSelector(new PingTime());
}
DistributedWorkManagerService wmService = new DistributedWorkManagerService(namedDistributedWorkManager);
ServiceBuilder<NamedDistributedWorkManager> builder = serviceTarget.addService(ConnectorServices.WORKMANAGER_SERVICE.append(name), wmService);
builder.addDependency(ClusteringDefaultRequirement.COMMAND_DISPATCHER_FACTORY.getServiceName(context), CommandDispatcherFactory.class, wmService.getCommandDispatcherFactoryInjector());
if (resource.hasChild(PathElement.pathElement(Element.LONG_RUNNING_THREADS.getLocalName()))) {
builder.addDependency(ThreadsServices.EXECUTOR.append(WORKMANAGER_LONG_RUNNING).append(name), Executor.class, wmService.getExecutorLongInjector());
}
builder.addDependency(ThreadsServices.EXECUTOR.append(WORKMANAGER_SHORT_RUNNING).append(name), Executor.class, wmService.getExecutorShortInjector());
builder.addDependency(TxnServices.JBOSS_TXN_CONTEXT_XA_TERMINATOR, JBossContextXATerminator.class, wmService.getXaTerminatorInjector()).setInitialMode(ServiceController.Mode.ON_DEMAND).install();
WorkManagerStatisticsService wmStatsService = new WorkManagerStatisticsService(context.getResourceRegistrationForUpdate(), name, true);
serviceTarget.addService(ConnectorServices.WORKMANAGER_STATS_SERVICE.append(name), wmStatsService).addDependency(ConnectorServices.WORKMANAGER_SERVICE.append(name), WorkManager.class, wmStatsService.getWorkManagerInjector()).setInitialMode(ServiceController.Mode.PASSIVE).install();
DistributedWorkManagerStatisticsService dwmStatsService = new DistributedWorkManagerStatisticsService(context.getResourceRegistrationForUpdate(), name, true);
serviceTarget.addService(ConnectorServices.DISTRIBUTED_WORKMANAGER_STATS_SERVICE.append(name), dwmStatsService).addDependency(ConnectorServices.WORKMANAGER_SERVICE.append(name), DistributedWorkManager.class, dwmStatsService.getDistributedWorkManagerInjector()).setInitialMode(ServiceController.Mode.PASSIVE).install();
PathElement peDistributedWm = PathElement.pathElement(org.jboss.as.connector.subsystems.resourceadapters.Constants.STATISTICS_NAME, "distributed");
PathElement peLocaldWm = PathElement.pathElement(org.jboss.as.connector.subsystems.resourceadapters.Constants.STATISTICS_NAME, "local");
final Resource wmResource = new IronJacamarResource.IronJacamarRuntimeResource();
if (!resource.hasChild(peLocaldWm))
resource.registerChild(peLocaldWm, wmResource);
final Resource dwmResource = new IronJacamarResource.IronJacamarRuntimeResource();
if (!resource.hasChild(peDistributedWm))
resource.registerChild(peDistributedWm, dwmResource);
}
use of org.jboss.jca.core.workmanager.policy.WaterMark in project wildfly by wildfly.
the class JcaDistributedWorkManagerWriteHandler method applyUpdateToRuntime.
@Override
protected boolean applyUpdateToRuntime(OperationContext context, ModelNode operation, String attributeName, ModelNode resolvedValue, ModelNode currentValue, HandbackHolder<JcaSubsystemConfiguration> jcaSubsystemConfigurationHandbackHolder) throws OperationFailedException {
final ModelNode address = operation.require(OP_ADDR);
final String name = PathAddress.pathAddress(address).getLastElement().getValue();
Object wm = context.getServiceRegistry(true).getService(ConnectorServices.WORKMANAGER_SERVICE.append(name)).getValue();
if (wm == null || !(wm instanceof NamedDistributedWorkManager)) {
throw ConnectorLogger.ROOT_LOGGER.failedToFindDistributedWorkManager(name);
}
NamedDistributedWorkManager namedDistributedWorkManager = (NamedDistributedWorkManager) wm;
Injection injector = new Injection();
if (attributeName.equals(JcaDistributedWorkManagerDefinition.DWmParameters.POLICY.getAttribute().getName())) {
switch(JcaDistributedWorkManagerDefinition.PolicyValue.valueOf(resolvedValue.asString())) {
case NEVER:
{
namedDistributedWorkManager.setPolicy(new Never());
break;
}
case ALWAYS:
{
namedDistributedWorkManager.setPolicy(new Always());
break;
}
case WATERMARK:
{
namedDistributedWorkManager.setPolicy(new WaterMark());
break;
}
default:
{
throw ROOT_LOGGER.unsupportedPolicy(resolvedValue.asString());
}
}
} else if (attributeName.equals(JcaDistributedWorkManagerDefinition.DWmParameters.SELECTOR.getAttribute().getName())) {
switch(JcaDistributedWorkManagerDefinition.SelectorValue.valueOf(resolvedValue.asString())) {
case FIRST_AVAILABLE:
{
namedDistributedWorkManager.setSelector(new FirstAvailable());
break;
}
case MAX_FREE_THREADS:
{
namedDistributedWorkManager.setSelector(new MaxFreeThreads());
break;
}
case PING_TIME:
{
namedDistributedWorkManager.setSelector(new PingTime());
break;
}
default:
{
throw ROOT_LOGGER.unsupportedSelector(resolvedValue.asString());
}
}
} else if (attributeName.equals(JcaDistributedWorkManagerDefinition.DWmParameters.POLICY_OPTIONS.getAttribute().getName()) && namedDistributedWorkManager.getPolicy() != null) {
for (Property property : resolvedValue.asPropertyList()) {
try {
injector.inject(namedDistributedWorkManager.getPolicy(), property.getName(), property.getValue().asString());
} catch (Exception e) {
ROOT_LOGGER.unsupportedPolicyOption(property.getName());
}
}
} else if (attributeName.equals(JcaDistributedWorkManagerDefinition.DWmParameters.SELECTOR_OPTIONS.getAttribute().getName())) {
for (Property property : resolvedValue.asPropertyList()) {
try {
injector.inject(namedDistributedWorkManager.getSelector(), property.getName(), property.getValue().asString());
} catch (Exception e) {
ROOT_LOGGER.unsupportedSelectorOption(property.getName());
}
}
}
return false;
}
Aggregations