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

org.granite.gravity.GravityConfig Maven / Gradle / Ivy

The newest version!
/**
 *   GRANITE DATA SERVICES
 *   Copyright (C) 2006-2014 GRANITE DATA SERVICES S.A.S.
 *
 *   This file is part of the Granite Data Services Platform.
 *
 *   Granite Data Services is free software; you can redistribute it and/or
 *   modify it under the terms of the GNU Lesser General Public
 *   License as published by the Free Software Foundation; either
 *   version 2.1 of the License, or (at your option) any later version.
 *
 *   Granite Data Services is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
 *   General Public License for more details.
 *
 *   You should have received a copy of the GNU Lesser General Public
 *   License along with this library; if not, write to the Free Software
 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
 *   USA, or see .
 */
package org.granite.gravity;

import javax.servlet.ServletContext;

import org.granite.config.GraniteConfig;
import org.granite.config.GraniteConfigReloadListener;
import org.granite.util.XMap;

/**
 * @author Franck WOLFF
 */
public class GravityConfig implements GraniteConfigReloadListener {

	public static final String DEFAULT_GRAVITY_FACTORY = DefaultGravityFactory.class.getName();
	public static final long DEFAULT_CHANNEL_IDLE_TIMEOUT_MILLIS = 30 * 60000L;
	public static final long DEFAULT_LONG_POLLING_TIMEOUT_MILLIS = 20000L;
	public static final boolean DEFAULT_RETRY_ON_ERROR = true;
	public static final int DEFAULT_MAX_MESSAGES_QUEUED_PER_CHANNEL = Integer.MAX_VALUE;
	public static final long DEFAULT_RECONNECT_INTERVAL_MILLIS = 30000L;
	public static final int DEFAULT_RECONNECT_MAX_ATTEMPTS = 60;
	public static final boolean DEFAULT_ENCODE_MESSAGE_BODY = false;
	public static final int DEFAULT_CORE_POOL_SIZE = 5;
	public static final int DEFAULT_MAXIMUM_POOL_SIZE = 20;
	public static final long DEFAULT_KEEP_ALIVE_TIME_MILLIS = 10000L;
	public static final int DEFAULT_QUEUE_CAPACITY = Integer.MAX_VALUE;
	
	public static final int DEFAULT_UDP_SEND_BUFFER_SIZE = 64 * 1024; // 64K.
	
    // General Gravity configuration.
	private String gravityFactory = DEFAULT_GRAVITY_FACTORY;

	// Channel configuration.
	private long channelIdleTimeoutMillis = DEFAULT_CHANNEL_IDLE_TIMEOUT_MILLIS;
    private long longPollingTimeoutMillis = DEFAULT_LONG_POLLING_TIMEOUT_MILLIS;
	private boolean retryOnError = DEFAULT_RETRY_ON_ERROR;
	private int maxMessagesQueuedPerChannel = DEFAULT_MAX_MESSAGES_QUEUED_PER_CHANNEL;

    // Client advices.
    private long reconnectIntervalMillis = DEFAULT_RECONNECT_INTERVAL_MILLIS;
    private int reconnectMaxAttempts = DEFAULT_RECONNECT_MAX_ATTEMPTS;
    private boolean encodeMessageBody = DEFAULT_ENCODE_MESSAGE_BODY;
    
    // Free configuration options.
    private XMap extra = null;

    // Thread pool configuration.
    private int corePoolSize = DEFAULT_CORE_POOL_SIZE;
    private int maximumPoolSize = DEFAULT_MAXIMUM_POOL_SIZE;
    private long keepAliveTimeMillis = DEFAULT_KEEP_ALIVE_TIME_MILLIS;
    private int queueCapacity = DEFAULT_QUEUE_CAPACITY;

    // UDP configuration.
    private boolean useUdp = false;
    private int udpPort = 0;
    private boolean udpNio = true;
    private boolean udpConnected = true;
    private int udpSendBufferSize = DEFAULT_UDP_SEND_BUFFER_SIZE;

	public GravityConfig(GraniteConfig graniteConfig) {
		parseConfig(graniteConfig.getGravityConfig());
	}
	
