Package com.verisign.epp.pool
Class EPPSessionPool
- java.lang.Object
-
- com.verisign.epp.pool.EPPSessionPool
-
public class EPPSessionPool extends java.lang.Object
Singleton EPP session pool that will handle creating sessions dynamically, expiring session after an absolute timeout, keeping sessions alive based on an idle timeout, and dynamically grows and shrinks the pool based on configurable settings. One of theinit
methods must be called before useing the pool. Theinit()
method uses configuration settings defined in theEnvironment
class. TheEnvironment
settings include the following:
- EPP.SessionPool.poolableClassName - (required) EPPSessionPoolableFactory class used by the pool.
- EPP.SessionPool.clientId - (required) Login name
- EPP.SessionPool.password - (required) password
- EPP.SessionPool.absoluteTimeout - (optional) Session absolute timeout. Default is 24 hours
EPP.SessionPool.minAbsoluteTimeout
- Session minimum absolute timeout. If bothminAbsoluteTimeout
andmaxAbsoluteTimeout
is set, it will overrideabsoluteTimeout
and randomize the session absolute timeout between theminAbsoluteTimeout
andmaxAbsoluteTimeout
.EPP.SessionPool.maxAbsoluteTimeout
- Session maximum absolute timeout. If bothminAbsoluteTimeout
andmaxAbsoluteTimeout
is set, it will overrideabsoluteTimeout
and randomize the session absolute timeout between theminAbsoluteTimeout
andmaxAbsoluteTimeout
.- EPP.SessionPool.idleTimeout - (optional) Session idle timeout used to determine when keep alive messages are sent. Default is 10 minutes.
- EPP.SessionPool.maxIdle - (optional) Maximum number of idle sessions in pool. Default is 10.
- EPP.SessionPool.maxTotal - (optional) Maximum number of active sessions in pool. Default is 10.
- EPP.SessionPool.initMaxTotal - (optional) Boolean value indicating if the
maxTotal
sessions should be pre-initialized at initialization in theinit()
method. Default isfalse
. - EPP.SessionPool.maxWait - (optional) Maximum time in milliseconds for a client to block waiting for a pooled session. Default is 60 seconds.
- EPP.SessionPool.minIdle - (optional) Minimum number of idle sessions in the pool. Default is 0.
- EPP.SessionPool.timeBetweenEvictionRunsMillis - (optional) Frequency in milliseconds of scanning the pool for idle and absolute timeout sessions. Default is 60 seconds.
- EPP.SessionPool.borrowRetries - (optional) Number of retries to
get/create a session when calling
borrowObject()
. Default is0
.
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.String
DEFAULT
Name of the default system session pool, which uses theborrowObject()
,returnObject(EPPSession)
, andinvalidateObject(EPPSession)
.static long
DEFAULT_ABSOLUTE_TIMEOUT
The default session absolute timeout.static long
DEFAULT_IDLE_TIMEOUT
The default session absolute timeout.static int
DEFAULT_MAX_IDLE
The default cap on the number of "sleeping" instances in the pool.static int
DEFAULT_MAX_TOTAL
The default cap on the total number of instances for the pool.static long
DEFAULT_MAX_WAIT
The default maximum amount of time (in millis) theborrowObject()
method should block before throwing an exception.static int
DEFAULT_MIN_IDLE
The default minimum number of "sleeping" instances in the pool before before the evictor thread (if active) spawns new objects.static long
DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS
The default "time between eviction runs" value.protected static EPPSessionPool
instance
Singleton instance
-
Constructor Summary
Constructors Modifier Constructor Description protected
EPPSessionPool()
Default constructor as part of the Singleton Design Pattern.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description EPPSession
borrowObject()
Borrows a session from the pool.EPPSession
borrowObject(java.lang.String aSystem)
Borrows a session from the pool.void
close()
Closes the session pool(s) contained inEPPSessionPool
cleanly.long
getAbsoluteTimeout()
Gets the session absolute timeout.java.lang.String
getClientHost()
Gets the TCP server IP address or host name to connect from.java.lang.String
getClientId()
Gets the client identifier used to authenticate.org.apache.commons.pool2.impl.GenericObjectPoolConfig<EPPPooledGenericSession>
getConfig()
Gets the configuration for theGenericObjectPool
.EPPSessionPoolableFactory
getFactory()
Gets the factory associated with the pool.org.apache.commons.pool2.impl.GenericObjectPool<EPPPooledGenericSession>
getGenericObjectPool()
Gets the containedGenericObjectPool
.org.apache.commons.pool2.impl.GenericObjectPool<EPPPooledGenericSession>
getGenericObjectPool(java.lang.String aSystem)
Gets the containedGenericObjectPool
for a system.long
getIdleTimeout()
Gets the session idle timeout.static EPPSessionPool
getInstance()
Gets the Singleton Design Pattern instance.long
getMaxAbsoluteTimeout()
Gets the maximum session absolute timeout in milliseconds.long
getMinAbsoluteTimeout()
Gets the minimum session absolute timeout in milliseconds.java.lang.String
getPassword()
Gets the password used for authentication.java.lang.String
getServerName()
Gets the TCP server IP address or host name, or the URL of the HTTP server.java.lang.Integer
getServerPort()
Gets the TCP server port number.EPPSystemSessionPool
getSystemSessionPool(java.lang.String aSystem)
Gets the containedEPPSystemSessionPool
for a system.boolean
hasSystemSessionPool(java.lang.String aSystem)
Does the system session pool exist?void
init()
void
init(EPPSessionPoolableFactory aFactory, org.apache.commons.pool2.impl.GenericObjectPoolConfig<EPPPooledGenericSession> aConfig)
Initialize the pool with a specificEPPSessionPoolableFactory
andGenericObjectPoolConfig
setting.void
invalidateObject(EPPSession aSession)
Remove a borrowed session from the pool based on a known issue with it.void
invalidateObject(java.lang.String aSystem, EPPSession aSession)
Remove a borrowed session from the system session pool based on a known issue with it.boolean
isRandomAbsoluteTimeout()
Returns whether the absolute timeout will be randomized between theminAbsoluteTimeout
andmaxAbsoluteTimemout
.void
returnObject(EPPSession aSession)
Returned a borrowed session to the pool.void
returnObject(java.lang.String aSystem, EPPSession aSession)
Returned a borrowed session to a system session pool.void
setClientHost(java.lang.String aClientHost)
Sets the TCP server IP address or host name to connect from.void
setServerName(java.lang.String aServerName)
Sets the TCP server IP address or host name or the URL of the HTTP server.void
setServerPort(java.lang.Integer aServerPort)
Sets the TCP server port number.
-
-
-
Field Detail
-
DEFAULT_ABSOLUTE_TIMEOUT
public static final long DEFAULT_ABSOLUTE_TIMEOUT
The default session absolute timeout.- See Also:
- Constant Field Values
-
DEFAULT_IDLE_TIMEOUT
public static final long DEFAULT_IDLE_TIMEOUT
The default session absolute timeout.- See Also:
- Constant Field Values
-
DEFAULT_MAX_WAIT
public static final long DEFAULT_MAX_WAIT
The default maximum amount of time (in millis) theborrowObject()
method should block before throwing an exception.- See Also:
- Constant Field Values
-
DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS
public static final long DEFAULT_TIME_BETWEEN_EVICTION_RUNS_MILLIS
The default "time between eviction runs" value.- See Also:
- Constant Field Values
-
DEFAULT_MAX_IDLE
public static final int DEFAULT_MAX_IDLE
The default cap on the number of "sleeping" instances in the pool.- See Also:
- Constant Field Values
-
DEFAULT_MAX_TOTAL
public static final int DEFAULT_MAX_TOTAL
The default cap on the total number of instances for the pool.- See Also:
- Constant Field Values
-
DEFAULT_MIN_IDLE
public static final int DEFAULT_MIN_IDLE
The default minimum number of "sleeping" instances in the pool before before the evictor thread (if active) spawns new objects.- See Also:
- Constant Field Values
-
instance
protected static EPPSessionPool instance
Singleton instance
-
DEFAULT
public static final java.lang.String DEFAULT
Name of the default system session pool, which uses theborrowObject()
,returnObject(EPPSession)
, andinvalidateObject(EPPSession)
.- See Also:
- Constant Field Values
-
-
Method Detail
-
getInstance
public static EPPSessionPool getInstance()
Gets the Singleton Design Pattern instance. Ensure theinit()
is called at least once.- Returns:
- Singleton instance of
EPPSessionPool
.
-
init
public void init(EPPSessionPoolableFactory aFactory, org.apache.commons.pool2.impl.GenericObjectPoolConfig<EPPPooledGenericSession> aConfig)
Initialize the pool with a specificEPPSessionPoolableFactory
andGenericObjectPoolConfig
setting.- Parameters:
aFactory
- EPP session poolable object factoryaConfig
- Configuration attributes for pool
-
init
public void init() throws EPPSessionPoolException
- Throws:
EPPSessionPoolException
-
close
public void close()
Closes the session pool(s) contained inEPPSessionPool
cleanly. Cleanly closing the session pools means clearing the pools that will execute an EPP logout for each of the idle sessions and close the pool.
-
borrowObject
public EPPSession borrowObject() throws EPPSessionPoolException
Borrows a session from the pool. The session must be returned by either callinginvalidateObject(com.verisign.epp.interfaces.EPPSession)
orreturnObject(com.verisign.epp.interfaces.EPPSession)
. This method will block if there are no idle sessions in the pool formaxWait
time.- Returns:
- Borrowed
EPPSession
instance. - Throws:
EPPSessionPoolException
- On error
-
borrowObject
public EPPSession borrowObject(java.lang.String aSystem) throws EPPSessionPoolException
Borrows a session from the pool. The session must be returned by either callinginvalidateObject(com.verisign.epp.interfaces.EPPSession)
orreturnObject(com.verisign.epp.interfaces.EPPSession)
. This method will block if there are no idle sessions in the pool formaxWait
time.- Parameters:
aSystem
- the system name- Returns:
- Borrowed
EPPSession
instance. - Throws:
EPPSessionPoolException
- On error
-
invalidateObject
public void invalidateObject(EPPSession aSession) throws EPPSessionPoolException
Remove a borrowed session from the pool based on a known issue with it. The should be done if an unexpected exception occurs with the session which might be due to the server being down or the session being expired.- Parameters:
aSession
- Session that is invalid- Throws:
EPPSessionPoolException
- On error
-
invalidateObject
public void invalidateObject(java.lang.String aSystem, EPPSession aSession) throws EPPSessionPoolException
Remove a borrowed session from the system session pool based on a known issue with it. The should be done if an unexpected exception occurs with the session which might be due to the server being down or the session being expired.- Parameters:
aSystem
- the system nameaSession
- Session that is invalid- Throws:
EPPSessionPoolException
- On error
-
returnObject
public void returnObject(EPPSession aSession) throws EPPSessionPoolException
Returned a borrowed session to the pool. This session must have been returned from a call toborrowObject()
.- Parameters:
aSession
- Session to return- Throws:
EPPSessionPoolException
- On error
-
returnObject
public void returnObject(java.lang.String aSystem, EPPSession aSession) throws EPPSessionPoolException
Returned a borrowed session to a system session pool. This session must have been returned from a call toborrowObject(String)
.- Parameters:
aSystem
- the system nameaSession
- Session to return- Throws:
EPPSessionPoolException
- On error
-
getGenericObjectPool
public org.apache.commons.pool2.impl.GenericObjectPool<EPPPooledGenericSession> getGenericObjectPool()
Gets the containedGenericObjectPool
.- Returns:
- Contained
GenericObjectPool
if defined;null
otherwise.
-
hasSystemSessionPool
public boolean hasSystemSessionPool(java.lang.String aSystem)
Does the system session pool exist?- Parameters:
aSystem
- System session pool name to find- Returns:
true
if the system session pool exists;false
otherwise.
-
getSystemSessionPool
public EPPSystemSessionPool getSystemSessionPool(java.lang.String aSystem) throws EPPSessionPoolException
Gets the containedEPPSystemSessionPool
for a system.- Parameters:
aSystem
- System name for pool- Returns:
- Contained
EPPSystemSessionPool
. - Throws:
EPPSessionPoolException
- When system pool can not be found
-
getGenericObjectPool
public org.apache.commons.pool2.impl.GenericObjectPool<EPPPooledGenericSession> getGenericObjectPool(java.lang.String aSystem) throws EPPSessionPoolException
Gets the containedGenericObjectPool
for a system.- Parameters:
aSystem
- System name for pool- Returns:
- Contained
GenericObjectPool
. - Throws:
EPPSessionPoolException
- When system pool can not be found
-
getAbsoluteTimeout
public long getAbsoluteTimeout()
Gets the session absolute timeout.- Returns:
- Returns the absolute timeout in milliseconds.
-
getMinAbsoluteTimeout
public long getMinAbsoluteTimeout()
Gets the minimum session absolute timeout in milliseconds. If bothminAbsoluteTimeout
andmaxAbsoluteTimemout
are set, they will override the setting ofabsoluteTimeout
.- Returns:
- Minimum absolute timeout in milliseconds
-
getMaxAbsoluteTimeout
public long getMaxAbsoluteTimeout()
Gets the maximum session absolute timeout in milliseconds. If bothminAbsoluteTimeout
andmaxAbsoluteTimemout
are set, they will override the setting ofabsoluteTimeout
.- Returns:
- Maximum absolute timeout in milliseconds
-
isRandomAbsoluteTimeout
public boolean isRandomAbsoluteTimeout()
Returns whether the absolute timeout will be randomized between theminAbsoluteTimeout
andmaxAbsoluteTimemout
.- Returns:
true
if the absolute timeout will be randomized;false
otherwise.
-
getClientId
public java.lang.String getClientId()
Gets the client identifier used to authenticate.- Returns:
- Returns the client identifier.
-
getConfig
public org.apache.commons.pool2.impl.GenericObjectPoolConfig<EPPPooledGenericSession> getConfig()
Gets the configuration for theGenericObjectPool
.- Returns:
- Returns the config.
-
getFactory
public EPPSessionPoolableFactory getFactory()
Gets the factory associated with the pool.- Returns:
- Returns the factory.
-
getIdleTimeout
public long getIdleTimeout()
Gets the session idle timeout.- Returns:
- Returns the idle timeout in milliseconds.
-
getPassword
public java.lang.String getPassword()
Gets the password used for authentication.- Returns:
- Returns the password.
-
getServerName
public java.lang.String getServerName()
Gets the TCP server IP address or host name, or the URL of the HTTP server.- Returns:
- Server host name, IP address, or URL
-
setServerName
public void setServerName(java.lang.String aServerName)
Sets the TCP server IP address or host name or the URL of the HTTP server.- Parameters:
aServerName
- Server host name, IP address, or URL
-
getServerPort
public java.lang.Integer getServerPort()
Gets the TCP server port number. This will benull
if connecting to a HTTP server.- Returns:
- TCP server port number if defined;
null
otherwise.
-
setServerPort
public void setServerPort(java.lang.Integer aServerPort)
Sets the TCP server port number.- Parameters:
aServerPort
- TCP server port number
-
getClientHost
public java.lang.String getClientHost()
Gets the TCP server IP address or host name to connect from. Anull
value will use the loop back.- Returns:
- Client host name or IP address if defined;
null
otherwise.
-
setClientHost
public void setClientHost(java.lang.String aClientHost)
Sets the TCP server IP address or host name to connect from. Anull
value will use the loop back.- Parameters:
aClientHost
- Client host name or IP address
-
-