/*
* JBoss, Home of Professional Open Source
* Copyright 2005, JBoss Inc., and individual contributors as indicated
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This 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.
*
* This software 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 software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.invocation.pooled.server;

import java.net.ServerSocket;
import javax.management.ObjectName;
import javax.net.ServerSocketFactory;

import org.jboss.invocation.pooled.interfaces.PooledInvokerProxy;

/**
 * The PooledInvoker standard MBean interface.
 * @author Bill Burke
 * @author Scott.Stark@jboss.org
 * @version $Revision$
 */
public interface PooledInvokerMBean extends org.jboss.system.ServiceMBean
{

   /**
    * Getter for property numAcceptThreads
    * @return Value of property numAcceptThreads
    */
   int getNumAcceptThreads();

   /**
    * Setter for property numAcceptThreads
    * @param size New value of property numAcceptThreads.
    */
   void setNumAcceptThreads(int size);

   /**
    * Getter for property maxPoolSize;
    * @return Value of property maxPoolSize.
    */
   int getMaxPoolSize();

   /**
    * Setter for property maxPoolSize.
    * @param maxPoolSize New value of property serverBindPort.
    */
   void setMaxPoolSize(int maxPoolSize);

   /**
    * Getter for property maxPoolSize;
    * @return Value of property maxPoolSize.
    */
   int getClientMaxPoolSize();

   /**
    * Setter for property maxPoolSize.
    * @param clientMaxPoolSize New value of property serverBindPort.
    */
   void setClientMaxPoolSize(int clientMaxPoolSize);

   /**
    * Getter for property timeout
    * @return Value of property timeout
    */
   int getSocketTimeout();

   /**
    * Setter for property timeout
    * @param time New value of property timeout
    */
   void setSocketTimeout(int time);

   /**
    * @return Current client connection pool size
    */ 
   int getCurrentClientPoolSize();

   /**
    * @return current connection thread pool size
    */ 
   int getCurrentThreadPoolSize();

   /**
    * Getter for property serverBindPort.
    * @return Value of property serverBindPort.
    */
   int getServerBindPort();

   /**
    * Setter for property serverBindPort.
    * @param serverBindPort New value of property serverBindPort.
    */
   void setServerBindPort(int serverBindPort);

   /**
    * @return the address the client proxy connects to 
    */ 
   String getClientConnectAddress();
   /**
    * Set the clientConnectAddress
    * @param clientConnectAddress - address the client proxy connects to 
    */ 
   void setClientConnectAddress(java.lang.String clientConnectAddress);

   /**
    * @return the client local bind port
    */ 
   int getClientConnectPort();
   /**
    * @param clientConnectPort - the client local bind port
    */ 
   void setClientConnectPort(int clientConnectPort);

   /**
    * @return the number of connect retries
    */ 
   public int getClientRetryCount();
   /**
    * @param clientRetryCount - the number of connect retries
    */ 
   public void setClientRetryCount(int clientRetryCount);

   /**
    * @return the server accept backlog
    */ 
   int getBacklog();
   /**
    * @param backlog - the server accept backlog
    */ 
   void setBacklog(int backlog);

   /**
    * @return Socket.setTcpNoDelay flag
    */ 
   boolean isEnableTcpNoDelay();
   /**
    * Socket.setTcpNoDelay flag
    * @param enableTcpNoDelay
    */ 
   void setEnableTcpNoDelay(boolean enableTcpNoDelay);

   String getServerBindAddress();

   void setServerBindAddress(String serverBindAddress);

   /**
    * mbean get-set pair for field transactionManagerService Get the value of
    * transactionManagerService
    * @return value of transactionManagerService
    */
   ObjectName getTransactionManagerService();

   /**
    * Set the value of transactionManagerService
    * @param transactionManagerService Value to assign to transactionManagerService
    */
   void setTransactionManagerService(ObjectName transactionManagerService);

   PooledInvokerProxy getOptimizedInvokerProxy();

   /**
    * Set the client socket factory implementation
    * @return the javax.net.SocketFactory implementation class name
    */ 
   public String getClientSocketFactoryName();
   /**
    * Set the client factory implementation
    * @param factoryName - the javax.net.SocketFactory implementation class name
    */ 
   public void setClientSocketFactoryName(String factoryName);

   /**
    * Set the server socket factory implementation
    * @return the javax.net.ServerSocketFactory implementation class name
    */ 
   public String getServerSocketFactoryName();
   /**
    * Set the server factory implementation
    * @param factoryName - the javax.net.ServerSocketFactory implementation class name
    */ 
   public void setServerSocketFactoryName(String factoryName);

   public ServerSocketFactory getServerSocketFactory();
   public void setServerSocketFactory(ServerSocketFactory factory);

   public String getSslDomain();
   public void setSslDomain(String sslDomain);
   
}