	private void parseConfig(XMap config) {
		if (config != null) {
			gravityFactory = config.get("@factory", String.class, DEFAULT_GRAVITY_FACTORY);

			// Channel configuration.
			channelIdleTimeoutMillis = config.get("@channel-idle-timeout-millis", Long.TYPE, DEFAULT_CHANNEL_IDLE_TIMEOUT_MILLIS);
			longPollingTimeoutMillis = config.get("@long-polling-timeout-millis", Long.TYPE, DEFAULT_LONG_POLLING_TIMEOUT_MILLIS);
			retryOnError = config.get("@retry-on-error", Boolean.TYPE, DEFAULT_RETRY_ON_ERROR);
			maxMessagesQueuedPerChannel = config.get("@max-messages-queued-per-channel", Integer.TYPE, DEFAULT_MAX_MESSAGES_QUEUED_PER_CHANNEL);

			// Advices sent to clients.
			reconnectIntervalMillis = config.get("@reconnect-interval-millis", Long.TYPE, DEFAULT_RECONNECT_INTERVAL_MILLIS);
			reconnectMaxAttempts = config.get("@reconnect-max-attempts", Integer.TYPE, DEFAULT_RECONNECT_MAX_ATTEMPTS);
			encodeMessageBody = config.get("@encode-message-body", Boolean.TYPE, DEFAULT_ENCODE_MESSAGE_BODY);
			
			// Free configuration options.
			extra = config.getOne("configuration");
			
			// Thread pool configuration.
			corePoolSize = config.get("thread-pool/@core-pool-size", Integer.TYPE, DEFAULT_CORE_POOL_SIZE);
			maximumPoolSize = config.get("thread-pool/@maximum-pool-size", Integer.TYPE, DEFAULT_MAXIMUM_POOL_SIZE);
			keepAliveTimeMillis = config.get("thread-pool/@keep-alive-time-millis", Long.TYPE, DEFAULT_KEEP_ALIVE_TIME_MILLIS);
			queueCapacity = config.get("thread-pool/@queue-capacity", Integer.TYPE, DEFAULT_QUEUE_CAPACITY);
			
			// UDP configuration.
			useUdp = config.containsKey("udp");
			if (useUdp) {
				udpPort = config.get("udp/@port", Integer.TYPE, 0);
				udpNio = config.get("udp/@nio", Boolean.TYPE, true);
				udpConnected = config.get("udp/@connected", Boolean.TYPE, true);
				udpSendBufferSize = config.get("udp/@send-buffer-size", Integer.TYPE, DEFAULT_UDP_SEND_BUFFER_SIZE);
			}
		}
	}

	public void onReload(ServletContext context, GraniteConfig config) {
		parseConfig(config.getGravityConfig());
		GravityManager.reconfigure(context, this);
	}

	public String getGravityFactory() {
		return gravityFactory;
	}

	public long getChannelIdleTimeoutMillis() {
		return channelIdleTimeoutMillis;
	}
	public void setChannelIdleTimeoutMillis(long channelIdleTimeoutMillis) {
		this.channelIdleTimeoutMillis = channelIdleTimeoutMillis;
	}

	public long getLongPollingTimeoutMillis() {
		return longPollingTimeoutMillis;
	}
	public void setLongPollingTimeoutMillis(long longPollingTimeoutMillis) {
		this.longPollingTimeoutMillis = longPollingTimeoutMillis;
	}

	public boolean isRetryOnError() {
		return retryOnError;
	}
	public void setRetryOnError(boolean retryOnError) {
		this.retryOnError = retryOnError;
	}

	public int getMaxMessagesQueuedPerChannel() {
		return maxMessagesQueuedPerChannel;
	}
	public void setMaxMessagesQueuedPerChannel(int maxMessagesQueuedPerChannel) {
		this.maxMessagesQueuedPerChannel = maxMessagesQueuedPerChannel;
	}

	public long getReconnectIntervalMillis() {
		return reconnectIntervalMillis;
	}
	public void setReconnectIntervalMillis(long reconnectIntervalMillis) {
		this.reconnectIntervalMillis = reconnectIntervalMillis;
	}

	public int getReconnectMaxAttempts() {
		return reconnectMaxAttempts;
	}
	public void setReconnectMaxAttempts(int reconnectMaxAttempts) {
		this.reconnectMaxAttempts = reconnectMaxAttempts;
	}

	public boolean isEncodeMessageBody() {
		return encodeMessageBody;
	}

	public void setEncodeMessageBody(boolean encodeMessageBody) {
		this.encodeMessageBody = encodeMessageBody;
	}

	public XMap getExtra() {
		return (extra != null ? extra : XMap.EMPTY_XMAP);
	}

	public int getCorePoolSize() {
		return corePoolSize;
	}
	public void setCorePoolSize(int corePoolSize) {
		this.corePoolSize = corePoolSize;
	}

	public int getMaximumPoolSize() {
		return maximumPoolSize;
	}
	public void setMaximumPoolSize(int maximumPoolSize) {
		this.maximumPoolSize = maximumPoolSize;
	}

	public long getKeepAliveTimeMillis() {
		return keepAliveTimeMillis;
	}
	public void setKeepAliveTimeMillis(long keepAliveTimeMillis) {
		this.keepAliveTimeMillis = keepAliveTimeMillis;
	}

	public int getQueueCapacity() {
		return queueCapacity;
	}
	public void setQueueCapacity(int queueCapacity) {
		this.queueCapacity = queueCapacity;
	}

	public boolean isUseUdp() {
		return useUdp;
	}
	public void setUseUdp(boolean useUdp) {
		this.useUdp = useUdp;
	}

	public int getUdpPort() {
		return udpPort;
	}
	public void setUdpPort(int udpPort) {
		this.udpPort = udpPort;
	}

	public boolean isUdpNio() {
		return udpNio;
	}
	public void setUdpNio(boolean udpNio) {
		this.udpNio = udpNio;
	}

	public boolean isUdpConnected() {
		return udpConnected;
	}
	public void setUdpConnected(boolean udpConnected) {
		this.udpConnected = udpConnected;
	}

	public int getUdpSendBufferSize() {
		return udpSendBufferSize;
	}
	public void setUdpSendBufferSize(int udpBufferSize) {
		this.udpSendBufferSize = udpBufferSize;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy