@Override public void execute(OperationContext context, ModelNode operation) throws OperationFailedException { ModelNode modelNode = context.readResource(PathAddress.EMPTY_ADDRESS).getModel(); if (modelNode.hasDefined(USE_JDBC_STORE.getName()) && modelNode.get(USE_JDBC_STORE.getName()).asBoolean() && !modelNode.hasDefined(JDBC_STORE_DATASOURCE.getName())) { throw TransactionLogger.ROOT_LOGGER.mustBeDefinedIfTrue(JDBC_STORE_DATASOURCE.getName(), USE_JDBC_STORE.getName()); } } }
@Override protected void performRuntime(final OperationContext context, final ModelNode operation, final ModelNode model) throws OperationFailedException { // add extra security validation: authentication contexts should only be defined when Elytron Enabled is false // domains should only be defined when Elytron enabled is undefined or false (default value) if (model.hasDefined(RECOVERY_AUTHENTICATION_CONTEXT.getName()) && !RECOVERY_ELYTRON_ENABLED.resolveModelAttribute(context, model).asBoolean()) { throw SUBSYSTEM_DATASOURCES_LOGGER.attributeRequiresTrueAttribute(RECOVERY_AUTHENTICATION_CONTEXT.getName(), RECOVERY_ELYTRON_ENABLED.getName()); } else if (RECOVERY_ELYTRON_ENABLED.resolveModelAttribute(context, model).asBoolean() && model.hasDefined(RECOVERY_SECURITY_DOMAIN.getName())) { throw SUBSYSTEM_DATASOURCES_LOGGER .attributeRequiresFalseOrUndefinedAttribute(RECOVERY_SECURITY_DOMAIN.getName(), RECOVERY_ELYTRON_ENABLED.getName()); } super.performRuntime(context, operation, model); }
if (!raModel.hasDefined(ARCHIVE.getName()) && !raModel.hasDefined(MODULE.getName())) { throw ConnectorLogger.ROOT_LOGGER.archiveOrModuleRequired(); if (resourceModel.hasDefined(AUTHENTICATION_CONTEXT.getName()) && !elytronEnabled) { throw SUBSYSTEM_RA_LOGGER.attributeRequiresTrueAttribute(AUTHENTICATION_CONTEXT.getName(), ELYTRON_ENABLED.getName()); else if (resourceModel.hasDefined(AUTHENTICATION_CONTEXT_AND_APPLICATION.getName()) && !elytronEnabled) { throw SUBSYSTEM_RA_LOGGER.attributeRequiresTrueAttribute(AUTHENTICATION_CONTEXT_AND_APPLICATION.getName(), ELYTRON_ENABLED.getName()); else if (resourceModel.hasDefined(SECURITY_DOMAIN.getName()) && elytronEnabled) { throw SUBSYSTEM_RA_LOGGER.attributeRequiresFalseOrUndefinedAttribute(SECURITY_DOMAIN.getName(), ELYTRON_ENABLED.getName()); else if (resourceModel.hasDefined(SECURITY_DOMAIN_AND_APPLICATION.getName()) && elytronEnabled) { throw SUBSYSTEM_RA_LOGGER.attributeRequiresFalseOrUndefinedAttribute(SECURITY_DOMAIN_AND_APPLICATION.getName(), ELYTRON_ENABLED.getName()); if (resourceModel.hasDefined(RECOVERY_AUTHENTICATION_CONTEXT.getName()) && !elytronRecoveryEnabled) { throw SUBSYSTEM_RA_LOGGER.attributeRequiresTrueAttribute(RECOVERY_AUTHENTICATION_CONTEXT.getName(), RECOVERY_ELYTRON_ENABLED.getName()); else if (resourceModel.hasDefined(RECOVERY_SECURITY_DOMAIN.getName()) && elytronRecoveryEnabled) { throw SUBSYSTEM_RA_LOGGER.attributeRequiresFalseOrUndefinedAttribute(RECOVERY_SECURITY_DOMAIN.getName(), RECOVERY_ELYTRON_ENABLED.getName()); if (raModel.get(ARCHIVE.getName()).isDefined()) { archiveOrModuleName = ARCHIVE.resolveModelAttribute(context, raModel).asString(); } else { archiveOrModuleName = MODULE.resolveModelAttribute(context, raModel).asString();
protected void performRuntime(OperationContext context, ModelNode operation, ModelNode model) throws OperationFailedException { final String driverName = model.get(DRIVER_NAME.getName()).asString(); final ServiceRegistry registry = context.getServiceRegistry(true); ServiceName jdbcServiceName = ServiceName.JBOSS.append("jdbc-driver", driverName.replaceAll("\\.", "_")); ServiceController<?> jdbcServiceController = registry.getService(jdbcServiceName); context.removeService(jdbcServiceController); }
private void handleDatasourceAttribute(final String attributeName, final OperationContext context, final DataSource dataSource) { if (attributeName.equals(Constants.CONNECTION_URL.getName())) { setStringIfNotNull(context, dataSource.getConnectionUrl()); } else if (attributeName.equals(Constants.CONNECTION_PROPERTIES.getName())) { } else if (attributeName.equals(Constants.DRIVER_CLASS.getName())) { setStringIfNotNull(context, dataSource.getDriverClass()); } else if (attributeName.equals(Constants.DATASOURCE_CLASS.getName())) { setStringIfNotNull(context, dataSource.getDataSourceClass()); } else if (attributeName.equals(Constants.JNDI_NAME.getName())) { setStringIfNotNull(context, dataSource.getJndiName()); } else if (attributeName.equals(Constants.DATASOURCE_DRIVER.getName())) { setStringIfNotNull(context, dataSource.getDriver()); } else if (attributeName.equals(Constants.NEW_CONNECTION_SQL.getName())) { setStringIfNotNull(context, dataSource.getNewConnectionSql()); } else if (attributeName.equals(Constants.URL_DELIMITER.getName())) { setStringIfNotNull(context, dataSource.getUrlDelimiter()); } else if (attributeName.equals(Constants.URL_SELECTOR_STRATEGY_CLASS_NAME.getName())) { setStringIfNotNull(context, dataSource.getUrlSelectorStrategyClassName()); } else if (attributeName.equals(Constants.USE_JAVA_CONTEXT.getName())) { setBooleanIfNotNull(context, dataSource.isUseJavaContext()); } else if (attributeName.equals(Constants.JTA.getName())) { setBooleanIfNotNull(context, dataSource.isJTA()); } else if (attributeName.equals(Constants.ENABLED.getName())) { setBooleanIfNotNull(context, dataSource.isEnabled()); } else if (attributeName.equals(org.jboss.as.connector.subsystems.common.pool.Constants.MAX_POOL_SIZE.getName())) { if (dataSource.getPool() == null) { return; } else if (attributeName.equals(org.jboss.as.connector.subsystems.common.pool.Constants.INITIAL_POOL_SIZE.getName())) {
@Override protected Object[] getParameters(OperationContext context, ModelNode operation) { Object[] parameters = null; try { if (operation.hasDefined(USERNAME.getName()) || operation.hasDefined(PASSWORD.getName())) { parameters = new Object[2]; parameters[0] = USERNAME.resolveModelAttribute(context, operation).asString(); parameters[1] = PASSWORD.resolveModelAttribute(context, operation).asString(); } } catch (OperationFailedException ofe) { //just return null } return parameters; }
@Override protected boolean applyUpdateToRuntime(OperationContext context, ModelNode operation, String attributeName, ModelNode resolvedValue, ModelNode currentValue, HandbackHolder<AgroalConnectionPoolConfiguration> handbackHolder) throws OperationFailedException { ModelNode newBlockingTimeout = resolvedValue.remove(AbstractDataSourceDefinition.BLOCKING_TIMEOUT_MILLIS_ATTRIBUTE.getName()); ModelNode newMaxSize = resolvedValue.remove(AbstractDataSourceDefinition.MAX_SIZE_ATTRIBUTE.getName()); ModelNode newMinSize = resolvedValue.remove(AbstractDataSourceDefinition.MIN_SIZE_ATTRIBUTE.getName()); for (String attribute : resolvedValue.keys()) { if (!currentValue.hasDefined(attribute) || !resolvedValue.get(attribute).equals(currentValue.get(attribute))) { // Other attributes changed. Restart required return true; } } if (newBlockingTimeout != null) { getDataSource(context).getConfiguration().connectionPoolConfiguration().setAcquisitionTimeout(Duration.ofMillis(newBlockingTimeout.asInt())); } if (newMaxSize != null) { getDataSource(context).getConfiguration().connectionPoolConfiguration().setMaxSize(newMaxSize.asInt()); // if max-size decreases Agroal will gracefully destroy connections when they are returned to the pool, so there is nothing to do here } if (newMinSize != null) { getDataSource(context).getConfiguration().connectionPoolConfiguration().setMinSize(newMinSize.asInt()); // if min-size increases Agroal will create new connections when looking into the (shared) pool. FlushMode.FILL could be used here to enforce the new min-size } return false; }
private void writeProcessId(final XMLExtendedStreamWriter writer, final ModelNode value) throws XMLStreamException { writer.writeStartElement(Element.PROCESS_ID.getLocalName()); if (value.get(TransactionSubsystemRootResourceDefinition.PROCESS_ID_UUID.getName()).asBoolean(false)) { writer.writeEmptyElement(Element.UUID.getLocalName()); } else { writer.writeStartElement(Element.SOCKET.getLocalName()); TransactionSubsystemRootResourceDefinition.PROCESS_ID_SOCKET_BINDING.marshallAsAttribute(value, writer); TransactionSubsystemRootResourceDefinition.PROCESS_ID_SOCKET_MAX_PORTS.marshallAsAttribute(value, writer); writer.writeEndElement(); } writer.writeEndElement(); } }
@Override public void validateParameter(String parameterName, ModelNode value) throws OperationFailedException { if (name.equals(parameterName)) { ModelNode parameters = value.clone(); if (isConfigured(parameters)) { for (SimpleAttributeDefinition attribute : KEY_STORE_FIELDS) { attribute.getValidator().validateParameter(attribute.getName(), parameters.get(attribute.getName())); } } } }
public static Extension extractExtension(final OperationContext operationContext, final ModelNode dataSourceNode, final SimpleAttributeDefinition className, final PropertiesAttributeDefinition propertyName) throws ValidateException, OperationFailedException { if (dataSourceNode.hasDefined(className.getName())) { String exceptionSorterClassName = getResolvedStringIfSetOrGetDefault(operationContext, dataSourceNode, className); Map<String, String> unwrapped = propertyName.unwrap(operationContext, dataSourceNode); Map<String, String> exceptionSorterProperty = unwrapped.size() > 0 ? unwrapped : null; return new Extension(exceptionSorterClassName, exceptionSorterProperty); } else { return null; } }
@Override protected boolean applyUpdateToRuntime(OperationContext context, ModelNode operation, String attributeName, ModelNode resolvedValue, ModelNode currentValue, HandbackHolder<Void> voidHandback) { ModelNode submodel = context.readResource(PathAddress.EMPTY_ADDRESS).getModel(); //do the job return (submodel.hasDefined(Constants.ENABLED.getName()) && submodel.get(Constants.ENABLED.getName()).asBoolean()) || Constants.JNDI_NAME.getName().equals(attributeName); }
PathAddress path = PathAddress.pathAddress(address); final String raName = context.getCurrentAddress().getParent().getLastElement().getValue(); final String archiveOrModuleName; ModelNode raModel = context.readResourceFromRoot(path.subAddress(0, path.size() - 1), false).getModel(); final boolean statsEnabled = STATISTICS_ENABLED.resolveModelAttribute(context, raModel).asBoolean(); if (!raModel.hasDefined(ARCHIVE.getName()) && !raModel.hasDefined(MODULE.getName())) { throw ConnectorLogger.ROOT_LOGGER.archiveOrModuleRequired(); if (raModel.get(ARCHIVE.getName()).isDefined()) { archiveOrModuleName = ARCHIVE.resolveModelAttribute(context, raModel).asString(); } else { archiveOrModuleName = MODULE.resolveModelAttribute(context, raModel).asString(); final String poolName = PathAddress.pathAddress(address).getLastElement().getValue(); adminObjectValue = RaOperationUtil.buildAdminObjects(context, operation, poolName); } catch (ValidateException e) { throw new OperationFailedException(e, new ModelNode().set(ConnectorLogger.ROOT_LOGGER.failedToCreate("AdminObject", operation, e.getLocalizedMessage())));
public void execute(OperationContext context, ModelNode operation) throws OperationFailedException { // Log that this is deprecated ConnectorLogger.ROOT_LOGGER.legacyDisableEnableOperation(operation.get(OP).asString()); // Just delegate to write-attribute. ModelNode writeAttributeOp = getWriteAttributeOperation(context.getCurrentAddress(), Constants.ENABLED.getName(), enabled); OperationStepHandler writeHandler = context.getResourceRegistration().getOperationHandler(PathAddress.EMPTY_ADDRESS, WRITE_ATTRIBUTE_OPERATION); // set the addFirst param to 'true' so the write-attribute runs before any other steps already registered; // i.e. in the logically equivalent spot in the sequence to this step context.addStep(writeAttributeOp, writeHandler, OperationContext.Stage.MODEL, true); } }
private void handleDatasourceAttribute(final String attributeName, final OperationContext context, final XaDataSource dataSource) { if (attributeName.equals(Constants.XA_DATASOURCE_CLASS.getName())) { setStringIfNotNull(context, dataSource.getXaDataSourceClass()); } else if (attributeName.equals(Constants.JNDI_NAME.getName())) { setStringIfNotNull(context, dataSource.getJndiName()); } else if (attributeName.equals(Constants.DATASOURCE_DRIVER.getName())) { setStringIfNotNull(context, dataSource.getDriver()); } else if (attributeName.equals(Constants.NEW_CONNECTION_SQL.getName())) { setStringIfNotNull(context, dataSource.getNewConnectionSql()); } else if (attributeName.equals(Constants.URL_DELIMITER.getName())) { setStringIfNotNull(context, dataSource.getUrlDelimiter()); } else if (attributeName.equals(Constants.URL_PROPERTY.getName())) { setStringIfNotNull(context, dataSource.getUrlProperty()); } else if (attributeName.equals(Constants.URL_SELECTOR_STRATEGY_CLASS_NAME.getName())) { setStringIfNotNull(context, dataSource.getUrlSelectorStrategyClassName()); } else if (attributeName.equals(Constants.USE_JAVA_CONTEXT.getName())) { setBooleanIfNotNull(context, dataSource.isUseJavaContext()); } else if (attributeName.equals(Constants.ENABLED.getName())) { setBooleanIfNotNull(context, dataSource.isEnabled()); } else if (attributeName.equals(org.jboss.as.connector.subsystems.common.pool.Constants.MAX_POOL_SIZE.getName())) { if (dataSource.getXaPool() == null) { return; } else if (attributeName.equals(org.jboss.as.connector.subsystems.common.pool.Constants.INITIAL_POOL_SIZE.getName())) { if (dataSource.getXaPool() == null) { return; } else if (attributeName.equals(org.jboss.as.connector.subsystems.common.pool.Constants.MIN_POOL_SIZE.getName())) { if (dataSource.getXaPool() == null) { return;
@Override protected void performRuntime(final OperationContext context, final ModelNode operation, final ModelNode model) throws OperationFailedException { // add extra security validation: authentication contexts should only be defined when Elytron Enabled is true // domains should only be defined when Elytron enabled is undefined or false (default value) if (model.hasDefined(AUTHENTICATION_CONTEXT.getName()) && !ELYTRON_ENABLED.resolveModelAttribute(context, model).asBoolean()) { throw SUBSYSTEM_DATASOURCES_LOGGER.attributeRequiresTrueAttribute(AUTHENTICATION_CONTEXT.getName(), ELYTRON_ENABLED.getName()); } else if (ELYTRON_ENABLED.resolveModelAttribute(context, model).asBoolean() && model.hasDefined(SECURITY_DOMAIN.getName())){ throw SUBSYSTEM_DATASOURCES_LOGGER.attributeRequiresFalseOrUndefinedAttribute(SECURITY_DOMAIN.getName(), ELYTRON_ENABLED.getName()); } final boolean enabled = ENABLED.resolveModelAttribute(context, model).asBoolean(); if (enabled) { firstRuntimeStep(context, operation, model); context.addStep(new OperationStepHandler() { @Override public void execute(OperationContext operationContext, ModelNode modelNode) throws OperationFailedException { secondRuntimeStep(context, operation, context.getResourceRegistrationForUpdate(), model, isXa()); } }, OperationContext.Stage.RUNTIME); } }
@Override public void validateResolvedParameter(String parameterName, ModelNode value) throws OperationFailedException { if (name.equals(parameterName)) { ModelNode parameters = value.clone(); if (isConfigured(parameters)) { for (SimpleAttributeDefinition attribute : KEY_STORE_FIELDS) { attribute.getValidator().validateParameter(attribute.getName(), parameters.get(attribute.getName())); } } } }
@Override public void execute(OperationContext operationContext, ModelNode operation) throws OperationFailedException { ModelNode node = context.readResource(PathAddress.EMPTY_ADDRESS).getModel(); if (node.hasDefined(TransactionSubsystemRootResourceDefinition.PROCESS_ID_UUID.getName()) && node.get(TransactionSubsystemRootResourceDefinition.PROCESS_ID_UUID.getName()).asBoolean()) { if (node.hasDefined(TransactionSubsystemRootResourceDefinition.PROCESS_ID_SOCKET_BINDING.getName())) { throw TransactionLogger.ROOT_LOGGER.mustBeUndefinedIfTrue(TransactionSubsystemRootResourceDefinition.PROCESS_ID_SOCKET_BINDING.getName(), TransactionSubsystemRootResourceDefinition.PROCESS_ID_UUID.getName()); } else if (node.hasDefined(TransactionSubsystemRootResourceDefinition.PROCESS_ID_SOCKET_MAX_PORTS.getName())) { throw TransactionLogger.ROOT_LOGGER.mustBeUndefinedIfTrue(TransactionSubsystemRootResourceDefinition.PROCESS_ID_SOCKET_MAX_PORTS.getName(), TransactionSubsystemRootResourceDefinition.PROCESS_ID_UUID.getName()); } } else if (node.hasDefined(TransactionSubsystemRootResourceDefinition.PROCESS_ID_SOCKET_BINDING.getName())) { //it's fine do nothing } else if (node.hasDefined(TransactionSubsystemRootResourceDefinition.PROCESS_ID_SOCKET_MAX_PORTS.getName())) { throw TransactionLogger.ROOT_LOGGER.mustBedefinedIfDefined(TransactionSubsystemRootResourceDefinition.PROCESS_ID_SOCKET_BINDING.getName(), TransactionSubsystemRootResourceDefinition.PROCESS_ID_SOCKET_MAX_PORTS.getName()); } else { // not uuid and also not sockets! throw TransactionLogger.ROOT_LOGGER.eitherTrueOrDefined(TransactionSubsystemRootResourceDefinition.PROCESS_ID_UUID.getName(), TransactionSubsystemRootResourceDefinition.PROCESS_ID_SOCKET_BINDING.getName()); } } }, OperationContext.Stage.MODEL);