Class CachingWorkflowDescriptorStore

java.lang.Object
com.atlassian.jira.workflow.CachingWorkflowDescriptorStore
All Implemented Interfaces:
InitializingComponent, WorkflowDescriptorStore

public class CachingWorkflowDescriptorStore extends Object implements WorkflowDescriptorStore, InitializingComponent
Used to cache workflowDescriptors in JIRA. This caches ImmutableWorkflowDescriptors. These objects are very heavy weight and ideally we would not cache them, but it is the only way to quickly give JIRA access to workflow objects. This is because the safe thing to cache is the workflow XML string but converting this to an object graph will be expensive. Also please note that the implementation of ImmutableWorkflowDescriptor cannot guarantee 100% immutability.

This is essentially replacing the store in the JiraWorkflowFactory, but it adds some more concurrency controls to ensure consistency with the underlying store (such as the OfBizWorkflowDescriptorStore)

Since:
v3.13
  • Constructor Details

    • CachingWorkflowDescriptorStore

      public CachingWorkflowDescriptorStore(WorkflowDescriptorStore delegate, com.atlassian.cache.CacheManager cacheManager)
  • Method Details

    • afterInstantiation

      public void afterInstantiation() throws Exception
      Description copied from interface: InitializingComponent
      Called after all the beans are constructed and the ApplicationContext is fully populated. Order of execution is order of bean creation, driven by InitializingComponentProcessor.
      Specified by:
      afterInstantiation in interface InitializingComponent
      Throws:
      Exception
    • onClearCache

      @EventListener public void onClearCache(ClearCacheEvent event)
    • onWorkflowDescriptorXmlUpdatedEvent

      @EventListener public void onWorkflowDescriptorXmlUpdatedEvent(WorkflowDescriptorXmlUpdatedEvent event)
    • getWorkflow

      public ImmutableWorkflowDescriptor getWorkflow(@Nonnull String name) throws com.opensymphony.workflow.FactoryException
      Description copied from interface: WorkflowDescriptorStore
      Retrieves a WorkflowDescriptor from the underlying store. Returns null if no WorkflowDescriptor can be found
      Specified by:
      getWorkflow in interface WorkflowDescriptorStore
      Parameters:
      name - The workflow name
      Returns:
      Null or the matching WorkflowDescriptor
      Throws:
      com.opensymphony.workflow.FactoryException - If there's an error constructing the WorkflowDescriptor from its underlying representation
    • removeWorkflow

      public boolean removeWorkflow(@Nonnull String name)
      Description copied from interface: WorkflowDescriptorStore
      Removes a workflow from the underlying store.
      Specified by:
      removeWorkflow in interface WorkflowDescriptorStore
      Parameters:
      name - The workflow name
      Returns:
      true if any records were delete, false otherwise
    • saveWorkflow

      public boolean saveWorkflow(@Nonnull String name, @Nonnull com.opensymphony.workflow.loader.WorkflowDescriptor workflowDescriptor, boolean replace) throws DataAccessException
      Description copied from interface: WorkflowDescriptorStore
      Saves or updates a workflowDescriptor. If the descriptor already exists, and the replace flag is true, an update will be done. Otherwise, this method will simply create a new value in the database (if none exists yet).
      Specified by:
      saveWorkflow in interface WorkflowDescriptorStore
      Parameters:
      name - The name of the workflow
      workflowDescriptor - The WorkflowDescriptor to save/update in the underlying store
      replace - true if an update should be done, if the workflow already exists, false otherwise
      Returns:
      true if the update was carried out successfully, false otherwise
      Throws:
      DataAccessException - If there was a problem, storing the workflowdescriptor
    • getWorkflowNames

      public String[] getWorkflowNames()
      Description copied from interface: WorkflowDescriptorStore
      Returns an array of all the workflowNames stored.
      Specified by:
      getWorkflowNames in interface WorkflowDescriptorStore
      Returns:
      an array of all the workflowNames stored.
    • getAllJiraWorkflowDTOs

      public List<JiraWorkflowDTO> getAllJiraWorkflowDTOs()
      Description copied from interface: WorkflowDescriptorStore
      Returns a list of all the workflows stored in the underlying store.
      Specified by:
      getAllJiraWorkflowDTOs in interface WorkflowDescriptorStore
      Returns:
      A list of JiraWorkflowDTOs