Remove circular dependency between VersionManagerImpl and 
VersionItemStateProvider
----------------------------------------------------------------------------------

                 Key: JCR-978
                 URL: https://issues.apache.org/jira/browse/JCR-978
             Project: Jackrabbit
          Issue Type: Improvement
          Components: versioning
            Reporter: Marcel Reutegger
            Priority: Minor


>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.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to