@SuppressWarnings("unchecked")
public ClusterTierActiveEntity(ServiceRegistry registry, ClusterTierEntityConfiguration entityConfiguration, KeySegmentMapper defaultMapper) throws ConfigurationException {
if (entityConfiguration == null) {
throw new ConfigurationException("ClusteredStoreEntityConfiguration cannot be null");
}
storeIdentifier = entityConfiguration.getStoreIdentifier();
configuration = entityConfiguration.getConfiguration();
managerIdentifier = entityConfiguration.getManagerIdentifier();
try {
clientCommunicator = registry.getService(new CommunicatorServiceConfiguration());
stateService = registry.getService(new EhcacheStoreStateServiceConfig(entityConfiguration.getManagerIdentifier(), defaultMapper));
entityMessenger = registry.getService(new BasicServiceConfiguration<>(IEntityMessenger.class));
messageHandler = registry.getService(new OOOMessageHandlerConfiguration<>(managerIdentifier + "###" + storeIdentifier,
ClusterTierActiveEntity::isTrackedMessage, defaultMapper.getSegments() + 1, new MessageToTrackerSegmentFunction(clusterTierConcurrency(defaultMapper))));
} catch (ServiceException e) {
throw new ConfigurationException("Unable to retrieve service: " + e.getMessage());
}
if (entityMessenger == null) {
throw new AssertionError("Server failed to retrieve IEntityMessenger service.");
}
management = new ClusterTierManagement(registry, stateService, true, storeIdentifier, entityConfiguration.getManagerIdentifier());
chainCompactionLimit = Integer.getInteger(CHAIN_COMPACTION_THRESHOLD_PROP, DEFAULT_CHAIN_COMPACTION_THRESHOLD);
if (configuration.isLoaderWriterConfigured()) {
lockManager = new LockManagerImpl();
} else {
lockManager = new NoopLockManager();
}
}