Class DefaultSVNRepositoryPool

java.lang.Object
org.tmatesoft.svn.core.wc.DefaultSVNRepositoryPool
All Implemented Interfaces:
ISVNConnectionListener, ISVNSession, ISVNRepositoryPool

public class DefaultSVNRepositoryPool extends java.lang.Object implements ISVNRepositoryPool, ISVNSession, ISVNConnectionListener
The DefaultSVNRepositoryPool class is a default implementation of the ISVNRepositoryPool interface.

It creates SVNRepository objects that may be stored in a common pool and reused later. The objects common pool may be shared by different threads, but each thread can retrieve only those objects, that have been created within that thread. So, DefaultSVNRepositoryPool is thread-safe. An objects pool may be global during runtime, or it may be private - one separate pool per one DefaultSVNRepositoryPool object. Also there's a possibility to have a DefaultSVNRepositoryPool object with the pool feature disabled (SVNRepository objects instantiated by such a creator are never cached).

DefaultSVNRepositoryPool caches one SVNRepository object per one url protocol (per one thread), that is the number of protocols used equals to the number of objects cached per one thread (if all objects are created as reusable).

Also DefaultSVNRepositoryPool is able to create SVNRepository objects that use a single socket connection (i.e. don't close a connection after every repository access operation but reuse a single one).

Since:
1.2
Version:
1.3
  • Field Details

    • RUNTIME_POOL

      public static final int RUNTIME_POOL
      Deprecated.
      Defines a common shared objects pool. All objects that will be created by different threads will be stored in this common pool.
      See Also:
    • INSTANCE_POOL

      public static final int INSTANCE_POOL
      Deprecated.
      Defines a private pool. All objects that will be created by different threads will be stored only within this pool object. This allows to have more than one separate pools.
      See Also:
    • NO_POOL

      public static final int NO_POOL
      Deprecated.
      Defines a without-pool configuration. Objects that are created by this DefaultSVNRepositoryPool object are not cached, the pool feature is disabled.
      See Also:
    • DEFAULT_IDLE_TIMEOUT

      private static final long DEFAULT_IDLE_TIMEOUT
      See Also:
    • ourTimer

      private static volatile java.util.concurrent.ScheduledExecutorService ourTimer
    • ourInstanceCount

      private static volatile int ourInstanceCount
    • myAuthManager

      private ISVNAuthenticationManager myAuthManager
    • myTunnelProvider

      private ISVNTunnelProvider myTunnelProvider
    • myDebugLog

      private ISVNDebugLog myDebugLog
    • myCanceller

      private ISVNCanceller myCanceller
    • myPool

      private java.util.Map<java.lang.String,SVNRepository> myPool
    • myTimeout

      private long myTimeout
    • myInactiveRepositories

      private java.util.Map<SVNRepository,java.lang.Long> myInactiveRepositories
    • myTimer

      private java.util.concurrent.ScheduledExecutorService myTimer
    • myIsKeepConnection

      private boolean myIsKeepConnection
    • myScheduledTimeoutTask

      private java.util.concurrent.ScheduledFuture<?> myScheduledTimeoutTask
    • mySpoolLocation

      private java.io.File mySpoolLocation
  • Constructor Details

    • DefaultSVNRepositoryPool

      public DefaultSVNRepositoryPool(ISVNAuthenticationManager authManager, ISVNTunnelProvider tunnelProvider)
      Constructs a DefaultSVNRepositoryPool instance that represents RUNTIME_POOL objects pool. SVNRepository objects created by this instance will use a single socket connection.

      This constructor is identical to DefaultSVNRepositoryPool(authManager, tunnelProvider, DEFAULT_IDLE_TIMEOUT, true).

      Parameters:
      authManager - an authentication driver
      tunnelProvider - a tunnel provider
    • DefaultSVNRepositoryPool

      public DefaultSVNRepositoryPool(ISVNAuthenticationManager authManager, ISVNTunnelProvider tunnelProvider, long timeout, boolean keepConnection)
      Constructs a DefaultSVNRepositoryPool instance that represents RUNTIME_POOL objects pool. SVNRepository objects created by this instance will use a single socket connection.
      Parameters:
      authManager - an authentication driver
      tunnelProvider - a tunnel provider
      timeout - inactivity timeout after which open connections should be closed
      keepConnection - whether to keep connection open
    • DefaultSVNRepositoryPool

      public DefaultSVNRepositoryPool(ISVNAuthenticationManager authManager, ISVNTunnelProvider tunnelProvider, boolean keepConnections, int poolMode)
      Deprecated.
      Constructs a DefaultSVNRepositoryPool instance.
      Parameters:
      authManager - an authentication driver
      tunnelProvider - a tunnel provider
      keepConnections - if true then SVNRepository objects will keep a single connection for accessing a repository, if false - open a new connection per each repository access operation
      poolMode - a mode of this object represented by one of the constant fields of DefaultSVNRepositoryPool
  • Method Details

    • createExecutor

      private java.util.concurrent.ScheduledExecutorService createExecutor()
    • createRepository

      public SVNRepository createRepository(SVNURL url, boolean mayReuse) throws SVNException
      Creates a new SVNRepository driver object. if mayReuse is true and the mode of this DefaultSVNRepositoryPool object is not NO_POOL then first tries to find the SVNRepository object in the pool for the given protocol. If the object is not found, creates a new one for that protocol, caches it in the pool and returns back.

      NOTE: be careful when simultaneously using several SVNRepository drivers for the same protocol - since there can be only one driver object in the pool per a protocol, creating two objects for the same protocol with mayReuse set to true, actually returns the same single object stored in the thread pool.

      Specified by:
      createRepository in interface ISVNRepositoryPool
      Parameters:
      url - a repository location for which a driver is to be created
      mayReuse - if true then SVNRepository object is reusable
      Returns:
      a new SVNRepository driver object
      Throws:
      SVNException
      See Also:
    • setSpoolLocation

      public void setSpoolLocation(java.io.File location)
    • getSpoolLocation

      public java.io.File getSpoolLocation()
    • setOptionalSpoolLocation

      private void setOptionalSpoolLocation(SVNRepository repos, ISVNTunnelProvider options)
    • setAuthenticationManager

      public void setAuthenticationManager(ISVNAuthenticationManager authManager)
      Sets the given authentication instance to this pool and to all SVNRepository objects stored in this pool.
      Specified by:
      setAuthenticationManager in interface ISVNRepositoryPool
      Parameters:
      authManager - authentication manager instance
    • keepConnection

      public boolean keepConnection(SVNRepository repository)
      Says if the given SVNRepository driver object should keep a connection opened. If this object was created with keepConnections set to true and if repository is not created for the "svn+ssh" protocol (since for this protocol there's no extra need to keep a connection opened - it remains opened), this method returns true.
      Specified by:
      keepConnection in interface ISVNSession
      Parameters:
      repository - an SVNRepository driver
      Returns:
      true if the driver should keep a connection
    • shutdownConnections

      public void shutdownConnections(boolean shutdownAll)
      Closes connections of cached SVNRepository objects.

      Actually, calls the dispose() routine.

      Specified by:
      shutdownConnections in interface ISVNRepositoryPool
      Parameters:
      shutdownAll - if true - closes connections of all the cached objects, otherwise only connections of those cached objects which owner threads have already disposed
      See Also:
    • dispose

      public void dispose()
      Disposes this pool. Clears all inactive SVNRepository objects from this pool.
      Specified by:
      dispose in interface ISVNRepositoryPool
      Since:
      1.2.0
    • shutdownTimer

      public static void shutdownTimer()
      Stops the daemon thread that checks whether there are any SVNRepository objects expired.
      Since:
      1.1.5
      See Also:
    • saveCommitMessage

      public void saveCommitMessage(SVNRepository repository, long revision, java.lang.String message)
      Does nothing.
      Specified by:
      saveCommitMessage in interface ISVNSession
      Parameters:
      repository - an SVNRepository driver (to distinguish that repository for which this message is actual)
      revision - a revision number
      message - the commit message for revision
      See Also:
    • getCommitMessage

      public java.lang.String getCommitMessage(SVNRepository repository, long revision)
      Returns null.
      Specified by:
      getCommitMessage in interface ISVNSession
      Parameters:
      repository - an SVNRepository driver (to distinguish that repository for which a commit message is requested)
      revision - a revision number
      Returns:
      the commit message for revision
      See Also:
    • hasCommitMessage

      public boolean hasCommitMessage(SVNRepository repository, long revision)
      Returns false.
      Specified by:
      hasCommitMessage in interface ISVNSession
      Parameters:
      repository - an SVNRepository driver (to distinguish that repository for which a commit message is requested)
      revision - a revision number
      Returns:
      true if the cache has got a message for the given repository and revision, false otherwise
    • connectionClosed

      public void connectionClosed(SVNRepository repository)
      Places the specified repository into the pool of inactive SVNRepository objects.

      If this pool keeps connections open (refer to the keepConnection parameter of the constructor), then each SVNRepository object which is passed to this method (what means it finished the operation), must be reused in a period of time not greater than the timeout value. The timeout value is either equal to the value passed to the constructor, or it defaults to 60 seconds if no valid timeout value was provided. Otherwise the repository object will be closed. Timeout checking occurs one time in 10 seconds. This behavior - closing repository objects after timeout - can be changed by switching off the timer thread via shutdownTimer().

      Specified by:
      connectionClosed in interface ISVNConnectionListener
      Parameters:
      repository - repository access object
      Since:
      1.1.4
    • connectionOpened

      public void connectionOpened(SVNRepository repository)
      Removes the specified repository object from the pool of inactive SVNRepository objects held by this object. This method is synchronized.
      Specified by:
      connectionOpened in interface ISVNConnectionListener
      Parameters:
      repository - repository access object to remove from the pool
      Since:
      1.1.4
    • setCanceller

      public void setCanceller(ISVNCanceller canceller)
      Sets a canceller to be used in all SVNRepository objects produced by this pool.
      Specified by:
      setCanceller in interface ISVNRepositoryPool
      Parameters:
      canceller - caller's canceller
      Since:
      1.1.4
    • setDebugLog

      public void setDebugLog(ISVNDebugLog log)
      Sets a debug logger to be used in all SVNRepository objects produced by this pool.
      Specified by:
      setDebugLog in interface ISVNRepositoryPool
      Parameters:
      log - debug logger
      Since:
      1.1.4
    • getTimeout

      private long getTimeout()
    • getPool

      private java.util.Map<java.lang.String,SVNRepository> getPool()
    • shutdownInactiveRepositories

      private void shutdownInactiveRepositories(long currentTime)