001/**
002 *   GRANITE DATA SERVICES
003 *   Copyright (C) 2006-2013 GRANITE DATA SERVICES S.A.S.
004 *
005 *   This file is part of the Granite Data Services Platform.
006 *
007 *   Granite Data Services is free software; you can redistribute it and/or
008 *   modify it under the terms of the GNU Lesser General Public
009 *   License as published by the Free Software Foundation; either
010 *   version 2.1 of the License, or (at your option) any later version.
011 *
012 *   Granite Data Services is distributed in the hope that it will be useful,
013 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
014 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
015 *   General Public License for more details.
016 *
017 *   You should have received a copy of the GNU Lesser General Public
018 *   License along with this library; if not, write to the Free Software
019 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
020 *   USA, or see <http://www.gnu.org/licenses/>.
021 */
022package org.granite.gravity;
023
024import org.granite.jmx.MBean;
025import org.granite.jmx.MBeanAttribute;
026import org.granite.jmx.MBeanOperation;
027import org.granite.jmx.MBeanParameter;
028import org.granite.jmx.MBeanOperation.Impact;
029
030/**
031 * @author Franck WOLFF
032 */
033@MBean(description="MBean used for Gravity operations")
034public interface DefaultGravityMBean {
035
036        ///////////////////////////////////////////////////////////////////////////
037        // Attributes.
038        
039    @MBeanAttribute(description="Factory class name used for intantiating Gravity")
040        public String getGravityFactoryName();
041
042    @MBeanAttribute(description="Amount of time after which an idle channel may be removed")
043        public long getChannelIdleTimeoutMillis();
044        public void setChannelIdleTimeoutMillis(
045                @MBeanParameter(name="channelIdleTimeoutMillis", description="New channel's idle timeout")
046                long channelIdleTimeoutMillis
047        );
048
049    @MBeanAttribute(description="Long polling timeout in milliseconds (may not work with all containers)")
050        public long getLongPollingTimeoutMillis();
051        public void setLongPollingTimeoutMillis(
052                @MBeanParameter(name="longPollingTimeoutMillis", description="New long polling timeout")
053                long longPollingTimeoutMillis
054        );
055
056    @MBeanAttribute(description="Should unsent messages be kept in the queue on IOExceptions?")
057        public boolean isRetryOnError();
058        public void setRetryOnError(
059                @MBeanParameter(name="retryOnError", description="New retry on error value")
060                boolean retryOnError
061        );
062
063    @MBeanAttribute(description="Channel's queue maximum size")
064        public int getMaxMessagesQueuedPerChannel();
065        public void setMaxMessagesQueuedPerChannel(
066                @MBeanParameter(name="maxMessagesQueuedPerChannel", description="New maximum messages queued value")
067                int maxMessagesQueuedPerChannel
068        );
069
070    @MBeanAttribute(description="Client advice for reconnection interval")
071        public long getReconnectIntervalMillis();
072
073    @MBeanAttribute(description="Client advice for reconnection max attempts")
074        public int getReconnectMaxAttempts();
075        
076        @MBeanAttribute(description="Maximum number of channels that may be queued in the Gravity pool")
077    public int getQueueCapacity();
078    
079        @MBeanAttribute(description=
080                "Number of channels that the Gravity pool queue can ideally (in the absence of " +
081                "memory or resource constraints) accept without blocking")
082    public int getQueueRemainingCapacity();
083    
084        @MBeanAttribute(description="Number of channels in the Gravity pool queue waiting for execution")
085    public int getQueueSize();
086
087        @MBeanAttribute(description="Number of threads to keep in the Gravity pool, even if they are idle")
088    public int getCorePoolSize();
089        public void setCorePoolSize(
090                @MBeanParameter(name="corePoolSize", description="New core pool size")
091                int corePoolSize
092        );
093
094        @MBeanAttribute(description="Maximum number of threads to allow in the Gravity pool")
095        public int getMaximumPoolSize();
096        public void setMaximumPoolSize(
097                @MBeanParameter(name="maximumPoolSize", description="New maximum pool size")
098                int maximumPoolSize
099        );
100
101    @MBeanAttribute(description=
102        "When the number of threads is greater than the core, this is the maximum " +
103        "time that excess idle threads will wait for new tasks before terminating")
104        public long getKeepAliveTimeMillis();
105    public void setKeepAliveTimeMillis(
106        @MBeanParameter(name="keepAliveTimeMillis", description="New keep alive time in milliseconds")
107        long keepAliveTimeMillis
108    );
109
110        @MBeanAttribute(description="Tell if this Gravity has been succefully started")
111    public boolean isStarted();
112
113        ///////////////////////////////////////////////////////////////////////////
114        // Operations.
115    
116        @MBeanOperation(description="Start Gravity", impact=Impact.ACTION)
117    public void start() throws Exception;
118    
119        @MBeanOperation(description="Restart Gravity", impact=Impact.ACTION)
120    public void restart() throws Exception;
121    
122        @MBeanOperation(
123                description="Attempts to stop all actively executing channels and halts the processing of waiting channels",
124                impact=Impact.ACTION
125        )
126    public void stop() throws Exception;
127}