This is clunky but is more correct:
```
ModelNode tmp = new ModelNode();
tmp.get(POOL_MAX_SIZE.getName().set(operation.get(ModelDescriptionConstants.VALUE);
int newSize = POOL_MAX_SIZE.resolveModelAttribute(context, tmp).asInt();
```

The resolveModelAttribute method does stuff that shouldn't be bypassed. We should consider adding method to AttributeDefinition to eliminate the need for that "tmp" ModelNode. Something like:
```
 public ModelNode resolveParameterValue(final ExpressionResolver resolver, final ModelNode parameterValue) throws OperationFailedException {
        ModelNode node = new ModelNode(parameterValue);
        if (!node.isDefined() && defaultValue.isDefined()) {
            node.set(defaultValue);
        }
        final ModelNode resolved = resolver.resolveExpressions(node);
        validator.validateParameter(name, resolved);
        return resolved;
    }
```
The usage in this case would then be:

int newSize = POOL_MAX_SIZE.resolveParameterValue(context, operation.get(ModelDescriptionConstants.VALUE)).asInt();

If we add this, there should be an overloaded variant resolveParameterValue(final OperationContext context, final ModelNode parameterValue) as well.