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