Class CacheableDirectoryInstanceLoader

java.lang.Object
com.atlassian.confluence.impl.user.crowd.CacheableDirectoryInstanceLoader
All Implemented Interfaces:
com.atlassian.crowd.directory.loader.DirectoryInstanceLoader

public class CacheableDirectoryInstanceLoader extends Object implements com.atlassian.crowd.directory.loader.DirectoryInstanceLoader
Caches the underlying remote directory base by id.

Note, this caching refers to holding the RemoteDirectory instances in memory, not the db caching which may occur in underlying implementations.

The problem with this approach is that every DC node is going to have it's own directory instance.

Since:
5.10
  • Constructor Details

    • CacheableDirectoryInstanceLoader

      public CacheableDirectoryInstanceLoader(com.atlassian.crowd.directory.loader.DelegatingDirectoryInstanceLoader delegate, com.atlassian.event.api.EventListenerRegistrar eventListenerRegistrar, com.atlassian.cache.CacheFactory cacheFactory)
  • Method Details

    • registerForEvents

      @PostConstruct public void registerForEvents()
    • unregisterForEvents

      @PreDestroy public void unregisterForEvents()
    • getDirectory

      public com.atlassian.crowd.directory.RemoteDirectory getDirectory(com.atlassian.crowd.embedded.api.Directory directory) throws com.atlassian.crowd.exception.DirectoryInstantiationException
      Create a directory instance from configuration

      We MUST only serve a single instance of DbCachingRemoteDirectory per directory ID because of concurrency controls on the DbCachingRemoteDirectory sync refresh. This is achieved by atomically creating RemoteDirectory only if it hasn't exist yet

      Specified by:
      getDirectory in interface com.atlassian.crowd.directory.loader.DirectoryInstanceLoader
      Parameters:
      directory - directory configuration
      Returns:
      new of already computed instance of RemoteDirectory
      Throws:
      com.atlassian.crowd.exception.DirectoryInstantiationException - if directory creation failed for whatever reason
    • getRawDirectory

      public com.atlassian.crowd.directory.RemoteDirectory getRawDirectory(Long id, String className, Map<String,String> attributes) throws com.atlassian.crowd.exception.DirectoryInstantiationException
      Specified by:
      getRawDirectory in interface com.atlassian.crowd.directory.loader.DirectoryInstanceLoader
      Throws:
      com.atlassian.crowd.exception.DirectoryInstantiationException
    • canLoad

      public boolean canLoad(String className)
      Specified by:
      canLoad in interface com.atlassian.crowd.directory.loader.DirectoryInstanceLoader
    • handleEvent

      @EventListener public void handleEvent(com.atlassian.crowd.event.directory.DirectoryUpdatedEvent event)
    • handleEvent

      @EventListener public void handleEvent(com.atlassian.crowd.event.directory.DirectoryDeletedEvent event)