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
RemoteDirectoryinstances 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 Summary
Constructors Constructor Description CacheableDirectoryInstanceLoader(com.atlassian.crowd.directory.loader.DelegatingDirectoryInstanceLoader delegate, com.atlassian.event.api.EventListenerRegistrar eventListenerRegistrar, com.atlassian.cache.CacheFactory cacheFactory)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleancanLoad(String className)com.atlassian.crowd.directory.RemoteDirectorygetDirectory(com.atlassian.crowd.embedded.api.Directory directory)Create a directory instance from configurationcom.atlassian.crowd.directory.RemoteDirectorygetRawDirectory(Long id, String className, Map<String,String> attributes)voidhandleEvent(com.atlassian.crowd.event.directory.DirectoryDeletedEvent event)voidhandleEvent(com.atlassian.crowd.event.directory.DirectoryUpdatedEvent event)voidregisterForEvents()voidunregisterForEvents()
-
-
-
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.DirectoryInstantiationExceptionCreate a directory instance from configurationWe MUST only serve a single instance of
DbCachingRemoteDirectoryper directory ID because of concurrency controls on theDbCachingRemoteDirectorysync refresh. This is achieved by atomically creatingRemoteDirectoryonly if it hasn't exist yet- Specified by:
getDirectoryin interfacecom.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:
getRawDirectoryin interfacecom.atlassian.crowd.directory.loader.DirectoryInstanceLoader- Throws:
com.atlassian.crowd.exception.DirectoryInstantiationException
-
canLoad
public boolean canLoad(String className)
- Specified by:
canLoadin interfacecom.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)
-
-