All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.wildfly.swarm.config.datasources.XADataSource Maven / Gradle / Ivy

package org.wildfly.swarm.config.datasources;

import org.wildfly.swarm.config.runtime.AttributeDocumentation;
import org.wildfly.swarm.config.runtime.ResourceDocumentation;
import org.wildfly.swarm.config.runtime.SingletonResource;
import org.wildfly.swarm.config.runtime.Address;
import org.wildfly.swarm.config.runtime.ResourceType;
import java.beans.PropertyChangeSupport;
import java.beans.PropertyChangeListener;
import java.util.List;
import org.wildfly.swarm.config.runtime.Subresource;
import org.wildfly.swarm.config.datasources.xa_data_source.XADatasourcePropertiesConsumer;
import org.wildfly.swarm.config.datasources.xa_data_source.XADatasourcePropertiesSupplier;
import org.wildfly.swarm.config.datasources.xa_data_source.XADatasourceProperties;
import org.wildfly.swarm.config.runtime.SubresourceInfo;
import org.wildfly.swarm.config.runtime.ModelNodeBinding;
import java.util.Map;
import java.util.Arrays;
import org.wildfly.swarm.config.datasources.FlushStrategy;

/**
 * A JDBC XA data-source configuration
 */
@Address("/subsystem=datasources/xa-data-source=*")
@ResourceType("xa-data-source")
public class XADataSource>
		implements
			org.wildfly.swarm.config.runtime.Keyed {

	private String key;
	private PropertyChangeSupport pcs;
	private XADataSourceResources subresources = new XADataSourceResources();
	@AttributeDocumentation("The allocation retry element indicates the number of times that allocating a connection should be tried before throwing an exception")
	private Integer allocationRetry;
	@AttributeDocumentation("The allocation retry wait millis element specifies the amount of time, in milliseconds, to wait between retrying to allocate a connection")
	private Long allocationRetryWaitMillis;
	@AttributeDocumentation("Specifies if multiple users will access the datasource through the getConnection(user, password) method and hence if the internal pool type should account for that")
	private Boolean allowMultipleUsers;
	@AttributeDocumentation("The Elytron authentication context which defines the javax.security.auth.Subject that is used to distinguish connections in the pool.")
	private String authenticationContext;
	@AttributeDocumentation("An element to specify that connections should be validated on a background thread versus being validated prior to use.")
	private Boolean backgroundValidation;
	@AttributeDocumentation("The background-validation-millis element specifies the amount of time, in milliseconds, that background validation will run.")
	private Long backgroundValidationMillis;
	@AttributeDocumentation("The blocking-timeout-millis element specifies the maximum time, in milliseconds, to block while waiting for a connection before throwing an exception. Note that this blocks only while waiting for locking a connection, and will never throw an exception if creating a new connection takes an inordinately long time")
	private Long blockingTimeoutWaitMillis;
	@AttributeDocumentation("Class defining the policy for decrementing connections in the pool")
	private String capacityDecrementerClass;
	@AttributeDocumentation("Properties to inject in class defining the policy for decrementing connections in the pool")
	private Map capacityDecrementerProperties;
	@AttributeDocumentation("Class defining the policy for incrementing connections in the pool")
	private String capacityIncrementerClass;
	@AttributeDocumentation("Properties to inject in class defining the policy for incrementing connections in the pool")
	private Map capacityIncrementerProperties;
	@AttributeDocumentation("Specify an SQL statement to check validity of a pool connection. This may be called when managed connection is obtained from the pool")
	private String checkValidConnectionSql;
	@AttributeDocumentation("Enable the use of CMR for this datasource. This feature means that a local resource can reliably participate in an XA transaction.")
	private Boolean connectable;
	@AttributeDocumentation("Speciefies class name extending org.jboss.jca.adapters.jdbc.spi.listener.ConnectionListener that provides a possible to listen for connection activation and passivation in order to perform actions before the connection is returned to the application or returned to the pool.")
	private String connectionListenerClass;
	@AttributeDocumentation("Properties to be injected in class specified in connection-listener-class")
	private Map connectionListenerProperty;
	@AttributeDocumentation("Credential (from Credential Store) to authenticate on data source")
	private Map credentialReference;
	@AttributeDocumentation("Defines the JDBC driver the datasource should use. It is a symbolic name matching the the name of installed driver. In case the driver is deployed as jar, the name is the name of deployment unit")
	private String driverName;
	@AttributeDocumentation("Enables Elytron security for handling authentication of connections for recovery. The Elytron authentication-context to be used will be current context if no context is specified (see authentication-context).")
	private Boolean elytronEnabled;
	@AttributeDocumentation("Specifies if the datasource should be enabled. Note this attribute will not be supported runtime in next versions.")
	private Boolean enabled;
	@AttributeDocumentation("Defines if WildFly/IronJacamar should record enlistment traces")
	private Boolean enlistmentTrace;
	@AttributeDocumentation("An org.jboss.jca.adapters.jdbc.ExceptionSorter that provides an isExceptionFatal(SQLException) method to validate if an exception should broadcast an error")
	private String exceptionSorterClassName;
	@AttributeDocumentation("The exception sorter properties")
	private Map exceptionSorterProperties;
	@AttributeDocumentation("Specifies how the pool should be flush in case of an error.")
	private FlushStrategy flushStrategy;
	@AttributeDocumentation("The idle-timeout-minutes elements specifies the maximum time, in minutes, a connection may be idle before being closed. The actual maximum time depends also on the IdleRemover scan time, which is half of the smallest idle-timeout-minutes value of any pool. Changing this value can be done only on disabled datasource, requires a server restart otherwise.")
	private Long idleTimeoutMinutes;
	@AttributeDocumentation("The initial-pool-size element indicates the initial number of connections a pool should hold.")
	private Integer initialPoolSize;
	@AttributeDocumentation("An element to enable interleaving for XA connections")
	private Boolean interleaving;
	@AttributeDocumentation("Specifies the JNDI name for the datasource")
	private String jndiName;
	@AttributeDocumentation("The max-pool-size element specifies the maximum number of connections for a pool. No more connections will be created in each sub-pool")
	private Integer maxPoolSize;
	@AttributeDocumentation("Defines the ManagedConnectionPool implementation, f.ex. org.jboss.jca.core.connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool")
	private String mcp;
	@AttributeDocumentation("The min-pool-size element specifies the minimum number of connections for a pool")
	private Integer minPoolSize;
	@AttributeDocumentation("Specifies an SQL statement to execute whenever a connection is added to the connection pool")
	private String newConnectionSql;
	@AttributeDocumentation("Specifies if the connection pool should be excluded from recovery")
	private Boolean noRecovery;
	@AttributeDocumentation("Oracle does not like XA connections getting used both inside and outside a JTA transaction. To workaround the problem you can create separate sub-pools for the different contexts")
	private Boolean noTxSeparatePool;
	@AttributeDocumentation("Should the Xid be padded")
	private Boolean padXid;
	@AttributeDocumentation("Specifies the password used when creating a new connection")
	private String password;
	@AttributeDocumentation("Defines if pool use should be fair")
	private Boolean poolFair;
	@AttributeDocumentation("Should the pool be prefilled. Changing this value can be done only on disabled datasource, requires a server restart otherwise.")
	private Boolean poolPrefill;
	@AttributeDocumentation("Specifies if the min-pool-size should be considered strictly")
	private Boolean poolUseStrictMin;
	@AttributeDocumentation("The number of prepared statements per connection in an LRU cache")
	private Long preparedStatementsCacheSize;
	@AttributeDocumentation("Any configured query timeout in seconds. If not provided no timeout will be set")
	private Long queryTimeout;
	@AttributeDocumentation("The fully qualified class name of the reauthentication plugin implementation")
	private String reauthPluginClassName;
	@AttributeDocumentation("The properties for the reauthentication plugin")
	private Map reauthPluginProperties;
	@AttributeDocumentation("The Elytron authentication context which defines the javax.security.auth.Subject that is used to distinguish connections in the pool.")
	private String recoveryAuthenticationContext;
	@AttributeDocumentation("Credential (from Credential Store) to authenticate on data source")
	private Map recoveryCredentialReference;
	@AttributeDocumentation("Enables Elytron security for handling authentication of connections for recovery. The Elytron authentication-context to be used will be current context if no context is specified (see authentication-context).")
	private Boolean recoveryElytronEnabled;
	@AttributeDocumentation("The password used for recovery")
	private String recoveryPassword;
	@AttributeDocumentation("The fully qualified class name of the recovery plugin implementation")
	private String recoveryPluginClassName;
	@AttributeDocumentation("The properties for the recovery plugin")
	private Map recoveryPluginProperties;
	@AttributeDocumentation("The security domain used for recovery")
	private String recoverySecurityDomain;
	@AttributeDocumentation("The user name used for recovery")
	private String recoveryUsername;
	@AttributeDocumentation("The is-same-rm-override element allows one to unconditionally set whether the javax.transaction.xa.XAResource.isSameRM(XAResource) returns true or false")
	private Boolean sameRmOverride;
	@AttributeDocumentation("Specifies the PicketBox security domain which defines the javax.security.auth.Subject that are used to distinguish connections in the pool")
	private String securityDomain;
	@AttributeDocumentation("Whether to set the query timeout based on the time remaining until transaction timeout. Any configured query timeout will be used if there is no transaction")
	private Boolean setTxQueryTimeout;
	@AttributeDocumentation("Whether to share prepared statements, i.e. whether asking for same statement twice without closing uses the same underlying prepared statement")
	private Boolean sharePreparedStatements;
	@AttributeDocumentation("Enable spying of SQL statements")
	private Boolean spy;
	@AttributeDocumentation("An org.jboss.jca.adapters.jdbc.StaleConnectionChecker that provides an isStaleConnection(SQLException) method which if it returns true will wrap the exception in an org.jboss.jca.adapters.jdbc.StaleConnectionException")
	private String staleConnectionCheckerClassName;
	@AttributeDocumentation("The stale connection checker properties")
	private Map staleConnectionCheckerProperties;
	@AttributeDocumentation("Define whether runtime statistics are enabled or not.")
	private Boolean statisticsEnabled;
	@AttributeDocumentation("Whether to check for unclosed statements when a connection is returned to the pool, result sets are closed, a statement is closed or return to the prepared statement cache. Valid values are: \"false\" - do not track statements, \"true\" - track statements and result sets and warn when they are not closed, \"nowarn\" - track statements but do not warn about them being unclosed")
	private String trackStatements;
	@AttributeDocumentation("Defines if IronJacamar should track connection handles across transaction boundaries")
	private Boolean tracking;
	@AttributeDocumentation("Set the java.sql.Connection transaction isolation level. Valid values are: TRANSACTION_READ_UNCOMMITTED, TRANSACTION_READ_COMMITTED, TRANSACTION_REPEATABLE_READ, TRANSACTION_SERIALIZABLE and TRANSACTION_NONE. Different values are used to set customLevel using TransactionIsolation#customLevel.")
	private String transactionIsolation;
	@AttributeDocumentation("Specifies the delimiter for URLs in connection-url for HA datasources")
	private String urlDelimiter;
	@AttributeDocumentation("Specifies the property for the URL property in the xa-datasource-property values")
	private String urlProperty;
	@AttributeDocumentation("A class that implements org.jboss.jca.adapters.jdbc.URLSelectorStrategy")
	private String urlSelectorStrategyClassName;
	@AttributeDocumentation("Enable the use of a cached connection manager")
	private Boolean useCcm;
	@AttributeDocumentation("Whether to fail a connection allocation on the first try if it is invalid (true) or keep trying until the pool is exhausted of all potential connections (false)")
	private Boolean useFastFail;
	@AttributeDocumentation("Setting this to false will bind the datasource into global JNDI")
	private Boolean useJavaContext;
	@AttributeDocumentation("Any configured timeout for internal locks on the resource adapter objects in seconds")
	private Long useTryLock;
	@AttributeDocumentation("Specify the user name used when creating a new connection")
	private String userName;
	@AttributeDocumentation("An org.jboss.jca.adapters.jdbc.ValidConnectionChecker that provides an isValidConnection(Connection) method to validate a connection. If an exception is returned that means the connection is invalid. This overrides the check-valid-connection-sql element")
	private String validConnectionCheckerClassName;
	@AttributeDocumentation("The valid connection checker properties")
	private Map validConnectionCheckerProperties;
	@AttributeDocumentation("The validate-on-match element specifies if connection validation should be done when a connection factory attempts to match a managed connection. This is typically exclusive to the use of background validation")
	private Boolean validateOnMatch;
	@AttributeDocumentation("Should the XAResource instances be wrapped in an org.jboss.tm.XAResourceWrapper instance")
	private Boolean wrapXaResource;
	@AttributeDocumentation("The fully qualified name of the javax.sql.XADataSource implementation")
	private String xaDatasourceClass;
	@AttributeDocumentation("The value is passed to XAResource.setTransactionTimeout(), in seconds. Default is zero")
	private Integer xaResourceTimeout;

	public XADataSource(java.lang.String key) {
		super();
		this.key = key;
	}

	public String getKey() {
		return this.key;
	}

	/**
	 * Adds a property change listener
	 */
	public void addPropertyChangeListener(PropertyChangeListener listener) {
		if (null == this.pcs)
			this.pcs = new PropertyChangeSupport(this);
		this.pcs.addPropertyChangeListener(listener);
	}

	/**
	 * Removes a property change listener
	 */
	public void removePropertyChangeListener(
			java.beans.PropertyChangeListener listener) {
		if (this.pcs != null)
			this.pcs.removePropertyChangeListener(listener);
	}

	public XADataSourceResources subresources() {
		return this.subresources;
	}

	/**
	 * Add all XADatasourceProperties objects to this subresource
	 * 
	 * @return this
	 * @param value
	 *            List of XADatasourceProperties objects.
	 */
	@SuppressWarnings("unchecked")
	public T xaDatasourceProperties(java.util.List value) {
		this.subresources.xaDatasourceProperties = value;
		return (T) this;
	}

	/**
	 * Add the XADatasourceProperties object to the list of subresources
	 * 
	 * @param value
	 *            The XADatasourceProperties to add
	 * @return this
	 */
	@SuppressWarnings("unchecked")
	public T xaDatasourceProperties(XADatasourceProperties value) {
		this.subresources.xaDatasourceProperties.add(value);
		return (T) this;
	}

	/**
	 * Create and configure a XADatasourceProperties object to the list of
	 * subresources
	 * 
	 * @param key
	 *            The key for the XADatasourceProperties resource
	 * @param config
	 *            The XADatasourcePropertiesConsumer to use
	 * @return this
	 */
	@SuppressWarnings("unchecked")
	public T xaDatasourceProperties(java.lang.String childKey,
			XADatasourcePropertiesConsumer consumer) {
		XADatasourceProperties child = new XADatasourceProperties<>(
				childKey);
		if (consumer != null) {
			consumer.accept(child);
		}
		xaDatasourceProperties(child);
		return (T) this;
	}

	/**
	 * Create and configure a XADatasourceProperties object to the list of
	 * subresources
	 * 
	 * @param key
	 *            The key for the XADatasourceProperties resource
	 * @return this
	 */
	@SuppressWarnings("unchecked")
	public T xaDatasourceProperties(java.lang.String childKey) {
		xaDatasourceProperties(childKey, null);
		return (T) this;
	}

	/**
	 * Install a supplied XADatasourceProperties object to the list of
	 * subresources
	 */
	@SuppressWarnings("unchecked")
	public T xaDatasourceProperties(XADatasourcePropertiesSupplier supplier) {
		xaDatasourceProperties(supplier.get());
		return (T) this;
	}

	/**
	 * Child mutators for XADataSource
	 */
	public static class XADataSourceResources {
		/**
		 * List of xa-datasource-property
		 */
		@ResourceDocumentation("List of xa-datasource-property")
		@SubresourceInfo("xaDatasourceProperties")
		private List xaDatasourceProperties = new java.util.ArrayList<>();

		/**
		 * Get the list of XADatasourceProperties resources
		 * 
		 * @return the list of resources
		 */
		@Subresource
		public List xaDatasourceProperties() {
			return this.xaDatasourceProperties;
		}

		public XADatasourceProperties xaDatasourceProperties(
				java.lang.String key) {
			return this.xaDatasourceProperties.stream()
					.filter(e -> e.getKey().equals(key)).findFirst()
					.orElse(null);
		}
	}

	/**
	 * The allocation retry element indicates the number of times that
	 * allocating a connection should be tried before throwing an exception
	 */
	@ModelNodeBinding(detypedName = "allocation-retry")
	public Integer allocationRetry() {
		return this.allocationRetry;
	}

	/**
	 * The allocation retry element indicates the number of times that
	 * allocating a connection should be tried before throwing an exception
	 */
	@SuppressWarnings("unchecked")
	public T allocationRetry(java.lang.Integer value) {
		Object oldValue = this.allocationRetry;
		this.allocationRetry = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("allocationRetry", oldValue, value);
		return (T) this;
	}

	/**
	 * The allocation retry wait millis element specifies the amount of time, in
	 * milliseconds, to wait between retrying to allocate a connection
	 */
	@ModelNodeBinding(detypedName = "allocation-retry-wait-millis")
	public Long allocationRetryWaitMillis() {
		return this.allocationRetryWaitMillis;
	}

	/**
	 * The allocation retry wait millis element specifies the amount of time, in
	 * milliseconds, to wait between retrying to allocate a connection
	 */
	@SuppressWarnings("unchecked")
	public T allocationRetryWaitMillis(java.lang.Long value) {
		Object oldValue = this.allocationRetryWaitMillis;
		this.allocationRetryWaitMillis = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("allocationRetryWaitMillis", oldValue,
					value);
		return (T) this;
	}

	/**
	 * Specifies if multiple users will access the datasource through the
	 * getConnection(user, password) method and hence if the internal pool type
	 * should account for that
	 */
	@ModelNodeBinding(detypedName = "allow-multiple-users")
	public Boolean allowMultipleUsers() {
		return this.allowMultipleUsers;
	}

	/**
	 * Specifies if multiple users will access the datasource through the
	 * getConnection(user, password) method and hence if the internal pool type
	 * should account for that
	 */
	@SuppressWarnings("unchecked")
	public T allowMultipleUsers(java.lang.Boolean value) {
		Object oldValue = this.allowMultipleUsers;
		this.allowMultipleUsers = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("allowMultipleUsers", oldValue, value);
		return (T) this;
	}

	/**
	 * The Elytron authentication context which defines the
	 * javax.security.auth.Subject that is used to distinguish connections in
	 * the pool.
	 */
	@ModelNodeBinding(detypedName = "authentication-context")
	public String authenticationContext() {
		return this.authenticationContext;
	}

	/**
	 * The Elytron authentication context which defines the
	 * javax.security.auth.Subject that is used to distinguish connections in
	 * the pool.
	 */
	@SuppressWarnings("unchecked")
	public T authenticationContext(java.lang.String value) {
		Object oldValue = this.authenticationContext;
		this.authenticationContext = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("authenticationContext", oldValue,
					value);
		return (T) this;
	}

	/**
	 * An element to specify that connections should be validated on a
	 * background thread versus being validated prior to use.
	 */
	@ModelNodeBinding(detypedName = "background-validation")
	public Boolean backgroundValidation() {
		return this.backgroundValidation;
	}

	/**
	 * An element to specify that connections should be validated on a
	 * background thread versus being validated prior to use.
	 */
	@SuppressWarnings("unchecked")
	public T backgroundValidation(java.lang.Boolean value) {
		Object oldValue = this.backgroundValidation;
		this.backgroundValidation = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("backgroundValidation", oldValue, value);
		return (T) this;
	}

	/**
	 * The background-validation-millis element specifies the amount of time, in
	 * milliseconds, that background validation will run.
	 */
	@ModelNodeBinding(detypedName = "background-validation-millis")
	public Long backgroundValidationMillis() {
		return this.backgroundValidationMillis;
	}

	/**
	 * The background-validation-millis element specifies the amount of time, in
	 * milliseconds, that background validation will run.
	 */
	@SuppressWarnings("unchecked")
	public T backgroundValidationMillis(java.lang.Long value) {
		Object oldValue = this.backgroundValidationMillis;
		this.backgroundValidationMillis = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("backgroundValidationMillis", oldValue,
					value);
		return (T) this;
	}

	/**
	 * The blocking-timeout-millis element specifies the maximum time, in
	 * milliseconds, to block while waiting for a connection before throwing an
	 * exception. Note that this blocks only while waiting for locking a
	 * connection, and will never throw an exception if creating a new
	 * connection takes an inordinately long time
	 */
	@ModelNodeBinding(detypedName = "blocking-timeout-wait-millis")
	public Long blockingTimeoutWaitMillis() {
		return this.blockingTimeoutWaitMillis;
	}

	/**
	 * The blocking-timeout-millis element specifies the maximum time, in
	 * milliseconds, to block while waiting for a connection before throwing an
	 * exception. Note that this blocks only while waiting for locking a
	 * connection, and will never throw an exception if creating a new
	 * connection takes an inordinately long time
	 */
	@SuppressWarnings("unchecked")
	public T blockingTimeoutWaitMillis(java.lang.Long value) {
		Object oldValue = this.blockingTimeoutWaitMillis;
		this.blockingTimeoutWaitMillis = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("blockingTimeoutWaitMillis", oldValue,
					value);
		return (T) this;
	}

	/**
	 * Class defining the policy for decrementing connections in the pool
	 */
	@ModelNodeBinding(detypedName = "capacity-decrementer-class")
	public String capacityDecrementerClass() {
		return this.capacityDecrementerClass;
	}

	/**
	 * Class defining the policy for decrementing connections in the pool
	 */
	@SuppressWarnings("unchecked")
	public T capacityDecrementerClass(java.lang.String value) {
		Object oldValue = this.capacityDecrementerClass;
		this.capacityDecrementerClass = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("capacityDecrementerClass", oldValue,
					value);
		return (T) this;
	}

	/**
	 * Properties to inject in class defining the policy for decrementing
	 * connections in the pool
	 */
	@ModelNodeBinding(detypedName = "capacity-decrementer-properties")
	public Map capacityDecrementerProperties() {
		return this.capacityDecrementerProperties;
	}

	/**
	 * Properties to inject in class defining the policy for decrementing
	 * connections in the pool
	 */
	@SuppressWarnings("unchecked")
	public T capacityDecrementerProperties(java.util.Map value) {
		Object oldValue = this.capacityDecrementerProperties;
		this.capacityDecrementerProperties = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("capacityDecrementerProperties",
					oldValue, value);
		return (T) this;
	}

	/**
	 * Properties to inject in class defining the policy for decrementing
	 * connections in the pool
	 */
	@SuppressWarnings("unchecked")
	public T capacityDecrementerProperty(java.lang.String key,
			java.lang.Object value) {
		if (this.capacityDecrementerProperties == null) {
			this.capacityDecrementerProperties = new java.util.HashMap<>();
		}
		this.capacityDecrementerProperties.put(key, value);
		return (T) this;
	}

	/**
	 * Class defining the policy for incrementing connections in the pool
	 */
	@ModelNodeBinding(detypedName = "capacity-incrementer-class")
	public String capacityIncrementerClass() {
		return this.capacityIncrementerClass;
	}

	/**
	 * Class defining the policy for incrementing connections in the pool
	 */
	@SuppressWarnings("unchecked")
	public T capacityIncrementerClass(java.lang.String value) {
		Object oldValue = this.capacityIncrementerClass;
		this.capacityIncrementerClass = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("capacityIncrementerClass", oldValue,
					value);
		return (T) this;
	}

	/**
	 * Properties to inject in class defining the policy for incrementing
	 * connections in the pool
	 */
	@ModelNodeBinding(detypedName = "capacity-incrementer-properties")
	public Map capacityIncrementerProperties() {
		return this.capacityIncrementerProperties;
	}

	/**
	 * Properties to inject in class defining the policy for incrementing
	 * connections in the pool
	 */
	@SuppressWarnings("unchecked")
	public T capacityIncrementerProperties(java.util.Map value) {
		Object oldValue = this.capacityIncrementerProperties;
		this.capacityIncrementerProperties = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("capacityIncrementerProperties",
					oldValue, value);
		return (T) this;
	}

	/**
	 * Properties to inject in class defining the policy for incrementing
	 * connections in the pool
	 */
	@SuppressWarnings("unchecked")
	public T capacityIncrementerProperty(java.lang.String key,
			java.lang.Object value) {
		if (this.capacityIncrementerProperties == null) {
			this.capacityIncrementerProperties = new java.util.HashMap<>();
		}
		this.capacityIncrementerProperties.put(key, value);
		return (T) this;
	}

	/**
	 * Specify an SQL statement to check validity of a pool connection. This may
	 * be called when managed connection is obtained from the pool
	 */
	@ModelNodeBinding(detypedName = "check-valid-connection-sql")
	public String checkValidConnectionSql() {
		return this.checkValidConnectionSql;
	}

	/**
	 * Specify an SQL statement to check validity of a pool connection. This may
	 * be called when managed connection is obtained from the pool
	 */
	@SuppressWarnings("unchecked")
	public T checkValidConnectionSql(java.lang.String value) {
		Object oldValue = this.checkValidConnectionSql;
		this.checkValidConnectionSql = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("checkValidConnectionSql", oldValue,
					value);
		return (T) this;
	}

	/**
	 * Enable the use of CMR for this datasource. This feature means that a
	 * local resource can reliably participate in an XA transaction.
	 */
	@ModelNodeBinding(detypedName = "connectable")
	public Boolean connectable() {
		return this.connectable;
	}

	/**
	 * Enable the use of CMR for this datasource. This feature means that a
	 * local resource can reliably participate in an XA transaction.
	 */
	@SuppressWarnings("unchecked")
	public T connectable(java.lang.Boolean value) {
		Object oldValue = this.connectable;
		this.connectable = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("connectable", oldValue, value);
		return (T) this;
	}

	/**
	 * Speciefies class name extending
	 * org.jboss.jca.adapters.jdbc.spi.listener.ConnectionListener that provides
	 * a possible to listen for connection activation and passivation in order
	 * to perform actions before the connection is returned to the application
	 * or returned to the pool.
	 */
	@ModelNodeBinding(detypedName = "connection-listener-class")
	public String connectionListenerClass() {
		return this.connectionListenerClass;
	}

	/**
	 * Speciefies class name extending
	 * org.jboss.jca.adapters.jdbc.spi.listener.ConnectionListener that provides
	 * a possible to listen for connection activation and passivation in order
	 * to perform actions before the connection is returned to the application
	 * or returned to the pool.
	 */
	@SuppressWarnings("unchecked")
	public T connectionListenerClass(java.lang.String value) {
		Object oldValue = this.connectionListenerClass;
		this.connectionListenerClass = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("connectionListenerClass", oldValue,
					value);
		return (T) this;
	}

	/**
	 * Properties to be injected in class specified in connection-listener-class
	 */
	@ModelNodeBinding(detypedName = "connection-listener-property")
	public Map connectionListenerProperty() {
		return this.connectionListenerProperty;
	}

	/**
	 * Properties to be injected in class specified in connection-listener-class
	 */
	@SuppressWarnings("unchecked")
	public T connectionListenerProperty(java.util.Map value) {
		Object oldValue = this.connectionListenerProperty;
		this.connectionListenerProperty = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("connectionListenerProperty", oldValue,
					value);
		return (T) this;
	}

	/**
	 * Properties to be injected in class specified in connection-listener-class
	 */
	@SuppressWarnings("unchecked")
	public T connectionListenerProperty(java.lang.String key,
			java.lang.Object value) {
		if (this.connectionListenerProperty == null) {
			this.connectionListenerProperty = new java.util.HashMap<>();
		}
		this.connectionListenerProperty.put(key, value);
		return (T) this;
	}

	/**
	 * Credential (from Credential Store) to authenticate on data source
	 */
	@ModelNodeBinding(detypedName = "credential-reference")
	public Map credentialReference() {
		return this.credentialReference;
	}

	/**
	 * Credential (from Credential Store) to authenticate on data source
	 */
	@SuppressWarnings("unchecked")
	public T credentialReference(java.util.Map value) {
		Object oldValue = this.credentialReference;
		this.credentialReference = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("credentialReference", oldValue, value);
		return (T) this;
	}

	/**
	 * Credential (from Credential Store) to authenticate on data source
	 */
	@SuppressWarnings("unchecked")
	public T credentialReference(java.lang.String key, java.lang.Object value) {
		if (this.credentialReference == null) {
			this.credentialReference = new java.util.HashMap<>();
		}
		this.credentialReference.put(key, value);
		return (T) this;
	}

	/**
	 * Defines the JDBC driver the datasource should use. It is a symbolic name
	 * matching the the name of installed driver. In case the driver is deployed
	 * as jar, the name is the name of deployment unit
	 */
	@ModelNodeBinding(detypedName = "driver-name")
	public String driverName() {
		return this.driverName;
	}

	/**
	 * Defines the JDBC driver the datasource should use. It is a symbolic name
	 * matching the the name of installed driver. In case the driver is deployed
	 * as jar, the name is the name of deployment unit
	 */
	@SuppressWarnings("unchecked")
	public T driverName(java.lang.String value) {
		Object oldValue = this.driverName;
		this.driverName = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("driverName", oldValue, value);
		return (T) this;
	}

	/**
	 * Enables Elytron security for handling authentication of connections for
	 * recovery. The Elytron authentication-context to be used will be current
	 * context if no context is specified (see authentication-context).
	 */
	@ModelNodeBinding(detypedName = "elytron-enabled")
	public Boolean elytronEnabled() {
		return this.elytronEnabled;
	}

	/**
	 * Enables Elytron security for handling authentication of connections for
	 * recovery. The Elytron authentication-context to be used will be current
	 * context if no context is specified (see authentication-context).
	 */
	@SuppressWarnings("unchecked")
	public T elytronEnabled(java.lang.Boolean value) {
		Object oldValue = this.elytronEnabled;
		this.elytronEnabled = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("elytronEnabled", oldValue, value);
		return (T) this;
	}

	/**
	 * Specifies if the datasource should be enabled. Note this attribute will
	 * not be supported runtime in next versions.
	 * 
	 * @deprecated Specifies if the datasource should be enabled. Note this
	 *             attribute will not be supported runtime in next versions.
	 */
	@Deprecated
	@ModelNodeBinding(detypedName = "enabled")
	public Boolean enabled() {
		return this.enabled;
	}

	/**
	 * Specifies if the datasource should be enabled. Note this attribute will
	 * not be supported runtime in next versions.
	 * 
	 * @deprecated Specifies if the datasource should be enabled. Note this
	 *             attribute will not be supported runtime in next versions.
	 */
	@SuppressWarnings("unchecked")
	@Deprecated
	public T enabled(java.lang.Boolean value) {
		Object oldValue = this.enabled;
		this.enabled = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("enabled", oldValue, value);
		return (T) this;
	}

	/**
	 * Defines if WildFly/IronJacamar should record enlistment traces
	 */
	@ModelNodeBinding(detypedName = "enlistment-trace")
	public Boolean enlistmentTrace() {
		return this.enlistmentTrace;
	}

	/**
	 * Defines if WildFly/IronJacamar should record enlistment traces
	 */
	@SuppressWarnings("unchecked")
	public T enlistmentTrace(java.lang.Boolean value) {
		Object oldValue = this.enlistmentTrace;
		this.enlistmentTrace = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("enlistmentTrace", oldValue, value);
		return (T) this;
	}

	/**
	 * An org.jboss.jca.adapters.jdbc.ExceptionSorter that provides an
	 * isExceptionFatal(SQLException) method to validate if an exception should
	 * broadcast an error
	 */
	@ModelNodeBinding(detypedName = "exception-sorter-class-name")
	public String exceptionSorterClassName() {
		return this.exceptionSorterClassName;
	}

	/**
	 * An org.jboss.jca.adapters.jdbc.ExceptionSorter that provides an
	 * isExceptionFatal(SQLException) method to validate if an exception should
	 * broadcast an error
	 */
	@SuppressWarnings("unchecked")
	public T exceptionSorterClassName(java.lang.String value) {
		Object oldValue = this.exceptionSorterClassName;
		this.exceptionSorterClassName = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("exceptionSorterClassName", oldValue,
					value);
		return (T) this;
	}

	/**
	 * The exception sorter properties
	 */
	@ModelNodeBinding(detypedName = "exception-sorter-properties")
	public Map exceptionSorterProperties() {
		return this.exceptionSorterProperties;
	}

	/**
	 * The exception sorter properties
	 */
	@SuppressWarnings("unchecked")
	public T exceptionSorterProperties(java.util.Map value) {
		Object oldValue = this.exceptionSorterProperties;
		this.exceptionSorterProperties = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("exceptionSorterProperties", oldValue,
					value);
		return (T) this;
	}

	/**
	 * The exception sorter properties
	 */
	@SuppressWarnings("unchecked")
	public T exceptionSorterProperty(java.lang.String key,
			java.lang.Object value) {
		if (this.exceptionSorterProperties == null) {
			this.exceptionSorterProperties = new java.util.HashMap<>();
		}
		this.exceptionSorterProperties.put(key, value);
		return (T) this;
	}

	/**
	 * Specifies how the pool should be flush in case of an error.
	 */
	@ModelNodeBinding(detypedName = "flush-strategy")
	public FlushStrategy flushStrategy() {
		return this.flushStrategy;
	}

	/**
	 * Specifies how the pool should be flush in case of an error.
	 */
	@SuppressWarnings("unchecked")
	public T flushStrategy(FlushStrategy value) {
		Object oldValue = this.flushStrategy;
		this.flushStrategy = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("flushStrategy", oldValue, value);
		return (T) this;
	}

	/**
	 * The idle-timeout-minutes elements specifies the maximum time, in minutes,
	 * a connection may be idle before being closed. The actual maximum time
	 * depends also on the IdleRemover scan time, which is half of the smallest
	 * idle-timeout-minutes value of any pool. Changing this value can be done
	 * only on disabled datasource, requires a server restart otherwise.
	 */
	@ModelNodeBinding(detypedName = "idle-timeout-minutes")
	public Long idleTimeoutMinutes() {
		return this.idleTimeoutMinutes;
	}

	/**
	 * The idle-timeout-minutes elements specifies the maximum time, in minutes,
	 * a connection may be idle before being closed. The actual maximum time
	 * depends also on the IdleRemover scan time, which is half of the smallest
	 * idle-timeout-minutes value of any pool. Changing this value can be done
	 * only on disabled datasource, requires a server restart otherwise.
	 */
	@SuppressWarnings("unchecked")
	public T idleTimeoutMinutes(java.lang.Long value) {
		Object oldValue = this.idleTimeoutMinutes;
		this.idleTimeoutMinutes = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("idleTimeoutMinutes", oldValue, value);
		return (T) this;
	}

	/**
	 * The initial-pool-size element indicates the initial number of connections
	 * a pool should hold.
	 */
	@ModelNodeBinding(detypedName = "initial-pool-size")
	public Integer initialPoolSize() {
		return this.initialPoolSize;
	}

	/**
	 * The initial-pool-size element indicates the initial number of connections
	 * a pool should hold.
	 */
	@SuppressWarnings("unchecked")
	public T initialPoolSize(java.lang.Integer value) {
		Object oldValue = this.initialPoolSize;
		this.initialPoolSize = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("initialPoolSize", oldValue, value);
		return (T) this;
	}

	/**
	 * An element to enable interleaving for XA connections
	 */
	@ModelNodeBinding(detypedName = "interleaving")
	public Boolean interleaving() {
		return this.interleaving;
	}

	/**
	 * An element to enable interleaving for XA connections
	 */
	@SuppressWarnings("unchecked")
	public T interleaving(java.lang.Boolean value) {
		Object oldValue = this.interleaving;
		this.interleaving = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("interleaving", oldValue, value);
		return (T) this;
	}

	/**
	 * Specifies the JNDI name for the datasource
	 */
	@ModelNodeBinding(detypedName = "jndi-name")
	public String jndiName() {
		return this.jndiName;
	}

	/**
	 * Specifies the JNDI name for the datasource
	 */
	@SuppressWarnings("unchecked")
	public T jndiName(java.lang.String value) {
		Object oldValue = this.jndiName;
		this.jndiName = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("jndiName", oldValue, value);
		return (T) this;
	}

	/**
	 * The max-pool-size element specifies the maximum number of connections for
	 * a pool. No more connections will be created in each sub-pool
	 */
	@ModelNodeBinding(detypedName = "max-pool-size")
	public Integer maxPoolSize() {
		return this.maxPoolSize;
	}

	/**
	 * The max-pool-size element specifies the maximum number of connections for
	 * a pool. No more connections will be created in each sub-pool
	 */
	@SuppressWarnings("unchecked")
	public T maxPoolSize(java.lang.Integer value) {
		Object oldValue = this.maxPoolSize;
		this.maxPoolSize = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("maxPoolSize", oldValue, value);
		return (T) this;
	}

	/**
	 * Defines the ManagedConnectionPool implementation, f.ex.
	 * org.jboss.jca.core
	 * .connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool
	 */
	@ModelNodeBinding(detypedName = "mcp")
	public String mcp() {
		return this.mcp;
	}

	/**
	 * Defines the ManagedConnectionPool implementation, f.ex.
	 * org.jboss.jca.core
	 * .connectionmanager.pool.mcp.SemaphoreArrayListManagedConnectionPool
	 */
	@SuppressWarnings("unchecked")
	public T mcp(java.lang.String value) {
		Object oldValue = this.mcp;
		this.mcp = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("mcp", oldValue, value);
		return (T) this;
	}

	/**
	 * The min-pool-size element specifies the minimum number of connections for
	 * a pool
	 */
	@ModelNodeBinding(detypedName = "min-pool-size")
	public Integer minPoolSize() {
		return this.minPoolSize;
	}

	/**
	 * The min-pool-size element specifies the minimum number of connections for
	 * a pool
	 */
	@SuppressWarnings("unchecked")
	public T minPoolSize(java.lang.Integer value) {
		Object oldValue = this.minPoolSize;
		this.minPoolSize = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("minPoolSize", oldValue, value);
		return (T) this;
	}

	/**
	 * Specifies an SQL statement to execute whenever a connection is added to
	 * the connection pool
	 */
	@ModelNodeBinding(detypedName = "new-connection-sql")
	public String newConnectionSql() {
		return this.newConnectionSql;
	}

	/**
	 * Specifies an SQL statement to execute whenever a connection is added to
	 * the connection pool
	 */
	@SuppressWarnings("unchecked")
	public T newConnectionSql(java.lang.String value) {
		Object oldValue = this.newConnectionSql;
		this.newConnectionSql = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("newConnectionSql", oldValue, value);
		return (T) this;
	}

	/**
	 * Specifies if the connection pool should be excluded from recovery
	 */
	@ModelNodeBinding(detypedName = "no-recovery")
	public Boolean noRecovery() {
		return this.noRecovery;
	}

	/**
	 * Specifies if the connection pool should be excluded from recovery
	 */
	@SuppressWarnings("unchecked")
	public T noRecovery(java.lang.Boolean value) {
		Object oldValue = this.noRecovery;
		this.noRecovery = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("noRecovery", oldValue, value);
		return (T) this;
	}

	/**
	 * Oracle does not like XA connections getting used both inside and outside
	 * a JTA transaction. To workaround the problem you can create separate
	 * sub-pools for the different contexts
	 */
	@ModelNodeBinding(detypedName = "no-tx-separate-pool")
	public Boolean noTxSeparatePool() {
		return this.noTxSeparatePool;
	}

	/**
	 * Oracle does not like XA connections getting used both inside and outside
	 * a JTA transaction. To workaround the problem you can create separate
	 * sub-pools for the different contexts
	 */
	@SuppressWarnings("unchecked")
	public T noTxSeparatePool(java.lang.Boolean value) {
		Object oldValue = this.noTxSeparatePool;
		this.noTxSeparatePool = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("noTxSeparatePool", oldValue, value);
		return (T) this;
	}

	/**
	 * Should the Xid be padded
	 */
	@ModelNodeBinding(detypedName = "pad-xid")
	public Boolean padXid() {
		return this.padXid;
	}

	/**
	 * Should the Xid be padded
	 */
	@SuppressWarnings("unchecked")
	public T padXid(java.lang.Boolean value) {
		Object oldValue = this.padXid;
		this.padXid = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("padXid", oldValue, value);
		return (T) this;
	}

	/**
	 * Specifies the password used when creating a new connection
	 */
	@ModelNodeBinding(detypedName = "password")
	public String password() {
		return this.password;
	}

	/**
	 * Specifies the password used when creating a new connection
	 */
	@SuppressWarnings("unchecked")
	public T password(java.lang.String value) {
		Object oldValue = this.password;
		this.password = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("password", oldValue, value);
		return (T) this;
	}

	/**
	 * Defines if pool use should be fair
	 */
	@ModelNodeBinding(detypedName = "pool-fair")
	public Boolean poolFair() {
		return this.poolFair;
	}

	/**
	 * Defines if pool use should be fair
	 */
	@SuppressWarnings("unchecked")
	public T poolFair(java.lang.Boolean value) {
		Object oldValue = this.poolFair;
		this.poolFair = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("poolFair", oldValue, value);
		return (T) this;
	}

	/**
	 * Should the pool be prefilled. Changing this value can be done only on
	 * disabled datasource, requires a server restart otherwise.
	 */
	@ModelNodeBinding(detypedName = "pool-prefill")
	public Boolean poolPrefill() {
		return this.poolPrefill;
	}

	/**
	 * Should the pool be prefilled. Changing this value can be done only on
	 * disabled datasource, requires a server restart otherwise.
	 */
	@SuppressWarnings("unchecked")
	public T poolPrefill(java.lang.Boolean value) {
		Object oldValue = this.poolPrefill;
		this.poolPrefill = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("poolPrefill", oldValue, value);
		return (T) this;
	}

	/**
	 * Specifies if the min-pool-size should be considered strictly
	 */
	@ModelNodeBinding(detypedName = "pool-use-strict-min")
	public Boolean poolUseStrictMin() {
		return this.poolUseStrictMin;
	}

	/**
	 * Specifies if the min-pool-size should be considered strictly
	 */
	@SuppressWarnings("unchecked")
	public T poolUseStrictMin(java.lang.Boolean value) {
		Object oldValue = this.poolUseStrictMin;
		this.poolUseStrictMin = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("poolUseStrictMin", oldValue, value);
		return (T) this;
	}

	/**
	 * The number of prepared statements per connection in an LRU cache
	 */
	@ModelNodeBinding(detypedName = "prepared-statements-cache-size")
	public Long preparedStatementsCacheSize() {
		return this.preparedStatementsCacheSize;
	}

	/**
	 * The number of prepared statements per connection in an LRU cache
	 */
	@SuppressWarnings("unchecked")
	public T preparedStatementsCacheSize(java.lang.Long value) {
		Object oldValue = this.preparedStatementsCacheSize;
		this.preparedStatementsCacheSize = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("preparedStatementsCacheSize",
					oldValue, value);
		return (T) this;
	}

	/**
	 * Any configured query timeout in seconds. If not provided no timeout will
	 * be set
	 */
	@ModelNodeBinding(detypedName = "query-timeout")
	public Long queryTimeout() {
		return this.queryTimeout;
	}

	/**
	 * Any configured query timeout in seconds. If not provided no timeout will
	 * be set
	 */
	@SuppressWarnings("unchecked")
	public T queryTimeout(java.lang.Long value) {
		Object oldValue = this.queryTimeout;
		this.queryTimeout = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("queryTimeout", oldValue, value);
		return (T) this;
	}

	/**
	 * The fully qualified class name of the reauthentication plugin
	 * implementation
	 */
	@ModelNodeBinding(detypedName = "reauth-plugin-class-name")
	public String reauthPluginClassName() {
		return this.reauthPluginClassName;
	}

	/**
	 * The fully qualified class name of the reauthentication plugin
	 * implementation
	 */
	@SuppressWarnings("unchecked")
	public T reauthPluginClassName(java.lang.String value) {
		Object oldValue = this.reauthPluginClassName;
		this.reauthPluginClassName = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("reauthPluginClassName", oldValue,
					value);
		return (T) this;
	}

	/**
	 * The properties for the reauthentication plugin
	 */
	@ModelNodeBinding(detypedName = "reauth-plugin-properties")
	public Map reauthPluginProperties() {
		return this.reauthPluginProperties;
	}

	/**
	 * The properties for the reauthentication plugin
	 */
	@SuppressWarnings("unchecked")
	public T reauthPluginProperties(java.util.Map value) {
		Object oldValue = this.reauthPluginProperties;
		this.reauthPluginProperties = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("reauthPluginProperties", oldValue,
					value);
		return (T) this;
	}

	/**
	 * The properties for the reauthentication plugin
	 */
	@SuppressWarnings("unchecked")
	public T reauthPluginProperty(java.lang.String key, java.lang.Object value) {
		if (this.reauthPluginProperties == null) {
			this.reauthPluginProperties = new java.util.HashMap<>();
		}
		this.reauthPluginProperties.put(key, value);
		return (T) this;
	}

	/**
	 * The Elytron authentication context which defines the
	 * javax.security.auth.Subject that is used to distinguish connections in
	 * the pool.
	 */
	@ModelNodeBinding(detypedName = "recovery-authentication-context")
	public String recoveryAuthenticationContext() {
		return this.recoveryAuthenticationContext;
	}

	/**
	 * The Elytron authentication context which defines the
	 * javax.security.auth.Subject that is used to distinguish connections in
	 * the pool.
	 */
	@SuppressWarnings("unchecked")
	public T recoveryAuthenticationContext(java.lang.String value) {
		Object oldValue = this.recoveryAuthenticationContext;
		this.recoveryAuthenticationContext = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("recoveryAuthenticationContext",
					oldValue, value);
		return (T) this;
	}

	/**
	 * Credential (from Credential Store) to authenticate on data source
	 */
	@ModelNodeBinding(detypedName = "recovery-credential-reference")
	public Map recoveryCredentialReference() {
		return this.recoveryCredentialReference;
	}

	/**
	 * Credential (from Credential Store) to authenticate on data source
	 */
	@SuppressWarnings("unchecked")
	public T recoveryCredentialReference(java.util.Map value) {
		Object oldValue = this.recoveryCredentialReference;
		this.recoveryCredentialReference = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("recoveryCredentialReference",
					oldValue, value);
		return (T) this;
	}

	/**
	 * Credential (from Credential Store) to authenticate on data source
	 */
	@SuppressWarnings("unchecked")
	public T recoveryCredentialReference(java.lang.String key,
			java.lang.Object value) {
		if (this.recoveryCredentialReference == null) {
			this.recoveryCredentialReference = new java.util.HashMap<>();
		}
		this.recoveryCredentialReference.put(key, value);
		return (T) this;
	}

	/**
	 * Enables Elytron security for handling authentication of connections for
	 * recovery. The Elytron authentication-context to be used will be current
	 * context if no context is specified (see authentication-context).
	 */
	@ModelNodeBinding(detypedName = "recovery-elytron-enabled")
	public Boolean recoveryElytronEnabled() {
		return this.recoveryElytronEnabled;
	}

	/**
	 * Enables Elytron security for handling authentication of connections for
	 * recovery. The Elytron authentication-context to be used will be current
	 * context if no context is specified (see authentication-context).
	 */
	@SuppressWarnings("unchecked")
	public T recoveryElytronEnabled(java.lang.Boolean value) {
		Object oldValue = this.recoveryElytronEnabled;
		this.recoveryElytronEnabled = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("recoveryElytronEnabled", oldValue,
					value);
		return (T) this;
	}

	/**
	 * The password used for recovery
	 */
	@ModelNodeBinding(detypedName = "recovery-password")
	public String recoveryPassword() {
		return this.recoveryPassword;
	}

	/**
	 * The password used for recovery
	 */
	@SuppressWarnings("unchecked")
	public T recoveryPassword(java.lang.String value) {
		Object oldValue = this.recoveryPassword;
		this.recoveryPassword = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("recoveryPassword", oldValue, value);
		return (T) this;
	}

	/**
	 * The fully qualified class name of the recovery plugin implementation
	 */
	@ModelNodeBinding(detypedName = "recovery-plugin-class-name")
	public String recoveryPluginClassName() {
		return this.recoveryPluginClassName;
	}

	/**
	 * The fully qualified class name of the recovery plugin implementation
	 */
	@SuppressWarnings("unchecked")
	public T recoveryPluginClassName(java.lang.String value) {
		Object oldValue = this.recoveryPluginClassName;
		this.recoveryPluginClassName = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("recoveryPluginClassName", oldValue,
					value);
		return (T) this;
	}

	/**
	 * The properties for the recovery plugin
	 */
	@ModelNodeBinding(detypedName = "recovery-plugin-properties")
	public Map recoveryPluginProperties() {
		return this.recoveryPluginProperties;
	}

	/**
	 * The properties for the recovery plugin
	 */
	@SuppressWarnings("unchecked")
	public T recoveryPluginProperties(java.util.Map value) {
		Object oldValue = this.recoveryPluginProperties;
		this.recoveryPluginProperties = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("recoveryPluginProperties", oldValue,
					value);
		return (T) this;
	}

	/**
	 * The properties for the recovery plugin
	 */
	@SuppressWarnings("unchecked")
	public T recoveryPluginProperty(java.lang.String key, java.lang.Object value) {
		if (this.recoveryPluginProperties == null) {
			this.recoveryPluginProperties = new java.util.HashMap<>();
		}
		this.recoveryPluginProperties.put(key, value);
		return (T) this;
	}

	/**
	 * The security domain used for recovery
	 */
	@ModelNodeBinding(detypedName = "recovery-security-domain")
	public String recoverySecurityDomain() {
		return this.recoverySecurityDomain;
	}

	/**
	 * The security domain used for recovery
	 */
	@SuppressWarnings("unchecked")
	public T recoverySecurityDomain(java.lang.String value) {
		Object oldValue = this.recoverySecurityDomain;
		this.recoverySecurityDomain = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("recoverySecurityDomain", oldValue,
					value);
		return (T) this;
	}

	/**
	 * The user name used for recovery
	 */
	@ModelNodeBinding(detypedName = "recovery-username")
	public String recoveryUsername() {
		return this.recoveryUsername;
	}

	/**
	 * The user name used for recovery
	 */
	@SuppressWarnings("unchecked")
	public T recoveryUsername(java.lang.String value) {
		Object oldValue = this.recoveryUsername;
		this.recoveryUsername = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("recoveryUsername", oldValue, value);
		return (T) this;
	}

	/**
	 * The is-same-rm-override element allows one to unconditionally set whether
	 * the javax.transaction.xa.XAResource.isSameRM(XAResource) returns true or
	 * false
	 */
	@ModelNodeBinding(detypedName = "same-rm-override")
	public Boolean sameRmOverride() {
		return this.sameRmOverride;
	}

	/**
	 * The is-same-rm-override element allows one to unconditionally set whether
	 * the javax.transaction.xa.XAResource.isSameRM(XAResource) returns true or
	 * false
	 */
	@SuppressWarnings("unchecked")
	public T sameRmOverride(java.lang.Boolean value) {
		Object oldValue = this.sameRmOverride;
		this.sameRmOverride = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("sameRmOverride", oldValue, value);
		return (T) this;
	}

	/**
	 * Specifies the PicketBox security domain which defines the
	 * javax.security.auth.Subject that are used to distinguish connections in
	 * the pool
	 */
	@ModelNodeBinding(detypedName = "security-domain")
	public String securityDomain() {
		return this.securityDomain;
	}

	/**
	 * Specifies the PicketBox security domain which defines the
	 * javax.security.auth.Subject that are used to distinguish connections in
	 * the pool
	 */
	@SuppressWarnings("unchecked")
	public T securityDomain(java.lang.String value) {
		Object oldValue = this.securityDomain;
		this.securityDomain = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("securityDomain", oldValue, value);
		return (T) this;
	}

	/**
	 * Whether to set the query timeout based on the time remaining until
	 * transaction timeout. Any configured query timeout will be used if there
	 * is no transaction
	 */
	@ModelNodeBinding(detypedName = "set-tx-query-timeout")
	public Boolean setTxQueryTimeout() {
		return this.setTxQueryTimeout;
	}

	/**
	 * Whether to set the query timeout based on the time remaining until
	 * transaction timeout. Any configured query timeout will be used if there
	 * is no transaction
	 */
	@SuppressWarnings("unchecked")
	public T setTxQueryTimeout(java.lang.Boolean value) {
		Object oldValue = this.setTxQueryTimeout;
		this.setTxQueryTimeout = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("setTxQueryTimeout", oldValue, value);
		return (T) this;
	}

	/**
	 * Whether to share prepared statements, i.e. whether asking for same
	 * statement twice without closing uses the same underlying prepared
	 * statement
	 */
	@ModelNodeBinding(detypedName = "share-prepared-statements")
	public Boolean sharePreparedStatements() {
		return this.sharePreparedStatements;
	}

	/**
	 * Whether to share prepared statements, i.e. whether asking for same
	 * statement twice without closing uses the same underlying prepared
	 * statement
	 */
	@SuppressWarnings("unchecked")
	public T sharePreparedStatements(java.lang.Boolean value) {
		Object oldValue = this.sharePreparedStatements;
		this.sharePreparedStatements = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("sharePreparedStatements", oldValue,
					value);
		return (T) this;
	}

	/**
	 * Enable spying of SQL statements
	 */
	@ModelNodeBinding(detypedName = "spy")
	public Boolean spy() {
		return this.spy;
	}

	/**
	 * Enable spying of SQL statements
	 */
	@SuppressWarnings("unchecked")
	public T spy(java.lang.Boolean value) {
		Object oldValue = this.spy;
		this.spy = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("spy", oldValue, value);
		return (T) this;
	}

	/**
	 * An org.jboss.jca.adapters.jdbc.StaleConnectionChecker that provides an
	 * isStaleConnection(SQLException) method which if it returns true will wrap
	 * the exception in an org.jboss.jca.adapters.jdbc.StaleConnectionException
	 */
	@ModelNodeBinding(detypedName = "stale-connection-checker-class-name")
	public String staleConnectionCheckerClassName() {
		return this.staleConnectionCheckerClassName;
	}

	/**
	 * An org.jboss.jca.adapters.jdbc.StaleConnectionChecker that provides an
	 * isStaleConnection(SQLException) method which if it returns true will wrap
	 * the exception in an org.jboss.jca.adapters.jdbc.StaleConnectionException
	 */
	@SuppressWarnings("unchecked")
	public T staleConnectionCheckerClassName(java.lang.String value) {
		Object oldValue = this.staleConnectionCheckerClassName;
		this.staleConnectionCheckerClassName = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("staleConnectionCheckerClassName",
					oldValue, value);
		return (T) this;
	}

	/**
	 * The stale connection checker properties
	 */
	@ModelNodeBinding(detypedName = "stale-connection-checker-properties")
	public Map staleConnectionCheckerProperties() {
		return this.staleConnectionCheckerProperties;
	}

	/**
	 * The stale connection checker properties
	 */
	@SuppressWarnings("unchecked")
	public T staleConnectionCheckerProperties(java.util.Map value) {
		Object oldValue = this.staleConnectionCheckerProperties;
		this.staleConnectionCheckerProperties = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("staleConnectionCheckerProperties",
					oldValue, value);
		return (T) this;
	}

	/**
	 * The stale connection checker properties
	 */
	@SuppressWarnings("unchecked")
	public T staleConnectionCheckerProperty(java.lang.String key,
			java.lang.Object value) {
		if (this.staleConnectionCheckerProperties == null) {
			this.staleConnectionCheckerProperties = new java.util.HashMap<>();
		}
		this.staleConnectionCheckerProperties.put(key, value);
		return (T) this;
	}

	/**
	 * Define whether runtime statistics are enabled or not.
	 */
	@ModelNodeBinding(detypedName = "statistics-enabled")
	public Boolean statisticsEnabled() {
		return this.statisticsEnabled;
	}

	/**
	 * Define whether runtime statistics are enabled or not.
	 */
	@SuppressWarnings("unchecked")
	public T statisticsEnabled(java.lang.Boolean value) {
		Object oldValue = this.statisticsEnabled;
		this.statisticsEnabled = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("statisticsEnabled", oldValue, value);
		return (T) this;
	}

	/**
	 * Whether to check for unclosed statements when a connection is returned to
	 * the pool, result sets are closed, a statement is closed or return to the
	 * prepared statement cache. Valid values are: "false" - do not track
	 * statements, "true" - track statements and result sets and warn when they
	 * are not closed, "nowarn" - track statements but do not warn about them
	 * being unclosed
	 */
	@ModelNodeBinding(detypedName = "track-statements")
	public String trackStatements() {
		return this.trackStatements;
	}

	/**
	 * Whether to check for unclosed statements when a connection is returned to
	 * the pool, result sets are closed, a statement is closed or return to the
	 * prepared statement cache. Valid values are: "false" - do not track
	 * statements, "true" - track statements and result sets and warn when they
	 * are not closed, "nowarn" - track statements but do not warn about them
	 * being unclosed
	 */
	@SuppressWarnings("unchecked")
	public T trackStatements(java.lang.String value) {
		Object oldValue = this.trackStatements;
		this.trackStatements = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("trackStatements", oldValue, value);
		return (T) this;
	}

	/**
	 * Defines if IronJacamar should track connection handles across transaction
	 * boundaries
	 */
	@ModelNodeBinding(detypedName = "tracking")
	public Boolean tracking() {
		return this.tracking;
	}

	/**
	 * Defines if IronJacamar should track connection handles across transaction
	 * boundaries
	 */
	@SuppressWarnings("unchecked")
	public T tracking(java.lang.Boolean value) {
		Object oldValue = this.tracking;
		this.tracking = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("tracking", oldValue, value);
		return (T) this;
	}

	/**
	 * Set the java.sql.Connection transaction isolation level. Valid values
	 * are: TRANSACTION_READ_UNCOMMITTED, TRANSACTION_READ_COMMITTED,
	 * TRANSACTION_REPEATABLE_READ, TRANSACTION_SERIALIZABLE and
	 * TRANSACTION_NONE. Different values are used to set customLevel using
	 * TransactionIsolation#customLevel.
	 */
	@ModelNodeBinding(detypedName = "transaction-isolation")
	public String transactionIsolation() {
		return this.transactionIsolation;
	}

	/**
	 * Set the java.sql.Connection transaction isolation level. Valid values
	 * are: TRANSACTION_READ_UNCOMMITTED, TRANSACTION_READ_COMMITTED,
	 * TRANSACTION_REPEATABLE_READ, TRANSACTION_SERIALIZABLE and
	 * TRANSACTION_NONE. Different values are used to set customLevel using
	 * TransactionIsolation#customLevel.
	 */
	@SuppressWarnings("unchecked")
	public T transactionIsolation(java.lang.String value) {
		Object oldValue = this.transactionIsolation;
		this.transactionIsolation = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("transactionIsolation", oldValue, value);
		return (T) this;
	}

	/**
	 * Specifies the delimiter for URLs in connection-url for HA datasources
	 */
	@ModelNodeBinding(detypedName = "url-delimiter")
	public String urlDelimiter() {
		return this.urlDelimiter;
	}

	/**
	 * Specifies the delimiter for URLs in connection-url for HA datasources
	 */
	@SuppressWarnings("unchecked")
	public T urlDelimiter(java.lang.String value) {
		Object oldValue = this.urlDelimiter;
		this.urlDelimiter = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("urlDelimiter", oldValue, value);
		return (T) this;
	}

	/**
	 * Specifies the property for the URL property in the xa-datasource-property
	 * values
	 */
	@ModelNodeBinding(detypedName = "url-property")
	public String urlProperty() {
		return this.urlProperty;
	}

	/**
	 * Specifies the property for the URL property in the xa-datasource-property
	 * values
	 */
	@SuppressWarnings("unchecked")
	public T urlProperty(java.lang.String value) {
		Object oldValue = this.urlProperty;
		this.urlProperty = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("urlProperty", oldValue, value);
		return (T) this;
	}

	/**
	 * A class that implements org.jboss.jca.adapters.jdbc.URLSelectorStrategy
	 */
	@ModelNodeBinding(detypedName = "url-selector-strategy-class-name")
	public String urlSelectorStrategyClassName() {
		return this.urlSelectorStrategyClassName;
	}

	/**
	 * A class that implements org.jboss.jca.adapters.jdbc.URLSelectorStrategy
	 */
	@SuppressWarnings("unchecked")
	public T urlSelectorStrategyClassName(java.lang.String value) {
		Object oldValue = this.urlSelectorStrategyClassName;
		this.urlSelectorStrategyClassName = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("urlSelectorStrategyClassName",
					oldValue, value);
		return (T) this;
	}

	/**
	 * Enable the use of a cached connection manager
	 */
	@ModelNodeBinding(detypedName = "use-ccm")
	public Boolean useCcm() {
		return this.useCcm;
	}

	/**
	 * Enable the use of a cached connection manager
	 */
	@SuppressWarnings("unchecked")
	public T useCcm(java.lang.Boolean value) {
		Object oldValue = this.useCcm;
		this.useCcm = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("useCcm", oldValue, value);
		return (T) this;
	}

	/**
	 * Whether to fail a connection allocation on the first try if it is invalid
	 * (true) or keep trying until the pool is exhausted of all potential
	 * connections (false)
	 */
	@ModelNodeBinding(detypedName = "use-fast-fail")
	public Boolean useFastFail() {
		return this.useFastFail;
	}

	/**
	 * Whether to fail a connection allocation on the first try if it is invalid
	 * (true) or keep trying until the pool is exhausted of all potential
	 * connections (false)
	 */
	@SuppressWarnings("unchecked")
	public T useFastFail(java.lang.Boolean value) {
		Object oldValue = this.useFastFail;
		this.useFastFail = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("useFastFail", oldValue, value);
		return (T) this;
	}

	/**
	 * Setting this to false will bind the datasource into global JNDI
	 */
	@ModelNodeBinding(detypedName = "use-java-context")
	public Boolean useJavaContext() {
		return this.useJavaContext;
	}

	/**
	 * Setting this to false will bind the datasource into global JNDI
	 */
	@SuppressWarnings("unchecked")
	public T useJavaContext(java.lang.Boolean value) {
		Object oldValue = this.useJavaContext;
		this.useJavaContext = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("useJavaContext", oldValue, value);
		return (T) this;
	}

	/**
	 * Any configured timeout for internal locks on the resource adapter objects
	 * in seconds
	 */
	@ModelNodeBinding(detypedName = "use-try-lock")
	public Long useTryLock() {
		return this.useTryLock;
	}

	/**
	 * Any configured timeout for internal locks on the resource adapter objects
	 * in seconds
	 */
	@SuppressWarnings("unchecked")
	public T useTryLock(java.lang.Long value) {
		Object oldValue = this.useTryLock;
		this.useTryLock = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("useTryLock", oldValue, value);
		return (T) this;
	}

	/**
	 * Specify the user name used when creating a new connection
	 */
	@ModelNodeBinding(detypedName = "user-name")
	public String userName() {
		return this.userName;
	}

	/**
	 * Specify the user name used when creating a new connection
	 */
	@SuppressWarnings("unchecked")
	public T userName(java.lang.String value) {
		Object oldValue = this.userName;
		this.userName = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("userName", oldValue, value);
		return (T) this;
	}

	/**
	 * An org.jboss.jca.adapters.jdbc.ValidConnectionChecker that provides an
	 * isValidConnection(Connection) method to validate a connection. If an
	 * exception is returned that means the connection is invalid. This
	 * overrides the check-valid-connection-sql element
	 */
	@ModelNodeBinding(detypedName = "valid-connection-checker-class-name")
	public String validConnectionCheckerClassName() {
		return this.validConnectionCheckerClassName;
	}

	/**
	 * An org.jboss.jca.adapters.jdbc.ValidConnectionChecker that provides an
	 * isValidConnection(Connection) method to validate a connection. If an
	 * exception is returned that means the connection is invalid. This
	 * overrides the check-valid-connection-sql element
	 */
	@SuppressWarnings("unchecked")
	public T validConnectionCheckerClassName(java.lang.String value) {
		Object oldValue = this.validConnectionCheckerClassName;
		this.validConnectionCheckerClassName = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("validConnectionCheckerClassName",
					oldValue, value);
		return (T) this;
	}

	/**
	 * The valid connection checker properties
	 */
	@ModelNodeBinding(detypedName = "valid-connection-checker-properties")
	public Map validConnectionCheckerProperties() {
		return this.validConnectionCheckerProperties;
	}

	/**
	 * The valid connection checker properties
	 */
	@SuppressWarnings("unchecked")
	public T validConnectionCheckerProperties(java.util.Map value) {
		Object oldValue = this.validConnectionCheckerProperties;
		this.validConnectionCheckerProperties = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("validConnectionCheckerProperties",
					oldValue, value);
		return (T) this;
	}

	/**
	 * The valid connection checker properties
	 */
	@SuppressWarnings("unchecked")
	public T validConnectionCheckerProperty(java.lang.String key,
			java.lang.Object value) {
		if (this.validConnectionCheckerProperties == null) {
			this.validConnectionCheckerProperties = new java.util.HashMap<>();
		}
		this.validConnectionCheckerProperties.put(key, value);
		return (T) this;
	}

	/**
	 * The validate-on-match element specifies if connection validation should
	 * be done when a connection factory attempts to match a managed connection.
	 * This is typically exclusive to the use of background validation
	 */
	@ModelNodeBinding(detypedName = "validate-on-match")
	public Boolean validateOnMatch() {
		return this.validateOnMatch;
	}

	/**
	 * The validate-on-match element specifies if connection validation should
	 * be done when a connection factory attempts to match a managed connection.
	 * This is typically exclusive to the use of background validation
	 */
	@SuppressWarnings("unchecked")
	public T validateOnMatch(java.lang.Boolean value) {
		Object oldValue = this.validateOnMatch;
		this.validateOnMatch = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("validateOnMatch", oldValue, value);
		return (T) this;
	}

	/**
	 * Should the XAResource instances be wrapped in an
	 * org.jboss.tm.XAResourceWrapper instance
	 */
	@ModelNodeBinding(detypedName = "wrap-xa-resource")
	public Boolean wrapXaResource() {
		return this.wrapXaResource;
	}

	/**
	 * Should the XAResource instances be wrapped in an
	 * org.jboss.tm.XAResourceWrapper instance
	 */
	@SuppressWarnings("unchecked")
	public T wrapXaResource(java.lang.Boolean value) {
		Object oldValue = this.wrapXaResource;
		this.wrapXaResource = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("wrapXaResource", oldValue, value);
		return (T) this;
	}

	/**
	 * The fully qualified name of the javax.sql.XADataSource implementation
	 */
	@ModelNodeBinding(detypedName = "xa-datasource-class")
	public String xaDatasourceClass() {
		return this.xaDatasourceClass;
	}

	/**
	 * The fully qualified name of the javax.sql.XADataSource implementation
	 */
	@SuppressWarnings("unchecked")
	public T xaDatasourceClass(java.lang.String value) {
		Object oldValue = this.xaDatasourceClass;
		this.xaDatasourceClass = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("xaDatasourceClass", oldValue, value);
		return (T) this;
	}

	/**
	 * The value is passed to XAResource.setTransactionTimeout(), in seconds.
	 * Default is zero
	 */
	@ModelNodeBinding(detypedName = "xa-resource-timeout")
	public Integer xaResourceTimeout() {
		return this.xaResourceTimeout;
	}

	/**
	 * The value is passed to XAResource.setTransactionTimeout(), in seconds.
	 * Default is zero
	 */
	@SuppressWarnings("unchecked")
	public T xaResourceTimeout(java.lang.Integer value) {
		Object oldValue = this.xaResourceTimeout;
		this.xaResourceTimeout = value;
		if (this.pcs != null)
			this.pcs.firePropertyChange("xaResourceTimeout", oldValue, value);
		return (T) this;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy