#ifndef __SESSION_MANAGER_HPP #define __SESSION_MANAGER_HPP #include "session/CommandFailedException.hpp" #include "session/ConfigurationException.hpp" #include "session/FatalSessionException.hpp" #include "session/SessionConfigurationException.hpp" #include "session/SessionOpenException.hpp" #include "session/EPPIOException.hpp" #include "xml/ParsingException.hpp" #include "common/IllegalStateException.hpp" class Greeting; class SessionManagerProperties; class Transaction; class StatsViewer; /** * The SessionManager provides a transaction processing service to clients. * Upon successful configuration, it guarantees that a pool of {@link * Session}s will be available for processing * {@link Transaction}s. A SessionManager is * configured from a {@link * SessionManagerProperties} object. */ class SessionManager { public: virtual ~SessionManager(void) = 0; /** * Configure the SessionManager from the given set of properties. This can * also be used to reconfigure the SessionManager and its internal {@link * SessionPool}. A change of password should be performed using changePassword. Following a change of * password, the properties source should be updated to reflect the change. * If this is not done, then the next invocation of configure() will fail. * @param properties A SessionManagerProperties ready to be used to reconfigure. This * object must outlive the SessionManager. */ virtual void configure(SessionManagerProperties* props) throw (ConfigurationException) = 0; /** * Change the EPP client password from oldPassword to newPassword. Note * that this does not update the configuration source to reflect the change * - that must be done separately before any future attempts to * (re-)configure the system. */ virtual void changePassword (const std::string &oldPassword, const std::string &newPassword) = 0; /** * Change the maximum size that the managed session pool will grow to. * Note that this setting will not be saved to the configuration source. */ virtual void changeMaxPoolSize (int newSize) = 0; virtual const SessionManagerProperties & getProperties () const = 0; /** * Try to process a single transaction. Some implementation-defined number * of attempts will be made to process the transaction in cases where I/O * errors or non-protocol server errors occur during processing. Use of * the underlying session is protected against concurrent use by other * threads by using the getSession/releaseSession features of this * SessionManager's {@link SessionPool}. * This method guarantees that the session used will be returned to the * pool before the method returns. * * @throws FatalSessionException No session could be acquired to process * the transaction. Check the exception message and log records for * details. * * @throws IOException Every attempt to execute the transaction command * failed due to an IOException. This is the last such IOException. * * @throws ParsingException Parsing of the response failed. Check the * exception message for the cause. * * @throws CommandFailedException The acceptable limit on the number of * failed commands due to server error was exceeded in trying to process * the command. This probably indicates a server limitation related to the * command being processed. * * @throws IllegalStateException The SessionManager had been shutdown or * not started up prior to invoking this method. */ virtual void execute(Transaction &tx) throw (FatalSessionException, EPPIOException, ParsingException, CommandFailedException, IllegalStateException) = 0; /** * Try to pipeline execute each of the transactions in the given array. * The transactions are guaranteed to be processed in order within a single * session. * * @throws FatalSessionException A session could not be obtained for the * purpose of carrying the required EPP commands and responses. Without * intervention, it should be expected that no further transactions may be * executed. * * @throws IOException Every session used to try to send the first command * threw an IOException. It was thus deemed that further attempts to write * to other sessions would fail. * * @throws IllegalStateException The SessionManager had been shutdown or * not started up prior to invoking this method. * * @return the number of transactions actually executed. This may be less * than txs.length if an I/O error occurred. Zero indicates that a * shutdown is in progress. */ virtual int execute(std::vector &txs) throw (FatalSessionException, IllegalStateException) = 0; /** * Prepare the SessionManager for providing Transaction processing * services. This initialises the {@link * SessionPool} managed by the * SessionManager, guaranteeing that any requirements defined by * SessionPool properties are met, providing the pool is initialised * successfully. * * @throws SessionConfigurationException The pool was unable configure a * session due to a configuration issue. Such problems include invalid * server location specification and missing or invalid authentication * resources. * * @throws SessionOpenException The pool was unable to open a session due * to a configuration issue. Such problems include incorrect server * location, failed authentication and network failure. */ virtual void startup () throw (SessionConfigurationException, SessionOpenException) = 0; /** * Shutdown the SessionManager, making it unavailable for further * transaction processing. */ virtual void shutdown () = 0; /** * Get the service discovery information embodied in the most recent * Greeting received from the EPP server. * * * @throws SessionConfigurationException No prior connection to the EPP * server had been established and the SessionPoolProperties provided to * the SessionPool for the purpose of establishing a new Session were * invalid. * * @throws SessionOpenException No prior connection to the EPP server had * been established and the attempt to establish a connection for the * purpose of retrieving service information failed. */ virtual const Greeting * getLastGreeting() const throw (SessionConfigurationException, SessionOpenException) = 0; /** * Initiate the SessionPool's keep-alive system. This will run until * shutdown is invoked on the SessionManager. */ virtual void run() = 0; /** * Get the StatsViewer responsible for providing operating statistics about * the SessionManager. */ virtual const StatsViewer & getStatsViewer () const = 0; }; inline SessionManager::~SessionManager(void) { return; } #endif // __SESSION_MANAGER_HPP