, P extends DistributedPrimitive> P getPrimitive(String name, PrimitiveType, C, P, ?> primitiveType, C primitiveConfig) {
+ public P getPrimitive(String name, String primitiveType) {
+ return primitives.getPrimitive(name, primitiveType);
+ }
+
+ @Override
+ public
P getPrimitive(String name, String primitiveType, PrimitiveConfig primitiveConfig) {
+ return primitives.getPrimitive(name, primitiveType, primitiveConfig);
+ }
+
+ @Override
+ public , P extends DistributedPrimitive> P getPrimitive(String name, PrimitiveType, C, P> primitiveType, C primitiveConfig) {
return primitives.getPrimitive(name, primitiveType, primitiveConfig);
}
@@ -346,51 +458,47 @@ public String toString() {
}
/**
- * Loads a configuration from the given file.
+ * Builds the core partition group.
*/
- private static AtomixConfig loadConfig(String config) {
- File configFile = new File(config);
- if (configFile.exists()) {
- return Configs.load(configFile, AtomixConfig.class, Thread.currentThread().getContextClassLoader());
- } else {
- return Configs.load(config, AtomixConfig.class, Thread.currentThread().getContextClassLoader());
+ @SuppressWarnings("unchecked")
+ private static ManagedPartitionGroup buildSystemPartitionGroup(AtomixConfig config) {
+ PartitionGroupConfig partitionGroupConfig = config.getManagementGroup();
+ if (partitionGroupConfig == null) {
+ return null;
}
- }
-
- /**
- * Loads a configuration from the given file.
- */
- private static AtomixConfig loadConfig(File config) {
- return Configs.load(config, AtomixConfig.class, Thread.currentThread().getContextClassLoader());
- }
- /**
- * Builds the core partition group.
- */
- private static ManagedPartitionGroup buildSystemPartitionGroup(AtomixConfig config, ClassLoader classLoader) {
- return config.getManagementGroup() != null ? PartitionGroups.createGroup(config.getManagementGroup(), classLoader) : null;
+ PartitionGroupType partitionGroupType = config.getRegistry().getPartitionGroupTypes().get(partitionGroupConfig.getType());
+ if (partitionGroupType == null) {
+ throw new ConfigurationException("Unknown partition group type " + partitionGroupConfig.getType());
+ }
+ return partitionGroupType.newGroup(partitionGroupConfig);
}
/**
* Builds a partition service.
*/
+ @SuppressWarnings("unchecked")
private static ManagedPartitionService buildPartitionService(
AtomixConfig config,
ClusterMembershipService clusterMembershipService,
ClusterCommunicationService messagingService,
- ClassLoader classLoader,
- PrimitiveTypeRegistry primitiveTypeRegistry) {
+ RegistryService registryService) {
List partitionGroups = new ArrayList<>();
for (PartitionGroupConfig partitionGroupConfig : config.getPartitionGroups().values()) {
- partitionGroups.add(PartitionGroups.createGroup(partitionGroupConfig, classLoader));
+ PartitionGroupType partitionGroupType = config.getRegistry().getPartitionGroupTypes().get(partitionGroupConfig.getType());
+ if (partitionGroupType == null) {
+ throw new ConfigurationException("Unknown partition group type " + partitionGroupConfig.getType());
+ }
+ partitionGroups.add(partitionGroupType.newGroup(partitionGroupConfig));
}
+
return new DefaultPartitionService(
clusterMembershipService,
messagingService,
- classLoader,
- primitiveTypeRegistry,
- buildSystemPartitionGroup(config, classLoader),
- partitionGroups);
+ registryService.primitiveTypes(),
+ buildSystemPartitionGroup(config),
+ partitionGroups,
+ registryService.partitionGroupTypes());
}
/**
@@ -537,7 +645,7 @@ public Builder withPrimitiveTypes(PrimitiveType... primitiveTypes) {
* @throws NullPointerException if the primitive types is {@code null}
*/
public Builder withPrimitiveTypes(Collection primitiveTypes) {
- primitiveTypes.forEach(type -> config.addType(type.getClass()));
+ primitiveTypes.forEach(type -> config.getRegistry().addPrimitiveType(type));
return this;
}
@@ -549,7 +657,7 @@ public Builder withPrimitiveTypes(Collection primitiveTypes) {
* @throws NullPointerException if the primitive type is {@code null}
*/
public Builder addPrimitiveType(PrimitiveType primitiveType) {
- config.addType(primitiveType.getClass());
+ config.getRegistry().addPrimitiveType(primitiveType);
return this;
}
diff --git a/core/src/main/java/io/atomix/core/AtomixConfig.java b/core/src/main/java/io/atomix/core/AtomixConfig.java
index da99f6f9d5..e741391fac 100644
--- a/core/src/main/java/io/atomix/core/AtomixConfig.java
+++ b/core/src/main/java/io/atomix/core/AtomixConfig.java
@@ -17,18 +17,15 @@
import io.atomix.cluster.ClusterConfig;
import io.atomix.core.profile.Profile;
-import io.atomix.core.profile.Profiles;
+import io.atomix.core.registry.RegistryConfig;
import io.atomix.primitive.PrimitiveConfig;
-import io.atomix.primitive.PrimitiveType;
import io.atomix.primitive.partition.PartitionGroupConfig;
import io.atomix.utils.config.Config;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.stream.Collectors;
import static com.google.common.base.Preconditions.checkNotNull;
@@ -42,9 +39,9 @@ public class AtomixConfig implements Config {
private boolean enableShutdownHook;
private PartitionGroupConfig managementGroup;
private Map partitionGroups = new HashMap<>();
- private Collection> types = new ArrayList<>();
private Map primitives = new HashMap<>();
private List profiles = new ArrayList<>();
+ private RegistryConfig registry = new RegistryConfig();
/**
* Returns the cluster configuration.
@@ -139,37 +136,6 @@ public AtomixConfig addPartitionGroup(PartitionGroupConfig partitionGroup) {
return this;
}
- /**
- * Returns the primitive types.
- *
- * @return the primitive types
- */
- public Collection> getPrimitiveTypes() {
- return types;
- }
-
- /**
- * Sets the primitive types.
- *
- * @param types the primitive types
- * @return the primitive type configuration
- */
- public AtomixConfig setPrimitiveTypes(Collection> types) {
- this.types = types;
- return this;
- }
-
- /**
- * Adds a primitive type.
- *
- * @param type the type class
- * @return the primitive type configuration
- */
- public AtomixConfig addType(Class extends PrimitiveType> type) {
- types.add(type);
- return this;
- }
-
/**
* Returns the primitive configurations.
*
@@ -229,10 +195,8 @@ public List getProfiles() {
* @param profiles the profiles
* @return the Atomix configuration
*/
- public AtomixConfig setProfiles(List profiles) {
- this.profiles = profiles.stream()
- .map(name -> Profiles.getNamedProfile(name))
- .collect(Collectors.toList());
+ public AtomixConfig setProfiles(List profiles) {
+ this.profiles = profiles;
return this;
}
@@ -246,4 +210,24 @@ public AtomixConfig addProfile(Profile profile) {
profiles.add(checkNotNull(profile, "profile cannot be null"));
return this;
}
+
+ /**
+ * Returns the registry.
+ *
+ * @return the registry
+ */
+ public RegistryConfig getRegistry() {
+ return registry;
+ }
+
+ /**
+ * Sets the registry.
+ *
+ * @param registry the registry
+ * @return the Atomix configuration
+ */
+ public AtomixConfig setRegistry(RegistryConfig registry) {
+ this.registry = registry;
+ return this;
+ }
}
diff --git a/core/src/main/java/io/atomix/core/PrimitiveTypes.java b/core/src/main/java/io/atomix/core/PrimitiveTypes.java
new file mode 100644
index 0000000000..beeec07871
--- /dev/null
+++ b/core/src/main/java/io/atomix/core/PrimitiveTypes.java
@@ -0,0 +1,196 @@
+/*
+ * Copyright 2018-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.atomix.core;
+
+import io.atomix.core.counter.AtomicCounter;
+import io.atomix.core.counter.AtomicCounterBuilder;
+import io.atomix.core.counter.AtomicCounterConfig;
+import io.atomix.core.election.LeaderElection;
+import io.atomix.core.election.LeaderElectionBuilder;
+import io.atomix.core.election.LeaderElectionConfig;
+import io.atomix.core.election.LeaderElector;
+import io.atomix.core.election.LeaderElectorBuilder;
+import io.atomix.core.election.LeaderElectorConfig;
+import io.atomix.core.generator.AtomicIdGenerator;
+import io.atomix.core.generator.AtomicIdGeneratorBuilder;
+import io.atomix.core.generator.AtomicIdGeneratorConfig;
+import io.atomix.core.lock.DistributedLock;
+import io.atomix.core.lock.DistributedLockBuilder;
+import io.atomix.core.lock.DistributedLockConfig;
+import io.atomix.core.map.AtomicCounterMap;
+import io.atomix.core.map.AtomicCounterMapBuilder;
+import io.atomix.core.map.AtomicCounterMapConfig;
+import io.atomix.core.map.ConsistentMap;
+import io.atomix.core.map.ConsistentMapBuilder;
+import io.atomix.core.map.ConsistentMapConfig;
+import io.atomix.core.map.ConsistentTreeMap;
+import io.atomix.core.map.ConsistentTreeMapBuilder;
+import io.atomix.core.map.ConsistentTreeMapConfig;
+import io.atomix.core.multimap.ConsistentMultimap;
+import io.atomix.core.multimap.ConsistentMultimapBuilder;
+import io.atomix.core.multimap.ConsistentMultimapConfig;
+import io.atomix.core.queue.WorkQueue;
+import io.atomix.core.queue.WorkQueueBuilder;
+import io.atomix.core.queue.WorkQueueConfig;
+import io.atomix.core.registry.RegistryConfig;
+import io.atomix.core.semaphore.DistributedSemaphore;
+import io.atomix.core.semaphore.DistributedSemaphoreBuilder;
+import io.atomix.core.semaphore.DistributedSemaphoreConfig;
+import io.atomix.core.set.DistributedSet;
+import io.atomix.core.set.DistributedSetBuilder;
+import io.atomix.core.set.DistributedSetConfig;
+import io.atomix.core.tree.DocumentTree;
+import io.atomix.core.tree.DocumentTreeBuilder;
+import io.atomix.core.tree.DocumentTreeConfig;
+import io.atomix.core.utils.config.PartitionGroupConfigMapper;
+import io.atomix.core.utils.config.PrimitiveConfigMapper;
+import io.atomix.core.utils.config.PrimitiveProtocolConfigMapper;
+import io.atomix.core.utils.config.ProfileMapper;
+import io.atomix.core.value.AtomicValue;
+import io.atomix.core.value.AtomicValueBuilder;
+import io.atomix.core.value.AtomicValueConfig;
+import io.atomix.primitive.DistributedPrimitive;
+import io.atomix.primitive.PrimitiveType;
+import io.atomix.utils.config.ConfigMapper;
+
+/**
+ * Atomix core primitive types.
+ */
+@SuppressWarnings("unchecked")
+public final class PrimitiveTypes {
+ private static final PrimitiveType, ConsistentMapConfig, ConsistentMap, ?>> CONSISTENT_MAP;
+ private static final PrimitiveType, DocumentTreeConfig, DocumentTree>> DOCUMENT_TREE;
+ private static final PrimitiveType, ConsistentTreeMapConfig, ConsistentTreeMap>> CONSISTENT_TREE_MAP;
+ private static final PrimitiveType, ConsistentMultimapConfig, ConsistentMultimap, ?>> CONSISTENT_MULTIMAP;
+ private static final PrimitiveType, AtomicCounterMapConfig, AtomicCounterMap>> ATOMIC_COUNTER_MAP;
+ private static final PrimitiveType, DistributedSetConfig, DistributedSet>> SET;
+ private static final PrimitiveType ATOMIC_COUNTER;
+ private static final PrimitiveType ATOMIC_ID_GENERATOR;
+ private static final PrimitiveType, AtomicValueConfig, AtomicValue>> ATOMIC_VALUE;
+ private static final PrimitiveType, LeaderElectionConfig, LeaderElection>> LEADER_ELECTION;
+ private static final PrimitiveType, LeaderElectorConfig, LeaderElector>> LEADER_ELECTOR;
+ private static final PrimitiveType LOCK;
+ private static final PrimitiveType SEMAPHORE;
+ private static final PrimitiveType, WorkQueueConfig, WorkQueue>> WORK_QUEUE;
+
+ public static final PrimitiveType TRANSACTION = PrimitiveType.builder("transaction").build();
+
+ private static PrimitiveType findPrimitiveType(Class extends DistributedPrimitive> primitiveClass, RegistryConfig registry) {
+ return registry.getPrimitiveTypes().values()
+ .stream()
+ .filter(type -> primitiveClass == type.primitiveClass())
+ .findFirst()
+ .orElse(null);
+ }
+
+ static {
+ ConfigMapper mapper = new ConfigMapper(
+ PrimitiveTypes.class.getClassLoader(),
+ new PartitionGroupConfigMapper(),
+ new PrimitiveConfigMapper(),
+ new PrimitiveProtocolConfigMapper(),
+ new ProfileMapper());
+ AtomixConfig defaultConfig = mapper.loadResources(AtomixConfig.class, Atomix.DEFAULT_RESOURCES);
+ RegistryConfig registry = defaultConfig.getRegistry();
+ CONSISTENT_MAP = findPrimitiveType(ConsistentMap.class, registry);
+ DOCUMENT_TREE = findPrimitiveType(DocumentTree.class, registry);
+ CONSISTENT_TREE_MAP = findPrimitiveType(ConsistentTreeMap.class, registry);
+ CONSISTENT_MULTIMAP = findPrimitiveType(ConsistentMultimap.class, registry);
+ ATOMIC_COUNTER_MAP = findPrimitiveType(AtomicCounterMap.class, registry);
+ SET = findPrimitiveType(DistributedSet.class, registry);
+ ATOMIC_COUNTER = findPrimitiveType(AtomicCounter.class, registry);
+ ATOMIC_ID_GENERATOR = findPrimitiveType(AtomicIdGenerator.class, registry);
+ ATOMIC_VALUE = findPrimitiveType(AtomicValue.class, registry);
+ LEADER_ELECTION = findPrimitiveType(LeaderElection.class, registry);
+ LEADER_ELECTOR = findPrimitiveType(LeaderElector.class, registry);
+ LOCK = findPrimitiveType(DistributedLock.class, registry);
+ SEMAPHORE = findPrimitiveType(DistributedSemaphore.class, registry);
+ WORK_QUEUE = findPrimitiveType(WorkQueue.class, registry);
+ }
+
+ @SuppressWarnings("unchecked")
+ public static PrimitiveType, ConsistentMapConfig, ConsistentMap> consistentMap() {
+ return (PrimitiveType) CONSISTENT_MAP;
+ }
+
+ @SuppressWarnings("unchecked")
+ public static PrimitiveType, DocumentTreeConfig, DocumentTree> documentTree() {
+ return (PrimitiveType) DOCUMENT_TREE;
+ }
+
+ @SuppressWarnings("unchecked")
+ public static PrimitiveType, ConsistentTreeMapConfig, ConsistentTreeMap> consistentTreeMap() {
+ return (PrimitiveType) CONSISTENT_TREE_MAP;
+ }
+
+ @SuppressWarnings("unchecked")
+ public static PrimitiveType, ConsistentMultimapConfig, ConsistentMultimap> consistentMultimap() {
+ return (PrimitiveType) CONSISTENT_MULTIMAP;
+ }
+
+ @SuppressWarnings("unchecked")
+ public static PrimitiveType, AtomicCounterMapConfig, AtomicCounterMap> atomicCounterMap() {
+ return (PrimitiveType) ATOMIC_COUNTER_MAP;
+ }
+
+ @SuppressWarnings("unchecked")
+ public static PrimitiveType atomicCounter() {
+ return ATOMIC_COUNTER;
+ }
+
+ @SuppressWarnings("unchecked")
+ public static PrimitiveType, DistributedSetConfig, DistributedSet> set() {
+ return (PrimitiveType) SET;
+ }
+
+ @SuppressWarnings("unchecked")
+ public static PrimitiveType atomicIdGenerator() {
+ return ATOMIC_ID_GENERATOR;
+ }
+
+ @SuppressWarnings("unchecked")
+ public static PrimitiveType, AtomicValueConfig, AtomicValue> atomicValue() {
+ return (PrimitiveType) ATOMIC_VALUE;
+ }
+
+ @SuppressWarnings("unchecked")
+ public static PrimitiveType, LeaderElectionConfig, LeaderElection> leaderElection() {
+ return (PrimitiveType) LEADER_ELECTION;
+ }
+
+ @SuppressWarnings("unchecked")
+ public static PrimitiveType, LeaderElectorConfig, LeaderElector> leaderElector() {
+ return (PrimitiveType) LEADER_ELECTOR;
+ }
+
+ @SuppressWarnings("unchecked")
+ public static PrimitiveType lock() {
+ return LOCK;
+ }
+
+ @SuppressWarnings("unchecked")
+ public static PrimitiveType semaphore() {
+ return SEMAPHORE;
+ }
+
+ @SuppressWarnings("unchecked")
+ public static PrimitiveType, WorkQueueConfig, WorkQueue> workQueue() {
+ return (PrimitiveType) WORK_QUEUE;
+ }
+
+ private PrimitiveTypes() {
+ }
+}
diff --git a/core/src/main/java/io/atomix/core/PrimitivesService.java b/core/src/main/java/io/atomix/core/PrimitivesService.java
index 738c6024d2..2e56dfb167 100644
--- a/core/src/main/java/io/atomix/core/PrimitivesService.java
+++ b/core/src/main/java/io/atomix/core/PrimitivesService.java
@@ -17,47 +17,33 @@
import io.atomix.core.counter.AtomicCounter;
import io.atomix.core.counter.AtomicCounterBuilder;
-import io.atomix.core.counter.AtomicCounterType;
import io.atomix.core.election.LeaderElection;
import io.atomix.core.election.LeaderElectionBuilder;
-import io.atomix.core.election.LeaderElectionType;
import io.atomix.core.election.LeaderElector;
import io.atomix.core.election.LeaderElectorBuilder;
-import io.atomix.core.election.LeaderElectorType;
import io.atomix.core.generator.AtomicIdGenerator;
import io.atomix.core.generator.AtomicIdGeneratorBuilder;
-import io.atomix.core.generator.AtomicIdGeneratorType;
import io.atomix.core.lock.DistributedLock;
import io.atomix.core.lock.DistributedLockBuilder;
-import io.atomix.core.lock.DistributedLockType;
import io.atomix.core.map.AtomicCounterMap;
import io.atomix.core.map.AtomicCounterMapBuilder;
-import io.atomix.core.map.AtomicCounterMapType;
import io.atomix.core.map.ConsistentMap;
import io.atomix.core.map.ConsistentMapBuilder;
-import io.atomix.core.map.ConsistentMapType;
import io.atomix.core.map.ConsistentTreeMap;
import io.atomix.core.map.ConsistentTreeMapBuilder;
-import io.atomix.core.map.ConsistentTreeMapType;
import io.atomix.core.multimap.ConsistentMultimap;
import io.atomix.core.multimap.ConsistentMultimapBuilder;
-import io.atomix.core.multimap.ConsistentMultimapType;
import io.atomix.core.queue.WorkQueue;
import io.atomix.core.queue.WorkQueueBuilder;
-import io.atomix.core.queue.WorkQueueType;
import io.atomix.core.semaphore.DistributedSemaphore;
import io.atomix.core.semaphore.DistributedSemaphoreBuilder;
-import io.atomix.core.semaphore.DistributedSemaphoreType;
import io.atomix.core.set.DistributedSet;
import io.atomix.core.set.DistributedSetBuilder;
-import io.atomix.core.set.DistributedSetType;
import io.atomix.core.transaction.TransactionBuilder;
import io.atomix.core.tree.DocumentTree;
import io.atomix.core.tree.DocumentTreeBuilder;
-import io.atomix.core.tree.DocumentTreeType;
import io.atomix.core.value.AtomicValue;
import io.atomix.core.value.AtomicValueBuilder;
-import io.atomix.core.value.AtomicValueType;
import io.atomix.primitive.DistributedPrimitive;
import io.atomix.primitive.DistributedPrimitiveBuilder;
import io.atomix.primitive.PrimitiveConfig;
@@ -81,7 +67,7 @@ public interface PrimitivesService {
* @return builder for a consistent map
*/
default ConsistentMapBuilder consistentMapBuilder(String name) {
- return primitiveBuilder(name, ConsistentMapType.instance());
+ return primitiveBuilder(name, PrimitiveTypes.consistentMap());
}
/**
@@ -94,7 +80,7 @@ default ConsistentMapBuilder consistentMapBuilder(String name) {
* @return builder for a consistent map
*/
default ConsistentMapBuilder consistentMapBuilder(String name, PrimitiveProtocol protocol) {
- return primitiveBuilder(name, ConsistentMapType.instance(), protocol);
+ return primitiveBuilder(name, PrimitiveTypes.consistentMap(), protocol);
}
/**
@@ -105,7 +91,7 @@ default ConsistentMapBuilder consistentMapBuilder(String name, Prim
* @return builder for a consistent map
*/
default DocumentTreeBuilder documentTreeBuilder(String name) {
- return primitiveBuilder(name, DocumentTreeType.instance());
+ return primitiveBuilder(name, PrimitiveTypes.documentTree());
}
/**
@@ -117,7 +103,7 @@ default DocumentTreeBuilder documentTreeBuilder(String name) {
* @return builder for a consistent map
*/
default DocumentTreeBuilder documentTreeBuilder(String name, PrimitiveProtocol protocol) {
- return primitiveBuilder(name, DocumentTreeType.instance(), protocol);
+ return primitiveBuilder(name, PrimitiveTypes.documentTree(), protocol);
}
/**
@@ -128,7 +114,7 @@ default DocumentTreeBuilder documentTreeBuilder(String name, PrimitivePro
* @return builder for a async consistent tree map
*/
default ConsistentTreeMapBuilder consistentTreeMapBuilder(String name) {
- return primitiveBuilder(name, ConsistentTreeMapType.instance());
+ return primitiveBuilder(name, PrimitiveTypes.consistentTreeMap());
}
/**
@@ -140,7 +126,7 @@ default ConsistentTreeMapBuilder consistentTreeMapBuilder(String name) {
* @return builder for a async consistent tree map
*/
default ConsistentTreeMapBuilder consistentTreeMapBuilder(String name, PrimitiveProtocol protocol) {
- return primitiveBuilder(name, ConsistentTreeMapType.instance(), protocol);
+ return primitiveBuilder(name, PrimitiveTypes.consistentTreeMap(), protocol);
}
/**
@@ -152,7 +138,7 @@ default ConsistentTreeMapBuilder consistentTreeMapBuilder(String name, Pr
* @return builder for a set based async consistent multimap
*/
default ConsistentMultimapBuilder consistentMultimapBuilder(String name) {
- return primitiveBuilder(name, ConsistentMultimapType.instance());
+ return primitiveBuilder(name, PrimitiveTypes.consistentMultimap());
}
/**
@@ -165,7 +151,7 @@ default ConsistentMultimapBuilder consistentMultimapBuilder(String
* @return builder for a set based async consistent multimap
*/
default ConsistentMultimapBuilder consistentMultimapBuilder(String name, PrimitiveProtocol protocol) {
- return primitiveBuilder(name, ConsistentMultimapType.instance(), protocol);
+ return primitiveBuilder(name, PrimitiveTypes.consistentMultimap(), protocol);
}
/**
@@ -176,7 +162,7 @@ default ConsistentMultimapBuilder consistentMultimapBuilder(String
* @return builder for an atomic counter map
*/
default AtomicCounterMapBuilder atomicCounterMapBuilder(String name) {
- return primitiveBuilder(name, AtomicCounterMapType.instance());
+ return primitiveBuilder(name, PrimitiveTypes.atomicCounterMap());
}
/**
@@ -188,7 +174,7 @@ default AtomicCounterMapBuilder atomicCounterMapBuilder(String name) {
* @return builder for an atomic counter map
*/
default AtomicCounterMapBuilder atomicCounterMapBuilder(String name, PrimitiveProtocol protocol) {
- return primitiveBuilder(name, AtomicCounterMapType.instance(), protocol);
+ return primitiveBuilder(name, PrimitiveTypes.atomicCounterMap(), protocol);
}
/**
@@ -199,7 +185,7 @@ default AtomicCounterMapBuilder atomicCounterMapBuilder(String name, Prim
* @return builder for an distributed set
*/
default DistributedSetBuilder setBuilder(String name) {
- return primitiveBuilder(name, DistributedSetType.instance());
+ return primitiveBuilder(name, PrimitiveTypes.set());
}
/**
@@ -211,7 +197,7 @@ default DistributedSetBuilder setBuilder(String name) {
* @return builder for an distributed set
*/
default DistributedSetBuilder setBuilder(String name, PrimitiveProtocol protocol) {
- return primitiveBuilder(name, DistributedSetType.instance(), protocol);
+ return primitiveBuilder(name, PrimitiveTypes.set(), protocol);
}
/**
@@ -221,7 +207,7 @@ default DistributedSetBuilder setBuilder(String name, PrimitiveProtocol p
* @return atomic counter builder
*/
default AtomicCounterBuilder atomicCounterBuilder(String name) {
- return primitiveBuilder(name, AtomicCounterType.instance());
+ return primitiveBuilder(name, PrimitiveTypes.atomicCounter());
}
/**
@@ -232,7 +218,7 @@ default AtomicCounterBuilder atomicCounterBuilder(String name) {
* @return atomic counter builder
*/
default AtomicCounterBuilder atomicCounterBuilder(String name, PrimitiveProtocol protocol) {
- return primitiveBuilder(name, AtomicCounterType.instance(), protocol);
+ return primitiveBuilder(name, PrimitiveTypes.atomicCounter(), protocol);
}
/**
@@ -242,7 +228,7 @@ default AtomicCounterBuilder atomicCounterBuilder(String name, PrimitiveProtocol
* @return atomic ID generator builder
*/
default AtomicIdGeneratorBuilder atomicIdGeneratorBuilder(String name) {
- return primitiveBuilder(name, AtomicIdGeneratorType.instance());
+ return primitiveBuilder(name, PrimitiveTypes.atomicIdGenerator());
}
/**
@@ -253,7 +239,7 @@ default AtomicIdGeneratorBuilder atomicIdGeneratorBuilder(String name) {
* @return atomic ID generator builder
*/
default AtomicIdGeneratorBuilder atomicIdGeneratorBuilder(String name, PrimitiveProtocol protocol) {
- return primitiveBuilder(name, AtomicIdGeneratorType.instance(), protocol);
+ return primitiveBuilder(name, PrimitiveTypes.atomicIdGenerator(), protocol);
}
/**
@@ -264,7 +250,7 @@ default AtomicIdGeneratorBuilder atomicIdGeneratorBuilder(String name, Primitive
* @return atomic value builder
*/
default AtomicValueBuilder atomicValueBuilder(String name) {
- return primitiveBuilder(name, AtomicValueType.instance());
+ return primitiveBuilder(name, PrimitiveTypes.atomicValue());
}
/**
@@ -276,7 +262,7 @@ default AtomicValueBuilder atomicValueBuilder(String name) {
* @return atomic value builder
*/
default AtomicValueBuilder atomicValueBuilder(String name, PrimitiveProtocol protocol) {
- return primitiveBuilder(name, AtomicValueType.instance(), protocol);
+ return primitiveBuilder(name, PrimitiveTypes.atomicValue(), protocol);
}
/**
@@ -286,7 +272,7 @@ default AtomicValueBuilder atomicValueBuilder(String name, PrimitiveProto
* @return leader election builder
*/
default LeaderElectionBuilder leaderElectionBuilder(String name) {
- return primitiveBuilder(name, LeaderElectionType.instance());
+ return primitiveBuilder(name, PrimitiveTypes.leaderElection());
}
/**
@@ -297,7 +283,7 @@ default LeaderElectionBuilder leaderElectionBuilder(String name) {
* @return leader election builder
*/
default LeaderElectionBuilder leaderElectionBuilder(String name, PrimitiveProtocol protocol) {
- return primitiveBuilder(name, LeaderElectionType.instance(), protocol);
+ return primitiveBuilder(name, PrimitiveTypes.leaderElection(), protocol);
}
/**
@@ -307,7 +293,7 @@ default LeaderElectionBuilder leaderElectionBuilder(String name, Primitiv
* @return leader elector builder
*/
default LeaderElectorBuilder leaderElectorBuilder(String name) {
- return primitiveBuilder(name, LeaderElectorType.instance());
+ return primitiveBuilder(name, PrimitiveTypes.leaderElector());
}
/**
@@ -318,7 +304,7 @@ default LeaderElectorBuilder leaderElectorBuilder(String name) {
* @return leader elector builder
*/
default LeaderElectorBuilder leaderElectorBuilder(String name, PrimitiveProtocol protocol) {
- return primitiveBuilder(name, LeaderElectorType.instance(), protocol);
+ return primitiveBuilder(name, PrimitiveTypes.leaderElector(), protocol);
}
/**
@@ -328,7 +314,7 @@ default LeaderElectorBuilder leaderElectorBuilder(String name, PrimitiveP
* @return distributed lock builder
*/
default DistributedLockBuilder lockBuilder(String name) {
- return primitiveBuilder(name, DistributedLockType.instance());
+ return primitiveBuilder(name, PrimitiveTypes.lock());
}
/**
@@ -339,18 +325,18 @@ default DistributedLockBuilder lockBuilder(String name) {
* @return distributed lock builder
*/
default DistributedLockBuilder lockBuilder(String name, PrimitiveProtocol protocol) {
- return primitiveBuilder(name, DistributedLockType.instance(), protocol);
+ return primitiveBuilder(name, PrimitiveTypes.lock(), protocol);
}
/**
* Creates a new DistributedSemaphoreBuilder.
*
- * @param name the primitive name
+ * @param name the primitive name
* @param protocol the primitive protocol
* @return distributed semaphore builder
*/
default DistributedSemaphoreBuilder semaphoreBuilder(String name, PrimitiveProtocol protocol) {
- return primitiveBuilder(name, DistributedSemaphoreType.instance(), protocol);
+ return primitiveBuilder(name, PrimitiveTypes.semaphore(), protocol);
}
/**
@@ -360,7 +346,7 @@ default DistributedSemaphoreBuilder semaphoreBuilder(String name, PrimitiveProto
* @return distributed semaphore builder
*/
default DistributedSemaphoreBuilder semaphoreBuilder(String name) {
- return primitiveBuilder(name, DistributedSemaphoreType.instance());
+ return primitiveBuilder(name, PrimitiveTypes.semaphore());
}
/**
@@ -371,7 +357,7 @@ default DistributedSemaphoreBuilder semaphoreBuilder(String name) {
* @return work queue builder
*/
default WorkQueueBuilder workQueueBuilder(String name) {
- return primitiveBuilder(name, WorkQueueType.instance());
+ return primitiveBuilder(name, PrimitiveTypes.workQueue());
}
/**
@@ -383,7 +369,7 @@ default WorkQueueBuilder workQueueBuilder(String name) {
* @return work queue builder
*/
default WorkQueueBuilder workQueueBuilder(String name, PrimitiveProtocol protocol) {
- return primitiveBuilder(name, WorkQueueType.instance(), protocol);
+ return primitiveBuilder(name, PrimitiveTypes.workQueue(), protocol);
}
/**
@@ -534,6 +520,30 @@ default TransactionBuilder transactionBuilder() {
*/
P getPrimitive(String name);
+ /**
+ * Returns a registered primitive.
+ *
+ * @param name the primitive name
+ * @param primitiveType the primitive type
+ * @param
the primitive type
+ * @return the primitive instance
+ */
+
P getPrimitive(String name, String primitiveType);
+
+ /**
+ * Returns a cached primitive.
+ *
+ * @param name the primitive name
+ * @param primitiveType the primitive type
+ * @param primitiveConfig the primitive configuration
+ * @param
the primitive type
+ * @return the primitive instance
+ */
+
P getPrimitive(
+ String name,
+ String primitiveType,
+ PrimitiveConfig primitiveConfig);
+
/**
* Returns a cached primitive.
*
@@ -546,7 +556,7 @@ default TransactionBuilder transactionBuilder() {
*/
, P extends DistributedPrimitive> P getPrimitive(
String name,
- PrimitiveType, C, P, ?> primitiveType,
+ PrimitiveType, C, P> primitiveType,
C primitiveConfig);
/**
@@ -560,7 +570,7 @@ , P extends DistributedPrimitive> P getPrimitive(
*/
, C extends PrimitiveConfig, P extends DistributedPrimitive> B primitiveBuilder(
String name,
- PrimitiveType primitiveType);
+ PrimitiveType primitiveType);
/**
* Returns a primitive builder of the given type.
@@ -574,7 +584,7 @@ , C extends PrimitiveConfig, P
*/
default , C extends PrimitiveConfig, P extends DistributedPrimitive> B primitiveBuilder(
String name,
- PrimitiveType primitiveType,
+ PrimitiveType primitiveType,
PrimitiveProtocol protocol) {
return primitiveBuilder(name, primitiveType).withProtocol(protocol);
}
diff --git a/core/src/main/java/io/atomix/core/counter/AsyncAtomicCounter.java b/core/src/main/java/io/atomix/core/counter/AsyncAtomicCounter.java
index 34bf90158c..307f4ba0d4 100644
--- a/core/src/main/java/io/atomix/core/counter/AsyncAtomicCounter.java
+++ b/core/src/main/java/io/atomix/core/counter/AsyncAtomicCounter.java
@@ -17,7 +17,6 @@
import io.atomix.primitive.AsyncPrimitive;
import io.atomix.primitive.DistributedPrimitive;
-import io.atomix.primitive.PrimitiveType;
import java.time.Duration;
import java.util.concurrent.CompletableFuture;
@@ -27,11 +26,6 @@
*/
public interface AsyncAtomicCounter extends AsyncPrimitive {
- @Override
- default PrimitiveType primitiveType() {
- return AtomicCounterType.instance();
- }
-
/**
* Atomically increment by one and return the updated value.
*
diff --git a/core/src/main/java/io/atomix/core/counter/AtomicCounter.java b/core/src/main/java/io/atomix/core/counter/AtomicCounter.java
index 29e1704333..9133873b5c 100644
--- a/core/src/main/java/io/atomix/core/counter/AtomicCounter.java
+++ b/core/src/main/java/io/atomix/core/counter/AtomicCounter.java
@@ -15,7 +15,6 @@
*/
package io.atomix.core.counter;
-import io.atomix.primitive.PrimitiveType;
import io.atomix.primitive.SyncPrimitive;
/**
@@ -23,11 +22,6 @@
*/
public interface AtomicCounter extends SyncPrimitive {
- @Override
- default PrimitiveType primitiveType() {
- return AtomicCounterType.instance();
- }
-
/**
* Atomically increment by one and return the updated value.
*
diff --git a/core/src/main/java/io/atomix/core/counter/AtomicCounterBuilder.java b/core/src/main/java/io/atomix/core/counter/AtomicCounterBuilder.java
index 57f5fb1178..92183c9971 100644
--- a/core/src/main/java/io/atomix/core/counter/AtomicCounterBuilder.java
+++ b/core/src/main/java/io/atomix/core/counter/AtomicCounterBuilder.java
@@ -17,13 +17,14 @@
import io.atomix.primitive.DistributedPrimitiveBuilder;
import io.atomix.primitive.PrimitiveManagementService;
+import io.atomix.primitive.PrimitiveType;
/**
* Builder for AtomicCounter.
*/
public abstract class AtomicCounterBuilder
extends DistributedPrimitiveBuilder {
- public AtomicCounterBuilder(String name, AtomicCounterConfig config, PrimitiveManagementService managementService) {
- super(AtomicCounterType.instance(), name, config, managementService);
+ public AtomicCounterBuilder(PrimitiveType type, String name, AtomicCounterConfig config, PrimitiveManagementService managementService) {
+ super(type, name, config, managementService);
}
}
\ No newline at end of file
diff --git a/core/src/main/java/io/atomix/core/counter/AtomicCounterConfig.java b/core/src/main/java/io/atomix/core/counter/AtomicCounterConfig.java
index f7b623e82a..d5c11cbacb 100644
--- a/core/src/main/java/io/atomix/core/counter/AtomicCounterConfig.java
+++ b/core/src/main/java/io/atomix/core/counter/AtomicCounterConfig.java
@@ -15,13 +15,15 @@
*/
package io.atomix.core.counter;
+import io.atomix.core.PrimitiveTypes;
import io.atomix.primitive.PrimitiveConfig;
/**
* Atomic counter configuration.
*/
public class AtomicCounterConfig extends PrimitiveConfig {
- public AtomicCounterConfig() {
- super(AtomicCounterType.instance());
+ @Override
+ public String getType() {
+ return PrimitiveTypes.atomicCounter().name();
}
}
diff --git a/core/src/main/java/io/atomix/core/counter/AtomicCounterType.java b/core/src/main/java/io/atomix/core/counter/AtomicCounterType.java
deleted file mode 100644
index fdf3d6645d..0000000000
--- a/core/src/main/java/io/atomix/core/counter/AtomicCounterType.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package io.atomix.core.counter;
-
-import io.atomix.core.counter.impl.AtomicCounterProxyBuilder;
-import io.atomix.core.counter.impl.AtomicCounterResource;
-import io.atomix.core.counter.impl.AtomicCounterService;
-import io.atomix.primitive.PrimitiveManagementService;
-import io.atomix.primitive.PrimitiveType;
-import io.atomix.primitive.resource.PrimitiveResource;
-import io.atomix.primitive.service.PrimitiveService;
-import io.atomix.primitive.service.ServiceConfig;
-
-import static com.google.common.base.MoreObjects.toStringHelper;
-
-/**
- * Atomic counter primitive type.
- */
-public class AtomicCounterType implements PrimitiveType {
- private static final String NAME = "counter";
-
- /**
- * Returns a new atomic counter type.
- *
- * @return a new atomic counter type
- */
- public static AtomicCounterType instance() {
- return new AtomicCounterType();
- }
-
- @Override
- public String id() {
- return NAME;
- }
-
- @Override
- public PrimitiveService newService(ServiceConfig config) {
- return new AtomicCounterService(config);
- }
-
- @Override
- public PrimitiveResource newResource(AtomicCounter primitive) {
- return new AtomicCounterResource(primitive.async());
- }
-
- @Override
- public AtomicCounterBuilder newPrimitiveBuilder(String name, PrimitiveManagementService managementService) {
- return newPrimitiveBuilder(name, new AtomicCounterConfig(), managementService);
- }
-
- @Override
- public AtomicCounterBuilder newPrimitiveBuilder(String name, AtomicCounterConfig config, PrimitiveManagementService managementService) {
- return new AtomicCounterProxyBuilder(name, config, managementService);
- }
-
- @Override
- public String toString() {
- return toStringHelper(this)
- .add("id", id())
- .toString();
- }
-}
diff --git a/core/src/main/java/io/atomix/core/counter/impl/AtomicCounterProxyBuilder.java b/core/src/main/java/io/atomix/core/counter/impl/AtomicCounterProxyBuilder.java
index 33e6bf9040..3952ac9a03 100644
--- a/core/src/main/java/io/atomix/core/counter/impl/AtomicCounterProxyBuilder.java
+++ b/core/src/main/java/io/atomix/core/counter/impl/AtomicCounterProxyBuilder.java
@@ -19,6 +19,7 @@
import io.atomix.core.counter.AtomicCounterBuilder;
import io.atomix.core.counter.AtomicCounterConfig;
import io.atomix.primitive.PrimitiveManagementService;
+import io.atomix.primitive.PrimitiveType;
import io.atomix.primitive.proxy.PrimitiveProxy;
import io.atomix.primitive.service.ServiceConfig;
@@ -28,8 +29,8 @@
* Atomic counter proxy builder.
*/
public class AtomicCounterProxyBuilder extends AtomicCounterBuilder {
- public AtomicCounterProxyBuilder(String name, AtomicCounterConfig config, PrimitiveManagementService managementService) {
- super(name, config, managementService);
+ public AtomicCounterProxyBuilder(PrimitiveType type, String name, AtomicCounterConfig config, PrimitiveManagementService managementService) {
+ super(type, name, config, managementService);
}
@Override
diff --git a/core/src/main/java/io/atomix/core/election/AsyncLeaderElection.java b/core/src/main/java/io/atomix/core/election/AsyncLeaderElection.java
index 1ad278cd35..0de587ebe4 100644
--- a/core/src/main/java/io/atomix/core/election/AsyncLeaderElection.java
+++ b/core/src/main/java/io/atomix/core/election/AsyncLeaderElection.java
@@ -17,7 +17,6 @@
import io.atomix.primitive.AsyncPrimitive;
import io.atomix.primitive.DistributedPrimitive;
-import io.atomix.primitive.PrimitiveType;
import java.time.Duration;
import java.util.concurrent.CompletableFuture;
@@ -43,11 +42,6 @@
*/
public interface AsyncLeaderElection extends AsyncPrimitive {
- @Override
- default PrimitiveType primitiveType() {
- return LeaderElectionType.instance();
- }
-
/**
* Attempts to become leader for a topic.
*
diff --git a/core/src/main/java/io/atomix/core/election/AsyncLeaderElector.java b/core/src/main/java/io/atomix/core/election/AsyncLeaderElector.java
index d6fd382e88..fc8f41f9ce 100644
--- a/core/src/main/java/io/atomix/core/election/AsyncLeaderElector.java
+++ b/core/src/main/java/io/atomix/core/election/AsyncLeaderElector.java
@@ -17,7 +17,6 @@
import io.atomix.primitive.AsyncPrimitive;
import io.atomix.primitive.DistributedPrimitive;
-import io.atomix.primitive.PrimitiveType;
import java.time.Duration;
import java.util.Map;
@@ -35,11 +34,6 @@
*/
public interface AsyncLeaderElector extends AsyncPrimitive {
- @Override
- default PrimitiveType primitiveType() {
- return LeaderElectorType.instance();
- }
-
/**
* Attempts to become leader for a topic.
*
diff --git a/core/src/main/java/io/atomix/core/election/LeaderElection.java b/core/src/main/java/io/atomix/core/election/LeaderElection.java
index 9a364c1464..1f65931d8f 100644
--- a/core/src/main/java/io/atomix/core/election/LeaderElection.java
+++ b/core/src/main/java/io/atomix/core/election/LeaderElection.java
@@ -15,7 +15,6 @@
*/
package io.atomix.core.election;
-import io.atomix.primitive.PrimitiveType;
import io.atomix.primitive.SyncPrimitive;
/**
@@ -24,11 +23,6 @@
*/
public interface LeaderElection extends SyncPrimitive {
- @Override
- default PrimitiveType primitiveType() {
- return LeaderElectionType.instance();
- }
-
/**
* Attempts to become leader for a topic.
*
diff --git a/core/src/main/java/io/atomix/core/election/LeaderElectionBuilder.java b/core/src/main/java/io/atomix/core/election/LeaderElectionBuilder.java
index ef000b04ec..a601663172 100644
--- a/core/src/main/java/io/atomix/core/election/LeaderElectionBuilder.java
+++ b/core/src/main/java/io/atomix/core/election/LeaderElectionBuilder.java
@@ -18,6 +18,7 @@
import io.atomix.cluster.MemberId;
import io.atomix.primitive.DistributedPrimitiveBuilder;
import io.atomix.primitive.PrimitiveManagementService;
+import io.atomix.primitive.PrimitiveType;
import io.atomix.utils.serializer.KryoNamespace;
import io.atomix.utils.serializer.KryoNamespaces;
import io.atomix.utils.serializer.Serializer;
@@ -29,8 +30,8 @@
public abstract class LeaderElectionBuilder
extends DistributedPrimitiveBuilder, LeaderElectionConfig, LeaderElection> {
- public LeaderElectionBuilder(String name, LeaderElectionConfig config, PrimitiveManagementService managementService) {
- super(LeaderElectionType.instance(), name, config, managementService);
+ public LeaderElectionBuilder(PrimitiveType type, String name, LeaderElectionConfig config, PrimitiveManagementService managementService) {
+ super(type, name, config, managementService);
}
@Override
diff --git a/core/src/main/java/io/atomix/core/election/LeaderElectionConfig.java b/core/src/main/java/io/atomix/core/election/LeaderElectionConfig.java
index 29e036528f..f7045c08bc 100644
--- a/core/src/main/java/io/atomix/core/election/LeaderElectionConfig.java
+++ b/core/src/main/java/io/atomix/core/election/LeaderElectionConfig.java
@@ -15,13 +15,15 @@
*/
package io.atomix.core.election;
+import io.atomix.core.PrimitiveTypes;
import io.atomix.primitive.PrimitiveConfig;
/**
* Leader election configuration.
*/
public class LeaderElectionConfig extends PrimitiveConfig {
- public LeaderElectionConfig() {
- super(LeaderElectionType.instance());
+ @Override
+ public String getType() {
+ return PrimitiveTypes.leaderElection().name();
}
}
diff --git a/core/src/main/java/io/atomix/core/election/LeaderElectionType.java b/core/src/main/java/io/atomix/core/election/LeaderElectionType.java
deleted file mode 100644
index b22cc00eea..0000000000
--- a/core/src/main/java/io/atomix/core/election/LeaderElectionType.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package io.atomix.core.election;
-
-import io.atomix.core.election.impl.LeaderElectionProxyBuilder;
-import io.atomix.core.election.impl.LeaderElectionResource;
-import io.atomix.core.election.impl.LeaderElectionService;
-import io.atomix.primitive.PrimitiveManagementService;
-import io.atomix.primitive.PrimitiveType;
-import io.atomix.primitive.resource.PrimitiveResource;
-import io.atomix.primitive.service.PrimitiveService;
-import io.atomix.primitive.service.ServiceConfig;
-
-import static com.google.common.base.MoreObjects.toStringHelper;
-
-/**
- * Leader elector primitive type.
- */
-public class LeaderElectionType implements PrimitiveType, LeaderElectionConfig, LeaderElection, ServiceConfig> {
- private static final String NAME = "leader-election";
-
- /**
- * Returns a new leader elector type.
- *
- * @param the election candidate type
- * @return a new leader elector type
- */
- public static LeaderElectionType instance() {
- return new LeaderElectionType<>();
- }
-
- @Override
- public String id() {
- return NAME;
- }
-
- @Override
- public PrimitiveService newService(ServiceConfig config) {
- return new LeaderElectionService(config);
- }
-
- @Override
- @SuppressWarnings("unchecked")
- public PrimitiveResource newResource(LeaderElection primitive) {
- return new LeaderElectionResource((AsyncLeaderElection) primitive.async());
- }
-
- @Override
- public LeaderElectionBuilder newPrimitiveBuilder(String name, PrimitiveManagementService managementService) {
- return newPrimitiveBuilder(name, new LeaderElectionConfig(), managementService);
- }
-
- @Override
- public LeaderElectionBuilder newPrimitiveBuilder(String name, LeaderElectionConfig config, PrimitiveManagementService managementService) {
- return new LeaderElectionProxyBuilder<>(name, config, managementService);
- }
-
- @Override
- public String toString() {
- return toStringHelper(this)
- .add("id", id())
- .toString();
- }
-}
diff --git a/core/src/main/java/io/atomix/core/election/LeaderElector.java b/core/src/main/java/io/atomix/core/election/LeaderElector.java
index f1fd721f27..225870219b 100644
--- a/core/src/main/java/io/atomix/core/election/LeaderElector.java
+++ b/core/src/main/java/io/atomix/core/election/LeaderElector.java
@@ -15,7 +15,6 @@
*/
package io.atomix.core.election;
-import io.atomix.primitive.PrimitiveType;
import io.atomix.primitive.SyncPrimitive;
import java.util.Map;
@@ -26,11 +25,6 @@
*/
public interface LeaderElector extends SyncPrimitive {
- @Override
- default PrimitiveType primitiveType() {
- return LeaderElectorType.instance();
- }
-
/**
* Attempts to become leader for a topic.
*
diff --git a/core/src/main/java/io/atomix/core/election/LeaderElectorBuilder.java b/core/src/main/java/io/atomix/core/election/LeaderElectorBuilder.java
index 5ba401990d..f38a3a8f90 100644
--- a/core/src/main/java/io/atomix/core/election/LeaderElectorBuilder.java
+++ b/core/src/main/java/io/atomix/core/election/LeaderElectorBuilder.java
@@ -18,6 +18,7 @@
import io.atomix.cluster.MemberId;
import io.atomix.primitive.DistributedPrimitiveBuilder;
import io.atomix.primitive.PrimitiveManagementService;
+import io.atomix.primitive.PrimitiveType;
import io.atomix.utils.serializer.KryoNamespace;
import io.atomix.utils.serializer.KryoNamespaces;
import io.atomix.utils.serializer.Serializer;
@@ -28,8 +29,8 @@
*/
public abstract class LeaderElectorBuilder
extends DistributedPrimitiveBuilder, LeaderElectorConfig, LeaderElector> {
- public LeaderElectorBuilder(String name, LeaderElectorConfig config, PrimitiveManagementService managementService) {
- super(LeaderElectorType.instance(), name, config, managementService);
+ public LeaderElectorBuilder(PrimitiveType type, String name, LeaderElectorConfig config, PrimitiveManagementService managementService) {
+ super(type, name, config, managementService);
}
@Override
diff --git a/core/src/main/java/io/atomix/core/election/LeaderElectorConfig.java b/core/src/main/java/io/atomix/core/election/LeaderElectorConfig.java
index 1909b1cc32..ae0173cbb4 100644
--- a/core/src/main/java/io/atomix/core/election/LeaderElectorConfig.java
+++ b/core/src/main/java/io/atomix/core/election/LeaderElectorConfig.java
@@ -15,13 +15,15 @@
*/
package io.atomix.core.election;
+import io.atomix.core.PrimitiveTypes;
import io.atomix.primitive.PrimitiveConfig;
/**
* Leader elector configuration.
*/
public class LeaderElectorConfig extends PrimitiveConfig {
- public LeaderElectorConfig() {
- super(LeaderElectorType.instance());
+ @Override
+ public String getType() {
+ return PrimitiveTypes.leaderElector().name();
}
}
diff --git a/core/src/main/java/io/atomix/core/election/LeaderElectorType.java b/core/src/main/java/io/atomix/core/election/LeaderElectorType.java
deleted file mode 100644
index e62476ce80..0000000000
--- a/core/src/main/java/io/atomix/core/election/LeaderElectorType.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package io.atomix.core.election;
-
-import io.atomix.core.election.impl.LeaderElectorProxyBuilder;
-import io.atomix.core.election.impl.LeaderElectorService;
-import io.atomix.primitive.PrimitiveManagementService;
-import io.atomix.primitive.PrimitiveType;
-import io.atomix.primitive.service.PrimitiveService;
-import io.atomix.primitive.service.ServiceConfig;
-
-import static com.google.common.base.MoreObjects.toStringHelper;
-
-/**
- * Leader elector primitive type.
- */
-public class LeaderElectorType implements PrimitiveType, LeaderElectorConfig, LeaderElector, ServiceConfig> {
- private static final String NAME = "leader-elector";
-
- /**
- * Returns a new leader elector type.
- *
- * @param the election candidate type
- * @return a new leader elector type
- */
- public static LeaderElectorType instance() {
- return new LeaderElectorType<>();
- }
-
- @Override
- public String id() {
- return NAME;
- }
-
- @Override
- public PrimitiveService newService(ServiceConfig config) {
- return new LeaderElectorService(config);
- }
-
- @Override
- public LeaderElectorBuilder newPrimitiveBuilder(String name, PrimitiveManagementService managementService) {
- return newPrimitiveBuilder(name, new LeaderElectorConfig(), managementService);
- }
-
- @Override
- public LeaderElectorBuilder newPrimitiveBuilder(String name, LeaderElectorConfig config, PrimitiveManagementService managementService) {
- return new LeaderElectorProxyBuilder<>(name, config, managementService);
- }
-
- @Override
- public String toString() {
- return toStringHelper(this)
- .add("id", id())
- .toString();
- }
-}
diff --git a/core/src/main/java/io/atomix/core/election/impl/LeaderElectionProxyBuilder.java b/core/src/main/java/io/atomix/core/election/impl/LeaderElectionProxyBuilder.java
index 06ac1e34ee..b512115136 100644
--- a/core/src/main/java/io/atomix/core/election/impl/LeaderElectionProxyBuilder.java
+++ b/core/src/main/java/io/atomix/core/election/impl/LeaderElectionProxyBuilder.java
@@ -19,6 +19,7 @@
import io.atomix.core.election.LeaderElectionBuilder;
import io.atomix.core.election.LeaderElectionConfig;
import io.atomix.primitive.PrimitiveManagementService;
+import io.atomix.primitive.PrimitiveType;
import io.atomix.primitive.proxy.PrimitiveProxy;
import io.atomix.primitive.service.ServiceConfig;
import io.atomix.utils.serializer.Serializer;
@@ -29,8 +30,8 @@
* Default implementation of {@code LeaderElectorBuilder}.
*/
public class LeaderElectionProxyBuilder extends LeaderElectionBuilder {
- public LeaderElectionProxyBuilder(String name, LeaderElectionConfig config, PrimitiveManagementService managementService) {
- super(name, config, managementService);
+ public LeaderElectionProxyBuilder(PrimitiveType type, String name, LeaderElectionConfig config, PrimitiveManagementService managementService) {
+ super(type, name, config, managementService);
}
@Override
diff --git a/core/src/main/java/io/atomix/core/election/impl/LeaderElectorProxyBuilder.java b/core/src/main/java/io/atomix/core/election/impl/LeaderElectorProxyBuilder.java
index 24cd5c172f..6c00b83da8 100644
--- a/core/src/main/java/io/atomix/core/election/impl/LeaderElectorProxyBuilder.java
+++ b/core/src/main/java/io/atomix/core/election/impl/LeaderElectorProxyBuilder.java
@@ -19,6 +19,7 @@
import io.atomix.core.election.LeaderElectorBuilder;
import io.atomix.core.election.LeaderElectorConfig;
import io.atomix.primitive.PrimitiveManagementService;
+import io.atomix.primitive.PrimitiveType;
import io.atomix.primitive.proxy.PrimitiveProxy;
import io.atomix.primitive.service.ServiceConfig;
import io.atomix.utils.serializer.Serializer;
@@ -29,8 +30,8 @@
* Default implementation of {@code LeaderElectorBuilder}.
*/
public class LeaderElectorProxyBuilder extends LeaderElectorBuilder {
- public LeaderElectorProxyBuilder(String name, LeaderElectorConfig config, PrimitiveManagementService managementService) {
- super(name, config, managementService);
+ public LeaderElectorProxyBuilder(PrimitiveType type, String name, LeaderElectorConfig config, PrimitiveManagementService managementService) {
+ super(type, name, config, managementService);
}
@Override
diff --git a/core/src/main/java/io/atomix/core/election/impl/TranscodingAsyncLeaderElection.java b/core/src/main/java/io/atomix/core/election/impl/TranscodingAsyncLeaderElection.java
index e012346668..864de4e2c8 100644
--- a/core/src/main/java/io/atomix/core/election/impl/TranscodingAsyncLeaderElection.java
+++ b/core/src/main/java/io/atomix/core/election/impl/TranscodingAsyncLeaderElection.java
@@ -16,12 +16,12 @@
package io.atomix.core.election.impl;
import com.google.common.collect.Maps;
-
import io.atomix.core.election.AsyncLeaderElection;
import io.atomix.core.election.LeaderElection;
import io.atomix.core.election.Leadership;
import io.atomix.core.election.LeadershipEvent;
import io.atomix.core.election.LeadershipEventListener;
+import io.atomix.primitive.PrimitiveType;
import java.time.Duration;
import java.util.Map;
@@ -51,6 +51,11 @@ public String name() {
return backingElection.name();
}
+ @Override
+ public PrimitiveType primitiveType() {
+ return backingElection.primitiveType();
+ }
+
@Override
public CompletableFuture> run(V1 identifier) {
return backingElection.run(valueEncoder.apply(identifier)).thenApply(l -> l.map(valueDecoder));
diff --git a/core/src/main/java/io/atomix/core/election/impl/TranscodingAsyncLeaderElector.java b/core/src/main/java/io/atomix/core/election/impl/TranscodingAsyncLeaderElector.java
index 4fe5d7d6c5..c5ec6b7954 100644
--- a/core/src/main/java/io/atomix/core/election/impl/TranscodingAsyncLeaderElector.java
+++ b/core/src/main/java/io/atomix/core/election/impl/TranscodingAsyncLeaderElector.java
@@ -16,12 +16,12 @@
package io.atomix.core.election.impl;
import com.google.common.collect.Maps;
-
import io.atomix.core.election.AsyncLeaderElector;
import io.atomix.core.election.LeaderElector;
import io.atomix.core.election.Leadership;
import io.atomix.core.election.LeadershipEvent;
import io.atomix.core.election.LeadershipEventListener;
+import io.atomix.primitive.PrimitiveType;
import java.time.Duration;
import java.util.Map;
@@ -51,6 +51,11 @@ public String name() {
return backingElector.name();
}
+ @Override
+ public PrimitiveType primitiveType() {
+ return backingElector.primitiveType();
+ }
+
@Override
public CompletableFuture> run(String topic, V1 identifier) {
return backingElector.run(topic, valueEncoder.apply(identifier))
diff --git a/core/src/main/java/io/atomix/core/generator/AsyncAtomicIdGenerator.java b/core/src/main/java/io/atomix/core/generator/AsyncAtomicIdGenerator.java
index f9b99aec3f..f100c22d07 100644
--- a/core/src/main/java/io/atomix/core/generator/AsyncAtomicIdGenerator.java
+++ b/core/src/main/java/io/atomix/core/generator/AsyncAtomicIdGenerator.java
@@ -17,7 +17,6 @@
import io.atomix.primitive.AsyncPrimitive;
import io.atomix.primitive.DistributedPrimitive;
-import io.atomix.primitive.PrimitiveType;
import java.time.Duration;
import java.util.concurrent.CompletableFuture;
@@ -27,11 +26,6 @@
*/
public interface AsyncAtomicIdGenerator extends AsyncPrimitive {
- @Override
- default PrimitiveType primitiveType() {
- return AtomicIdGeneratorType.instance();
- }
-
/**
* Returns the next globally unique numeric ID.
*
diff --git a/core/src/main/java/io/atomix/core/generator/AtomicIdGenerator.java b/core/src/main/java/io/atomix/core/generator/AtomicIdGenerator.java
index 17bba3b2b9..19034ef69d 100644
--- a/core/src/main/java/io/atomix/core/generator/AtomicIdGenerator.java
+++ b/core/src/main/java/io/atomix/core/generator/AtomicIdGenerator.java
@@ -15,7 +15,6 @@
*/
package io.atomix.core.generator;
-import io.atomix.primitive.PrimitiveType;
import io.atomix.primitive.SyncPrimitive;
/**
@@ -23,11 +22,6 @@
*/
public interface AtomicIdGenerator extends SyncPrimitive {
- @Override
- default PrimitiveType primitiveType() {
- return AtomicIdGeneratorType.instance();
- }
-
/**
* Gets the next globally unique numeric identifier.
*
diff --git a/core/src/main/java/io/atomix/core/generator/AtomicIdGeneratorBuilder.java b/core/src/main/java/io/atomix/core/generator/AtomicIdGeneratorBuilder.java
index 7d9f5a320f..61b28a4fea 100644
--- a/core/src/main/java/io/atomix/core/generator/AtomicIdGeneratorBuilder.java
+++ b/core/src/main/java/io/atomix/core/generator/AtomicIdGeneratorBuilder.java
@@ -17,13 +17,14 @@
import io.atomix.primitive.DistributedPrimitiveBuilder;
import io.atomix.primitive.PrimitiveManagementService;
+import io.atomix.primitive.PrimitiveType;
/**
* Builder for AtomicIdGenerator.
*/
public abstract class AtomicIdGeneratorBuilder
extends DistributedPrimitiveBuilder {
- protected AtomicIdGeneratorBuilder(String name, AtomicIdGeneratorConfig config, PrimitiveManagementService managementService) {
- super(AtomicIdGeneratorType.instance(), name, config, managementService);
+ protected AtomicIdGeneratorBuilder(PrimitiveType type, String name, AtomicIdGeneratorConfig config, PrimitiveManagementService managementService) {
+ super(type, name, config, managementService);
}
}
\ No newline at end of file
diff --git a/core/src/main/java/io/atomix/core/generator/AtomicIdGeneratorConfig.java b/core/src/main/java/io/atomix/core/generator/AtomicIdGeneratorConfig.java
index 0c76eb4df0..e1147c8796 100644
--- a/core/src/main/java/io/atomix/core/generator/AtomicIdGeneratorConfig.java
+++ b/core/src/main/java/io/atomix/core/generator/AtomicIdGeneratorConfig.java
@@ -15,13 +15,15 @@
*/
package io.atomix.core.generator;
+import io.atomix.core.PrimitiveTypes;
import io.atomix.primitive.PrimitiveConfig;
/**
* ID generator configuration.
*/
public class AtomicIdGeneratorConfig extends PrimitiveConfig {
- public AtomicIdGeneratorConfig() {
- super(AtomicIdGeneratorType.instance());
+ @Override
+ public String getType() {
+ return PrimitiveTypes.atomicIdGenerator().name();
}
}
diff --git a/core/src/main/java/io/atomix/core/generator/AtomicIdGeneratorType.java b/core/src/main/java/io/atomix/core/generator/AtomicIdGeneratorType.java
deleted file mode 100644
index bba94a65ad..0000000000
--- a/core/src/main/java/io/atomix/core/generator/AtomicIdGeneratorType.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright 2017-present Open Networking Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package io.atomix.core.generator;
-
-import io.atomix.core.counter.impl.AtomicCounterService;
-import io.atomix.core.generator.impl.AtomicIdGeneratorResource;
-import io.atomix.core.generator.impl.DelegatingAtomicIdGeneratorBuilder;
-import io.atomix.primitive.PrimitiveManagementService;
-import io.atomix.primitive.PrimitiveType;
-import io.atomix.primitive.resource.PrimitiveResource;
-import io.atomix.primitive.service.PrimitiveService;
-import io.atomix.primitive.service.ServiceConfig;
-
-import static com.google.common.base.MoreObjects.toStringHelper;
-
-/**
- * Atomic ID generator primitive type.
- */
-public class AtomicIdGeneratorType implements PrimitiveType {
- private static final String NAME = "id-generator";
-
- /**
- * Returns a new atomic ID generator type.
- *
- * @return a new atomic ID generator type
- */
- public static AtomicIdGeneratorType instance() {
- return new AtomicIdGeneratorType();
- }
-
- @Override
- public String id() {
- return NAME;
- }
-
- @Override
- public PrimitiveService newService(ServiceConfig config) {
- return new AtomicCounterService(config);
- }
-
- @Override
- public PrimitiveResource newResource(AtomicIdGenerator primitive) {
- return new AtomicIdGeneratorResource(primitive.async());
- }
-
- @Override
- public AtomicIdGeneratorBuilder newPrimitiveBuilder(String name, PrimitiveManagementService managementService) {
- return newPrimitiveBuilder(name, new AtomicIdGeneratorConfig(), managementService);
- }
-
- @Override
- public AtomicIdGeneratorBuilder newPrimitiveBuilder(String name, AtomicIdGeneratorConfig config, PrimitiveManagementService managementService) {
- return new DelegatingAtomicIdGeneratorBuilder(name, config, managementService);
- }
-
- @Override
- public String toString() {
- return toStringHelper(this)
- .add("id", id())
- .toString();
- }
-}
diff --git a/core/src/main/java/io/atomix/core/generator/impl/DelegatingAtomicIdGenerator.java b/core/src/main/java/io/atomix/core/generator/impl/DelegatingAtomicIdGenerator.java
index ca92da4349..cd3a1d8edb 100644
--- a/core/src/main/java/io/atomix/core/generator/impl/DelegatingAtomicIdGenerator.java
+++ b/core/src/main/java/io/atomix/core/generator/impl/DelegatingAtomicIdGenerator.java
@@ -18,6 +18,7 @@
import io.atomix.core.counter.AsyncAtomicCounter;
import io.atomix.core.generator.AsyncAtomicIdGenerator;
import io.atomix.core.generator.AtomicIdGenerator;
+import io.atomix.primitive.PrimitiveType;
import java.time.Duration;
import java.util.concurrent.CompletableFuture;
@@ -50,6 +51,11 @@ public String name() {
return counter.name();
}
+ @Override
+ public PrimitiveType primitiveType() {
+ return counter.primitiveType();
+ }
+
@Override
public synchronized CompletableFuture nextId() {
long nextDelta = delta.incrementAndGet();
diff --git a/core/src/main/java/io/atomix/core/generator/impl/DelegatingAtomicIdGeneratorBuilder.java b/core/src/main/java/io/atomix/core/generator/impl/DelegatingAtomicIdGeneratorBuilder.java
index 4a968df3a5..3e856bee9c 100644
--- a/core/src/main/java/io/atomix/core/generator/impl/DelegatingAtomicIdGeneratorBuilder.java
+++ b/core/src/main/java/io/atomix/core/generator/impl/DelegatingAtomicIdGeneratorBuilder.java
@@ -20,6 +20,7 @@
import io.atomix.core.generator.AtomicIdGeneratorBuilder;
import io.atomix.core.generator.AtomicIdGeneratorConfig;
import io.atomix.primitive.PrimitiveManagementService;
+import io.atomix.primitive.PrimitiveType;
import io.atomix.primitive.proxy.PrimitiveProxy;
import io.atomix.primitive.service.ServiceConfig;
@@ -29,8 +30,8 @@
* Default implementation of AtomicIdGeneratorBuilder.
*/
public class DelegatingAtomicIdGeneratorBuilder extends AtomicIdGeneratorBuilder {
- public DelegatingAtomicIdGeneratorBuilder(String name, AtomicIdGeneratorConfig config, PrimitiveManagementService managementService) {
- super(name, config, managementService);
+ public DelegatingAtomicIdGeneratorBuilder(PrimitiveType type, String name, AtomicIdGeneratorConfig config, PrimitiveManagementService managementService) {
+ super(type, name, config, managementService);
}
@Override
diff --git a/core/src/main/java/io/atomix/core/impl/CorePrimitiveManagementService.java b/core/src/main/java/io/atomix/core/impl/CorePrimitiveManagementService.java
index b9a0d78b73..0921060747 100644
--- a/core/src/main/java/io/atomix/core/impl/CorePrimitiveManagementService.java
+++ b/core/src/main/java/io/atomix/core/impl/CorePrimitiveManagementService.java
@@ -16,11 +16,13 @@
package io.atomix.core.impl;
import io.atomix.cluster.ClusterMembershipService;
-import io.atomix.cluster.messaging.ClusterEventingService;
import io.atomix.cluster.messaging.ClusterCommunicationService;
+import io.atomix.cluster.messaging.ClusterEventingService;
import io.atomix.primitive.PrimitiveManagementService;
import io.atomix.primitive.PrimitiveRegistry;
+import io.atomix.primitive.PrimitiveTypeRegistry;
import io.atomix.primitive.partition.PartitionService;
+import io.atomix.primitive.protocol.PrimitiveProtocolTypeRegistry;
import java.util.concurrent.ScheduledExecutorService;
@@ -34,7 +36,8 @@ public class CorePrimitiveManagementService implements PrimitiveManagementServic
private final ClusterEventingService eventService;
private final PartitionService partitionService;
private final PrimitiveRegistry primitiveRegistry;
- private final ClassLoader classLoader;
+ private final PrimitiveTypeRegistry primitiveTypeRegistry;
+ private final PrimitiveProtocolTypeRegistry protocolTypeRegistry;
public CorePrimitiveManagementService(
ScheduledExecutorService executorService,
@@ -43,14 +46,16 @@ public CorePrimitiveManagementService(
ClusterEventingService eventService,
PartitionService partitionService,
PrimitiveRegistry primitiveRegistry,
- ClassLoader classLoader) {
+ PrimitiveTypeRegistry primitiveTypeRegistry,
+ PrimitiveProtocolTypeRegistry protocolTypeRegistry) {
this.executorService = executorService;
this.membershipService = membershipService;
this.communicationService = communicationService;
this.eventService = eventService;
this.partitionService = partitionService;
this.primitiveRegistry = primitiveRegistry;
- this.classLoader = classLoader;
+ this.primitiveTypeRegistry = primitiveTypeRegistry;
+ this.protocolTypeRegistry = protocolTypeRegistry;
}
@Override
@@ -84,7 +89,12 @@ public PrimitiveRegistry getPrimitiveRegistry() {
}
@Override
- public ClassLoader getClassLoader() {
- return classLoader;
+ public PrimitiveTypeRegistry getPrimitiveTypeRegistry() {
+ return primitiveTypeRegistry;
+ }
+
+ @Override
+ public PrimitiveProtocolTypeRegistry getProtocolTypeRegistry() {
+ return protocolTypeRegistry;
}
}
diff --git a/core/src/main/java/io/atomix/core/impl/CorePrimitiveRegistry.java b/core/src/main/java/io/atomix/core/impl/CorePrimitiveRegistry.java
index c8bd521d15..0b6132e8d3 100644
--- a/core/src/main/java/io/atomix/core/impl/CorePrimitiveRegistry.java
+++ b/core/src/main/java/io/atomix/core/impl/CorePrimitiveRegistry.java
@@ -15,8 +15,8 @@
*/
package io.atomix.core.impl;
+import io.atomix.core.PrimitiveTypes;
import io.atomix.core.map.AsyncConsistentMap;
-import io.atomix.core.map.ConsistentMapType;
import io.atomix.core.map.impl.ConsistentMapProxy;
import io.atomix.core.map.impl.TranscodingAsyncConsistentMap;
import io.atomix.primitive.DistributedPrimitive;
@@ -25,7 +25,7 @@
import io.atomix.primitive.PrimitiveInfo;
import io.atomix.primitive.PrimitiveRegistry;
import io.atomix.primitive.PrimitiveType;
-import io.atomix.primitive.PrimitiveTypes;
+import io.atomix.primitive.PrimitiveTypeRegistry;
import io.atomix.primitive.partition.PartitionService;
import io.atomix.primitive.protocol.PrimitiveProtocol;
import io.atomix.primitive.proxy.PrimitiveProxy;
@@ -50,23 +50,23 @@ public class CorePrimitiveRegistry implements ManagedPrimitiveRegistry {
private static final Serializer SERIALIZER = Serializer.using(KryoNamespaces.BASIC);
private final PartitionService partitionService;
- private final ClassLoader classLoader;
+ private final PrimitiveTypeRegistry primitiveTypeRegistry;
private final AtomicBoolean started = new AtomicBoolean();
private AsyncConsistentMap primitives;
- public CorePrimitiveRegistry(PartitionService partitionService, ClassLoader classLoader) {
+ public CorePrimitiveRegistry(PartitionService partitionService, PrimitiveTypeRegistry primitiveTypeRegistry) {
this.partitionService = checkNotNull(partitionService);
- this.classLoader = checkNotNull(classLoader);
+ this.primitiveTypeRegistry = checkNotNull(primitiveTypeRegistry);
}
@Override
public CompletableFuture createPrimitive(String name, PrimitiveType type) {
PrimitiveInfo info = new PrimitiveInfo(name, type);
CompletableFuture future = new CompletableFuture<>();
- primitives.putIfAbsent(name, type.id()).whenComplete((result, error) -> {
+ primitives.putIfAbsent(name, type.name()).whenComplete((result, error) -> {
if (error != null) {
future.completeExceptionally(error);
- } else if (result == null || result.value().equals(type.id())) {
+ } else if (result == null || result.value().equals(type.name())) {
future.complete(info);
} else {
future.completeExceptionally(new PrimitiveException("A different primitive with the same name already exists"));
@@ -81,7 +81,7 @@ public Collection getPrimitives() {
return primitives.entrySet()
.get(DistributedPrimitive.DEFAULT_OPERATION_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS)
.stream()
- .map(entry -> new PrimitiveInfo(entry.getKey(), PrimitiveTypes.getPrimitiveType(entry.getValue().value(), classLoader)))
+ .map(entry -> new PrimitiveInfo(entry.getKey(), primitiveTypeRegistry.getPrimitiveType(entry.getValue().value())))
.collect(Collectors.toList());
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
@@ -105,7 +105,7 @@ public Collection getPrimitives(PrimitiveType primitiveType) {
public PrimitiveInfo getPrimitive(String name) {
try {
return primitives.get(name)
- .thenApply(value -> value == null ? null : value.map(type -> new PrimitiveInfo(name, PrimitiveTypes.getPrimitiveType(type, classLoader))).value())
+ .thenApply(value -> value == null ? null : value.map(type -> new PrimitiveInfo(name, primitiveTypeRegistry.getPrimitiveType(type))).value())
.get(DistributedPrimitive.DEFAULT_OPERATION_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
@@ -123,7 +123,7 @@ public CompletableFuture start() {
PrimitiveProtocol protocol = partitionService.getSystemPartitionGroup().newProtocol();
PrimitiveProxy proxy = protocol.newProxy(
"primitives",
- ConsistentMapType.instance(),
+ primitiveTypeRegistry.getPrimitiveType(PrimitiveTypes.consistentMap().name()),
new ServiceConfig(),
partitionService);
return proxy.connect()
diff --git a/core/src/main/java/io/atomix/core/impl/CorePrimitivesService.java b/core/src/main/java/io/atomix/core/impl/CorePrimitivesService.java
index e9089109cf..cd1f2d0e58 100644
--- a/core/src/main/java/io/atomix/core/impl/CorePrimitivesService.java
+++ b/core/src/main/java/io/atomix/core/impl/CorePrimitivesService.java
@@ -18,43 +18,31 @@
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import io.atomix.cluster.ClusterMembershipService;
-import io.atomix.cluster.messaging.ClusterEventingService;
import io.atomix.cluster.messaging.ClusterCommunicationService;
+import io.atomix.cluster.messaging.ClusterEventingService;
import io.atomix.core.AtomixConfig;
import io.atomix.core.ManagedPrimitivesService;
+import io.atomix.core.PrimitiveTypes;
import io.atomix.core.PrimitivesService;
import io.atomix.core.counter.AtomicCounter;
-import io.atomix.core.counter.AtomicCounterType;
import io.atomix.core.election.LeaderElection;
-import io.atomix.core.election.LeaderElectionType;
import io.atomix.core.election.LeaderElector;
-import io.atomix.core.election.LeaderElectorType;
import io.atomix.core.generator.AtomicIdGenerator;
-import io.atomix.core.generator.AtomicIdGeneratorType;
import io.atomix.core.lock.DistributedLock;
-import io.atomix.core.lock.DistributedLockType;
import io.atomix.core.map.AtomicCounterMap;
-import io.atomix.core.map.AtomicCounterMapType;
import io.atomix.core.map.ConsistentMap;
-import io.atomix.core.map.ConsistentMapType;
import io.atomix.core.map.ConsistentTreeMap;
-import io.atomix.core.map.ConsistentTreeMapType;
import io.atomix.core.multimap.ConsistentMultimap;
-import io.atomix.core.multimap.ConsistentMultimapType;
import io.atomix.core.queue.WorkQueue;
-import io.atomix.core.queue.WorkQueueType;
+import io.atomix.core.registry.RegistryService;
import io.atomix.core.semaphore.DistributedSemaphore;
-import io.atomix.core.semaphore.DistributedSemaphoreType;
import io.atomix.core.set.DistributedSet;
-import io.atomix.core.set.DistributedSetType;
import io.atomix.core.transaction.ManagedTransactionService;
import io.atomix.core.transaction.TransactionBuilder;
import io.atomix.core.transaction.TransactionConfig;
import io.atomix.core.transaction.impl.DefaultTransactionBuilder;
import io.atomix.core.tree.DocumentTree;
-import io.atomix.core.tree.DocumentTreeType;
import io.atomix.core.value.AtomicValue;
-import io.atomix.core.value.AtomicValueType;
import io.atomix.primitive.DistributedPrimitive;
import io.atomix.primitive.DistributedPrimitiveBuilder;
import io.atomix.primitive.ManagedPrimitiveRegistry;
@@ -97,9 +85,9 @@ public CorePrimitivesService(
ClusterCommunicationService communicationService,
ClusterEventingService eventService,
PartitionService partitionService,
- AtomixConfig config,
- ClassLoader classLoader) {
- this.primitiveRegistry = new CorePrimitiveRegistry(partitionService, classLoader);
+ RegistryService registryService,
+ AtomixConfig config) {
+ this.primitiveRegistry = new CorePrimitiveRegistry(partitionService, registryService.primitiveTypes());
this.managementService = new CorePrimitiveManagementService(
executorService,
membershipService,
@@ -107,7 +95,8 @@ public CorePrimitivesService(
eventService,
partitionService,
primitiveRegistry,
- classLoader);
+ registryService.primitiveTypes(),
+ registryService.protocolTypes());
this.transactionService = new CoreTransactionService(managementService);
this.config = checkNotNull(config);
}
@@ -119,78 +108,78 @@ public TransactionBuilder transactionBuilder(String name) {
@Override
public ConsistentMap getConsistentMap(String name) {
- return getPrimitive(name, ConsistentMapType.instance(), config.getPrimitive(name));
+ return getPrimitive(name, PrimitiveTypes.consistentMap(), config.getPrimitive(name));
}
@Override
public DocumentTree getDocumentTree(String name) {
- return getPrimitive(name, DocumentTreeType.instance(), config.getPrimitive(name));
+ return getPrimitive(name, PrimitiveTypes.documentTree(), config.getPrimitive(name));
}
@Override
public ConsistentTreeMap getTreeMap(String name) {
- return getPrimitive(name, ConsistentTreeMapType.instance(), config.getPrimitive(name));
+ return getPrimitive(name, PrimitiveTypes.consistentTreeMap(), config.getPrimitive(name));
}
@Override
public ConsistentMultimap getConsistentMultimap(String name) {
- return getPrimitive(name, ConsistentMultimapType.instance(), config.getPrimitive(name));
+ return getPrimitive(name, PrimitiveTypes.consistentMultimap(), config.getPrimitive(name));
}
@Override
public AtomicCounterMap getAtomicCounterMap(String name) {
- return getPrimitive(name, AtomicCounterMapType.instance(), config.getPrimitive(name));
+ return getPrimitive(name, PrimitiveTypes.atomicCounterMap(), config.getPrimitive(name));
}
@Override
public DistributedSet getSet(String name) {
- return getPrimitive(name, DistributedSetType.instance(), config.getPrimitive(name));
+ return getPrimitive(name, PrimitiveTypes.set(), config.getPrimitive(name));
}
@Override
public AtomicCounter getAtomicCounter(String name) {
- return getPrimitive(name, AtomicCounterType.instance(), config.getPrimitive(name));
+ return getPrimitive(name, PrimitiveTypes.atomicCounter(), config.getPrimitive(name));
}
@Override
public AtomicIdGenerator getAtomicIdGenerator(String name) {
- return getPrimitive(name, AtomicIdGeneratorType.instance(), config.getPrimitive(name));
+ return getPrimitive(name, PrimitiveTypes.atomicIdGenerator(), config.getPrimitive(name));
}
@Override
public AtomicValue getAtomicValue(String name) {
- return getPrimitive(name, AtomicValueType.instance(), config.getPrimitive(name));
+ return getPrimitive(name, PrimitiveTypes.atomicValue(), config.getPrimitive(name));
}
@Override
public LeaderElection getLeaderElection(String name) {
- return getPrimitive(name, LeaderElectionType.instance(), config.getPrimitive(name));
+ return getPrimitive(name, PrimitiveTypes.leaderElection(), config.getPrimitive(name));
}
@Override
public LeaderElector getLeaderElector(String name) {
- return getPrimitive(name, LeaderElectorType.instance(), config.getPrimitive(name));
+ return getPrimitive(name, PrimitiveTypes.leaderElector(), config.getPrimitive(name));
}
@Override
public DistributedLock getLock(String name) {
- return getPrimitive(name, DistributedLockType.instance(), config.getPrimitive(name));
+ return getPrimitive(name, PrimitiveTypes.lock(), config.getPrimitive(name));
}
@Override
public DistributedSemaphore getSemaphore(String name) {
- return getPrimitive(name, DistributedSemaphoreType.instance(), config.getPrimitive(name));
+ return getPrimitive(name, PrimitiveTypes.semaphore(), config.getPrimitive(name));
}
@Override
public WorkQueue getWorkQueue(String name) {
- return getPrimitive(name, WorkQueueType.instance(), config.getPrimitive(name));
+ return getPrimitive(name, PrimitiveTypes.workQueue(), config.getPrimitive(name));
}
@Override
public , C extends PrimitiveConfig