diff --git a/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/BackupForBuilder.java b/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/BackupForBuilder.java index 93252a3ad344..867ce259d590 100644 --- a/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/BackupForBuilder.java +++ b/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/BackupForBuilder.java @@ -25,8 +25,6 @@ import static org.jboss.as.clustering.infinispan.subsystem.BackupForResourceDefinition.Attribute.CACHE; import static org.jboss.as.clustering.infinispan.subsystem.BackupForResourceDefinition.Attribute.SITE; -import java.util.Optional; - import org.infinispan.configuration.cache.BackupForConfiguration; import org.infinispan.configuration.cache.ConfigurationBuilder; import org.jboss.as.clustering.dmr.ModelNodes; @@ -42,7 +40,8 @@ */ public class BackupForBuilder extends ComponentBuilder { - private volatile org.infinispan.configuration.cache.BackupForBuilder builder = new ConfigurationBuilder().sites().backupFor(); + private volatile String site; + private volatile String cache; BackupForBuilder(PathAddress cacheAddress) { super(CacheComponent.BACKUP_FOR, cacheAddress); @@ -50,15 +49,17 @@ public class BackupForBuilder extends ComponentBuilder { @Override public Builder configure(OperationContext context, ModelNode model) throws OperationFailedException { - Optional site = ModelNodes.optionalString(SITE.resolveModelAttribute(context, model)); - if (site.isPresent()) { - this.builder.remoteSite(site.get()).remoteCache(CACHE.resolveModelAttribute(context, model).asString()); - } + this.site = ModelNodes.optionalString(SITE.resolveModelAttribute(context, model)).orElse(null); + this.cache = CACHE.resolveModelAttribute(context, model).asString(); return this; } @Override public BackupForConfiguration getValue() { - return this.builder.create(); + org.infinispan.configuration.cache.BackupForBuilder builder = new ConfigurationBuilder().sites().backupFor(); + if (this.site != null) { + builder.remoteSite(this.site).remoteCache(this.cache); + } + return builder.create(); } } diff --git a/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/EvictionBuilder.java b/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/EvictionBuilder.java index 994703afbb2c..e74a7d4ff4ab 100644 --- a/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/EvictionBuilder.java +++ b/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/EvictionBuilder.java @@ -42,9 +42,8 @@ */ public class EvictionBuilder extends ComponentBuilder { - private final EvictionConfigurationBuilder builder = new ConfigurationBuilder().eviction(); - private volatile EvictionStrategy strategy; + private volatile long maxEntries; EvictionBuilder(PathAddress cacheAddress) { super(CacheComponent.EVICTION, cacheAddress); @@ -53,16 +52,19 @@ public class EvictionBuilder extends ComponentBuilder { @Override public Builder configure(OperationContext context, ModelNode model) throws OperationFailedException { this.strategy = ModelNodes.asEnum(STRATEGY.resolveModelAttribute(context, model), EvictionStrategy.class); - // Use MANUAL instead of NONE to silence log WARNs on cache configuration validation - this.builder.strategy(this.strategy.isEnabled() ? this.strategy : EvictionStrategy.MANUAL); - if (this.strategy.isEnabled()) { - this.builder.type(EvictionType.COUNT).size(MAX_ENTRIES.resolveModelAttribute(context, model).asLong()); - } + this.maxEntries = MAX_ENTRIES.resolveModelAttribute(context, model).asLong(); return this; } @Override public EvictionConfiguration getValue() { - return this.builder.create(); + EvictionConfigurationBuilder builder = new ConfigurationBuilder().eviction() + // Use MANUAL instead of NONE to silence log WARNs on cache configuration validation + .strategy(this.strategy.isEnabled() ? this.strategy : EvictionStrategy.MANUAL) + ; + if (this.strategy.isEnabled()) { + builder.type(EvictionType.COUNT).size(this.maxEntries); + } + return builder.create(); } } diff --git a/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/ExpirationBuilder.java b/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/ExpirationBuilder.java index b467c5e5dc3b..7e711b5cc976 100644 --- a/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/ExpirationBuilder.java +++ b/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/ExpirationBuilder.java @@ -28,7 +28,6 @@ import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.configuration.cache.ExpirationConfiguration; -import org.infinispan.configuration.cache.ExpirationConfigurationBuilder; import org.jboss.as.controller.OperationContext; import org.jboss.as.controller.OperationFailedException; import org.jboss.as.controller.PathAddress; @@ -40,7 +39,9 @@ */ public class ExpirationBuilder extends ComponentBuilder { - private final ExpirationConfigurationBuilder builder = new ConfigurationBuilder().expiration(); + private volatile long interval; + private volatile long lifespan; + private volatile long maxIdle; ExpirationBuilder(PathAddress cacheAddress) { super(CacheComponent.EXPIRATION, cacheAddress); @@ -48,14 +49,18 @@ public class ExpirationBuilder extends ComponentBuilder @Override public Builder configure(OperationContext context, ModelNode model) throws OperationFailedException { - this.builder.wakeUpInterval(INTERVAL.resolveModelAttribute(context, model).asLong()); - this.builder.lifespan(LIFESPAN.resolveModelAttribute(context, model).asLong()); - this.builder.maxIdle(MAX_IDLE.resolveModelAttribute(context, model).asLong()); + this.interval = INTERVAL.resolveModelAttribute(context, model).asLong(); + this.lifespan = LIFESPAN.resolveModelAttribute(context, model).asLong(); + this.maxIdle = MAX_IDLE.resolveModelAttribute(context, model).asLong(); return this; } @Override public ExpirationConfiguration getValue() { - return this.builder.create(); + return new ConfigurationBuilder().expiration() + .wakeUpInterval(this.interval) + .lifespan(this.lifespan) + .maxIdle(this.maxIdle) + .create(); } } diff --git a/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/LockingBuilder.java b/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/LockingBuilder.java index 33045b05a49d..1618f5f241f5 100644 --- a/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/LockingBuilder.java +++ b/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/LockingBuilder.java @@ -29,7 +29,6 @@ import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.configuration.cache.LockingConfiguration; -import org.infinispan.configuration.cache.LockingConfigurationBuilder; import org.infinispan.util.concurrent.IsolationLevel; import org.jboss.as.clustering.dmr.ModelNodes; import org.jboss.as.controller.OperationContext; @@ -43,7 +42,10 @@ */ public class LockingBuilder extends ComponentBuilder { - private final LockingConfigurationBuilder builder = new ConfigurationBuilder().locking(); + private volatile long timeout; + private volatile int concurrency; + private volatile IsolationLevel isolation; + private volatile boolean striping; LockingBuilder(PathAddress cacheAddress) { super(CacheComponent.LOCKING, cacheAddress); @@ -51,15 +53,20 @@ public class LockingBuilder extends ComponentBuilder { @Override public LockingConfiguration getValue() { - return this.builder.create(); + return new ConfigurationBuilder().locking() + .lockAcquisitionTimeout(this.timeout) + .concurrencyLevel(this.concurrency) + .isolationLevel(this.isolation) + .useLockStriping(this.striping) + .create(); } @Override public Builder configure(OperationContext context, ModelNode model) throws OperationFailedException { - this.builder.lockAcquisitionTimeout(ACQUIRE_TIMEOUT.resolveModelAttribute(context, model).asLong()); - this.builder.concurrencyLevel(CONCURRENCY.resolveModelAttribute(context, model).asInt()); - this.builder.isolationLevel(ModelNodes.asEnum(ISOLATION.resolveModelAttribute(context, model), IsolationLevel.class)); - this.builder.useLockStriping(STRIPING.resolveModelAttribute(context, model).asBoolean()); + this.timeout = ACQUIRE_TIMEOUT.resolveModelAttribute(context, model).asLong(); + this.concurrency = CONCURRENCY.resolveModelAttribute(context, model).asInt(); + this.isolation = ModelNodes.asEnum(ISOLATION.resolveModelAttribute(context, model), IsolationLevel.class); + this.striping = STRIPING.resolveModelAttribute(context, model).asBoolean(); return this; } } diff --git a/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/PartitionHandlingBuilder.java b/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/PartitionHandlingBuilder.java index c76a173a60a1..a23da561faa8 100644 --- a/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/PartitionHandlingBuilder.java +++ b/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/PartitionHandlingBuilder.java @@ -26,7 +26,6 @@ import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.configuration.cache.PartitionHandlingConfiguration; -import org.infinispan.configuration.cache.PartitionHandlingConfigurationBuilder; import org.jboss.as.controller.OperationContext; import org.jboss.as.controller.OperationFailedException; import org.jboss.as.controller.PathAddress; @@ -39,7 +38,7 @@ */ public class PartitionHandlingBuilder extends ComponentBuilder { - private final PartitionHandlingConfigurationBuilder builder = new ConfigurationBuilder().clustering().partitionHandling(); + private volatile boolean enabled; PartitionHandlingBuilder(PathAddress cacheAddress) { super(CacheComponent.PARTITION_HANDLING, cacheAddress); @@ -47,12 +46,14 @@ public class PartitionHandlingBuilder extends ComponentBuilder configure(OperationContext context, ModelNode model) throws OperationFailedException { - this.builder.enabled(ENABLED.resolveModelAttribute(context, model).asBoolean()); + this.enabled = ENABLED.resolveModelAttribute(context, model).asBoolean(); return this; } } diff --git a/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/StateTransferBuilder.java b/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/StateTransferBuilder.java index b4f718f0fc02..9048c3a66d51 100644 --- a/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/StateTransferBuilder.java +++ b/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/StateTransferBuilder.java @@ -27,7 +27,6 @@ import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.configuration.cache.StateTransferConfiguration; -import org.infinispan.configuration.cache.StateTransferConfigurationBuilder; import org.jboss.as.controller.OperationContext; import org.jboss.as.controller.OperationFailedException; import org.jboss.as.controller.PathAddress; @@ -39,7 +38,8 @@ */ public class StateTransferBuilder extends ComponentBuilder { - private final StateTransferConfigurationBuilder builder = new ConfigurationBuilder().clustering().stateTransfer(); + private volatile int chunkSize; + private volatile long timeout; StateTransferBuilder(PathAddress cacheAddress) { super(CacheComponent.STATE_TRANSFER, cacheAddress); @@ -47,15 +47,17 @@ public class StateTransferBuilder extends ComponentBuilder configure(OperationContext context, ModelNode model) throws OperationFailedException { - this.builder.chunkSize(CHUNK_SIZE.resolveModelAttribute(context, model).asInt()) - .fetchInMemoryState(true) - .timeout(TIMEOUT.resolveModelAttribute(context, model).asLong()) - ; + this.chunkSize = CHUNK_SIZE.resolveModelAttribute(context, model).asInt(); + this.timeout = TIMEOUT.resolveModelAttribute(context, model).asLong(); return this; } } diff --git a/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/StoreWriteBehindBuilder.java b/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/StoreWriteBehindBuilder.java index 9788f27c58f5..e8dae68ad3d8 100644 --- a/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/StoreWriteBehindBuilder.java +++ b/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/StoreWriteBehindBuilder.java @@ -25,7 +25,6 @@ import static org.jboss.as.clustering.infinispan.subsystem.StoreWriteBehindResourceDefinition.Attribute.*; import org.infinispan.configuration.cache.AsyncStoreConfiguration; -import org.infinispan.configuration.cache.AsyncStoreConfigurationBuilder; import org.infinispan.configuration.cache.ConfigurationBuilder; import org.jboss.as.controller.OperationContext; import org.jboss.as.controller.OperationFailedException; @@ -38,7 +37,8 @@ */ public class StoreWriteBehindBuilder extends ComponentBuilder { - private final AsyncStoreConfigurationBuilder builder = new ConfigurationBuilder().persistence().addSingleFileStore().async(); + private volatile int queueSize; + private volatile int poolSize; StoreWriteBehindBuilder(PathAddress cacheAddress) { super(CacheComponent.STORE_WRITE, cacheAddress); @@ -46,13 +46,16 @@ public class StoreWriteBehindBuilder extends ComponentBuilder configure(OperationContext context, ModelNode model) throws OperationFailedException { - this.builder.modificationQueueSize(MODIFICATION_QUEUE_SIZE.resolveModelAttribute(context, model).asInt()); - this.builder.threadPoolSize(THREAD_POOL_SIZE.resolveModelAttribute(context, model).asInt()); + this.queueSize = MODIFICATION_QUEUE_SIZE.resolveModelAttribute(context, model).asInt(); + this.poolSize = THREAD_POOL_SIZE.resolveModelAttribute(context, model).asInt(); return this; } } diff --git a/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/TableBuilder.java b/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/TableBuilder.java index c656e1fae1c9..be42f340f29d 100644 --- a/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/TableBuilder.java +++ b/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/TableBuilder.java @@ -22,15 +22,19 @@ package org.jboss.as.clustering.infinispan.subsystem; -import static org.jboss.as.clustering.infinispan.subsystem.TableResourceDefinition.ColumnAttribute.*; import static org.jboss.as.clustering.infinispan.subsystem.TableResourceDefinition.Attribute.*; +import static org.jboss.as.clustering.infinispan.subsystem.TableResourceDefinition.ColumnAttribute.*; + +import java.util.AbstractMap; +import java.util.EnumMap; +import java.util.EnumSet; +import java.util.Map; import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.persistence.jdbc.configuration.JdbcStringBasedStoreConfigurationBuilder; import org.infinispan.persistence.jdbc.configuration.TableManipulationConfiguration; -import org.infinispan.persistence.jdbc.configuration.TableManipulationConfigurationBuilder; -import org.infinispan.persistence.jdbc.configuration.JdbcStringBasedStoreConfigurationBuilder.StringTableManipulationConfigurationBuilder; import org.jboss.as.clustering.controller.Attribute; +import org.jboss.as.clustering.infinispan.subsystem.TableResourceDefinition.ColumnAttribute; import org.jboss.as.controller.OperationContext; import org.jboss.as.controller.OperationFailedException; import org.jboss.as.controller.PathAddress; @@ -43,7 +47,11 @@ public class TableBuilder extends ComponentBuilder { private final Attribute prefixAttribute; - private final TableManipulationConfigurationBuilder builder = new ConfigurationBuilder().persistence().addStore(JdbcStringBasedStoreConfigurationBuilder.class).table(); + private final Map> columns = new EnumMap<>(ColumnAttribute.class); + + private volatile int batchSize; + private volatile int fetchSize; + private volatile String prefix; public TableBuilder(Attribute prefixAttribute, CacheComponent component, PathAddress cacheAddress) { super(component, cacheAddress); @@ -52,25 +60,31 @@ public TableBuilder(Attribute prefixAttribute, CacheComponent component, PathAdd @Override public Builder configure(OperationContext context, ModelNode model) throws OperationFailedException { - ModelNode idModel = ID.resolveModelAttribute(context, model); - ModelNode dataModel = DATA.resolveModelAttribute(context, model); - ModelNode timestampModel = TIMESTAMP.resolveModelAttribute(context, model); + for (ColumnAttribute column : EnumSet.allOf(ColumnAttribute.class)) { + ModelNode columnModel = column.resolveModelAttribute(context, model); + String name = column.getColumnName().resolveModelAttribute(context, columnModel).asString(); + String type = column.getColumnType().resolveModelAttribute(context, columnModel).asString(); + this.columns.put(column, new AbstractMap.SimpleImmutableEntry<>(name, type)); + } - this.builder.idColumnName(ID.getColumnName().resolveModelAttribute(context, idModel).asString()) - .idColumnType(ID.getColumnType().resolveModelAttribute(context, idModel).asString()) - .dataColumnName(DATA.getColumnName().resolveModelAttribute(context, dataModel).asString()) - .dataColumnType(DATA.getColumnType().resolveModelAttribute(context, dataModel).asString()) - .timestampColumnName(TIMESTAMP.getColumnName().resolveModelAttribute(context, timestampModel).asString()) - .timestampColumnType(TIMESTAMP.getColumnType().resolveModelAttribute(context, timestampModel).asString()) - .batchSize(BATCH_SIZE.resolveModelAttribute(context, model).asInt()) - .fetchSize(FETCH_SIZE.resolveModelAttribute(context, model).asInt()) - .tableNamePrefix(this.prefixAttribute.resolveModelAttribute(context, model).asString()) - ; + this.batchSize = BATCH_SIZE.resolveModelAttribute(context, model).asInt(); + this.fetchSize = FETCH_SIZE.resolveModelAttribute(context, model).asInt(); + this.prefix = this.prefixAttribute.resolveModelAttribute(context, model).asString(); return this; } @Override public TableManipulationConfiguration getValue() { - return this.builder.create(); + return new ConfigurationBuilder().persistence().addStore(JdbcStringBasedStoreConfigurationBuilder.class).table() + .idColumnName(this.columns.get(ID).getKey()) + .idColumnType(this.columns.get(ID).getValue()) + .dataColumnName(this.columns.get(DATA).getKey()) + .dataColumnType(this.columns.get(DATA).getValue()) + .timestampColumnName(this.columns.get(TIMESTAMP).getKey()) + .timestampColumnType(this.columns.get(TIMESTAMP).getValue()) + .batchSize(this.batchSize) + .fetchSize(this.fetchSize) + .tableNamePrefix(this.prefix) + .create(); } } diff --git a/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/TransactionBuilder.java b/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/TransactionBuilder.java index 25097c3ea49c..7f0b690e5512 100644 --- a/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/TransactionBuilder.java +++ b/clustering/infinispan/extension/src/main/java/org/jboss/as/clustering/infinispan/subsystem/TransactionBuilder.java @@ -31,7 +31,6 @@ import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.configuration.cache.TransactionConfiguration; -import org.infinispan.configuration.cache.TransactionConfigurationBuilder; import org.infinispan.transaction.LockingMode; import org.infinispan.transaction.tm.DummyTransactionManager; import org.jboss.as.clustering.dmr.ModelNodes; @@ -44,19 +43,19 @@ import org.jboss.dmr.ModelNode; import org.jboss.msc.service.ServiceBuilder; import org.jboss.msc.service.ServiceTarget; -import org.jboss.msc.value.InjectedValue; import org.wildfly.clustering.service.Builder; +import org.wildfly.clustering.service.OptionalInjectedValue; /** * @author Paul Ferraro */ public class TransactionBuilder extends ComponentBuilder { - private final InjectedValue tm = new InjectedValue<>(); - private final InjectedValue tsr = new InjectedValue<>(); - - private final TransactionConfigurationBuilder builder = new ConfigurationBuilder().transaction(); + private final OptionalInjectedValue tm = new OptionalInjectedValue<>(); + private final OptionalInjectedValue tsr = new OptionalInjectedValue<>(); + private volatile LockingMode locking; + private volatile long timeout; private volatile TransactionMode mode; public TransactionBuilder(PathAddress cacheAddress) { @@ -87,23 +86,21 @@ public ServiceBuilder build(ServiceTarget target) { @Override public Builder configure(OperationContext context, ModelNode model) throws OperationFailedException { this.mode = ModelNodes.asEnum(MODE.resolveModelAttribute(context, model), TransactionMode.class); - this.builder.lockingMode(ModelNodes.asEnum(LOCKING.resolveModelAttribute(context, model), LockingMode.class)); - this.builder.cacheStopTimeout(STOP_TIMEOUT.resolveModelAttribute(context, model).asLong()); - this.builder.transactionMode((this.mode == TransactionMode.NONE) ? org.infinispan.transaction.TransactionMode.NON_TRANSACTIONAL : org.infinispan.transaction.TransactionMode.TRANSACTIONAL); - this.builder.useSynchronization(this.mode == TransactionMode.NON_XA); - this.builder.recovery().enabled(this.mode == TransactionMode.FULL_XA); - this.builder.invocationBatching().disable(); + this.locking = ModelNodes.asEnum(LOCKING.resolveModelAttribute(context, model), LockingMode.class); + this.timeout = STOP_TIMEOUT.resolveModelAttribute(context, model).asLong(); return this; } @Override public TransactionConfiguration getValue() { - TransactionManager tm = this.tm.getOptionalValue(); - this.builder.transactionManagerLookup((tm != null) ? new TransactionManagerProvider(tm) : null); - - TransactionSynchronizationRegistry tsr = this.tsr.getOptionalValue(); - this.builder.transactionSynchronizationRegistryLookup((tsr != null) ? new TransactionSynchronizationRegistryProvider(tsr) : null); - - return this.builder.create(); + return new ConfigurationBuilder().transaction() + .lockingMode(this.locking) + .cacheStopTimeout(this.timeout) + .transactionManagerLookup(this.tm.getOptionalValue().map(TransactionManagerProvider::new).orElse(null)) + .transactionSynchronizationRegistryLookup(this.tsr.getOptionalValue().map(TransactionSynchronizationRegistryProvider::new).orElse(null)) + .transactionMode((this.mode == TransactionMode.NONE) ? org.infinispan.transaction.TransactionMode.NON_TRANSACTIONAL : org.infinispan.transaction.TransactionMode.TRANSACTIONAL) + .useSynchronization(this.mode == TransactionMode.NON_XA) + .recovery().enabled(this.mode == TransactionMode.FULL_XA).transaction() + .create(); } }