org.jboss.aerogear.unifiedpush.message.configuration.SenderConfiguration Maven / Gradle / Ivy
/**
* JBoss, Home of Professional Open Source
* Copyright Red Hat, Inc., and individual contributors.
*
* 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 org.jboss.aerogear.unifiedpush.message.configuration;
import org.jboss.aerogear.unifiedpush.api.validation.DeviceTokenValidator;
import org.jboss.aerogear.unifiedpush.message.sender.PushNotificationSender;
/**
* Push Network specific configuration for UPS message sending mechanism.
*
* Allows to configure how are messages loaded and treated inside of UPS messaging system.
*
* Configurations for Push Networks are loaded by {@link SenderConfigurationProvider}.
*
* @see SenderConfigurationProvider
*/
public class SenderConfiguration {
private int batchesToLoad;
private int batchSize;
public SenderConfiguration() {
}
/**
* Creates a new configuration with the configuration values provided
*
* @param batchesToLoad specifies how many batches should be loaded in one transaction (see {@link #batchesToLoad()}
* @param batchSize specifies how many devices will be loaded and delivered in one batch (see {@link #batchSize()}
*/
public SenderConfiguration(int batchesToLoad, int batchSize) {
this.batchesToLoad = batchesToLoad;
this.batchSize = batchSize;
}
/**
* Specifies how many batches should be loaded in one token-loading transaction.
*
* UPS splits device tokens loaded from database into batches and loads at most {@link #batchesToLoad()} in one transaction.
*
* This avoids long transactions and enables fail-over procedures.
*
* @return the number of batches to load
*/
public int batchesToLoad() {
return batchesToLoad;
}
void setBatchesToLoad(int batchesToLoad) {
this.batchesToLoad = batchesToLoad;
}
/**
* Batch size specifies how many devices will be loaded and delivered in one batch.
*
* One batch is a unit of work for the final {@link PushNotificationSender} implementation.
*
* Smaller batches allows better fail-over, but can be unfriendly to the Push Network, since it has to allow UPS establish more connections.
*
* Larger batches allows for more effective communication, however you must be aware of memory limits configured for UPS message queues.
*
* One device token theoretically requires 2 * (upper-bound limit of its length) bytes of memory.
* The minimum or maximum lengths of specific push networks are partially listed in {@link DeviceTokenValidator}.
*
* @return the size (number of device tokens) of the batch
*/
public int batchSize() {
return batchSize;
}
void setBatchSize(int batchSize) {
this.batchSize = batchSize;
}
/**
* This is a derived property, computed as a product of {@link #batchesToLoad()} and {@link #batchSize()}.
*
* It configures how many tokens will be loaded in one token-loading transaction.
*
* @return int value, computed as a product of {@link #batchesToLoad()} and {@link #batchSize()}.
*/
public int tokensToLoad() {
return batchesToLoad * batchSize;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy