Class 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 Detail

      • CacheableDirectoryInstanceLoader

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

      • 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)