Uploaded image for project: 'Jackrabbit Content Repository'
  1. Jackrabbit Content Repository
  2. JCR-978

Remove circular dependency between VersionManagerImpl and VersionItemStateProvider

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Minor
    • Resolution: Fixed
    • None
    • 1.3.3
    • versioning
    • None

    Description

      From a architectural perspective the VersionManagerImpl (VMgr) is at a higher level as the VersionItemStateProvider (VISP). While the VMgr deals with Items the VISP deals with ItemState object. Nonetheless the VISP has a reference to the VMgr and also calls the method setNodeReferences(), which violates the rule of a strictly layered system. E.g. one negative effect of this was a deadlock as described in JCR-672. It also makes it hard to solve JCR-962.

      The attached patch includes the following changes:

      • Move method VersionManagerImpl.setNodeReferences() VersionItemStateManager. The method can operate on ItemStates only and does not need to be in VersionManagerImpl. As can be seen in the current method it directly calls the PeristenceManager, which indicates it should be located in a lower layer.
      • Promote the class VersionItemStateManager to a top level class
      • Change method VersionManagerImpl.createSharedStateManager to return a VersionItemStateManager
      • Remove VersionManagerImpl instance variable from VersionItemStateProvider
      • In VersionItemStateProvider.setNodeReferences() call VersionItemStateManager.setNodeReferences()
      • Instead of using the PersistenceManager in VersionManagerImpl.getItemReferences() use the ItemStateManager. It also seems that locking is not necessary for this method.

      Attachments

        1. JCR-978.patch
          13 kB
          Marcel Reutegger

        Activity

          People

            Unassigned Unassigned
            mreutegg Marcel Reutegger
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: