Index: components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManager.java =================================================================== --- components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManager.java (revision 453588) +++ components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManager.java (working copy) @@ -941,7 +941,8 @@ page = (Page)ProxyHelper.getRealObject(page); // look up and set parent folder if necessary - if (page.getParent() == null) + FolderImpl parent = (FolderImpl)page.getParent(); + if (parent == null) { // access folder by path String pagePath = page.getPath(); @@ -950,7 +951,6 @@ { parentPath = Folder.PATH_SEPARATOR; } - FolderImpl parent = null; try { parent = (FolderImpl)getFolder(parentPath); @@ -984,6 +984,12 @@ getPersistenceBrokerTemplate().store(page); DatabasePageManagerCache.addTransaction(new TransactionedOperation(page.getPath(), TransactionedOperation.UPDATE_OPERATION)); + // reset parent folder pages cache in case + // parent is holding an out of date copy of + // this page that was removed from the cache + // before this one was accessed + parent.resetPages(false); + // notify page manager listeners delegator.notifyUpdatedNode(page); } @@ -1069,7 +1075,8 @@ folder = (Folder)ProxyHelper.getRealObject(folder); // look up and set parent folder if required - if ((folder.getParent() == null) && !folder.getPath().equals(Folder.PATH_SEPARATOR)) + FolderImpl parent = (FolderImpl)folder.getParent(); + if ((parent == null) && !folder.getPath().equals(Folder.PATH_SEPARATOR)) { // access folder by path String folderPath = folder.getPath(); @@ -1078,7 +1085,6 @@ { parentPath = Folder.PATH_SEPARATOR; } - FolderImpl parent = null; try { parent = (FolderImpl)getFolder(parentPath); @@ -1127,6 +1133,12 @@ DatabasePageManagerCache.addTransaction(new TransactionedOperation(folder.getPath(), TransactionedOperation.UPDATE_OPERATION)); } + // reset parent folder folders cache in case + // parent is holding an out of date copy of + // this folder that was removed from the cache + // before this one was accessed + parent.resetFolders(false); + // notify page manager listeners if (newFolder && !folder.getId().equals("0")) { @@ -1259,7 +1271,7 @@ getPersistenceBrokerTemplate().delete(folder); // reset parent folder folders cache - parent.resetPages(false); + parent.resetFolders(false); } else { @@ -1363,7 +1375,8 @@ link = (Link)ProxyHelper.getRealObject(link); // look up and set parent folder if necessary - if (link.getParent() == null) + FolderImpl parent = (FolderImpl)link.getParent(); + if (parent == null) { // access folder by path String linkPath = link.getPath(); @@ -1372,7 +1385,6 @@ { parentPath = Folder.PATH_SEPARATOR; } - FolderImpl parent = null; try { parent = (FolderImpl)getFolder(parentPath); @@ -1406,6 +1418,12 @@ getPersistenceBrokerTemplate().store(link); DatabasePageManagerCache.addTransaction(new TransactionedOperation(link.getPath(), TransactionedOperation.UPDATE_OPERATION)); + // reset parent folder links cache in case + // parent is holding an out of date copy of + // this link that was removed from the cache + // before this one was accessed + parent.resetLinks(false); + // notify page manager listeners delegator.notifyUpdatedNode(link); } @@ -1478,7 +1496,8 @@ pageSecurity = (PageSecurity)ProxyHelper.getRealObject(pageSecurity); // look up and set parent folder if necessary - if (pageSecurity.getParent() == null) + FolderImpl parent = (FolderImpl)pageSecurity.getParent(); + if (parent == null) { // access folder by path String pageSecurityPath = pageSecurity.getPath(); @@ -1487,7 +1506,6 @@ { parentPath = Folder.PATH_SEPARATOR; } - FolderImpl parent = null; try { parent = (FolderImpl)getFolder(parentPath); @@ -1534,6 +1552,12 @@ getPersistenceBrokerTemplate().store(pageSecurity); DatabasePageManagerCache.addTransaction(new TransactionedOperation(pageSecurity.getPath(), TransactionedOperation.UPDATE_OPERATION)); + // reset parent folder page security cache in case + // parent is holding an out of date copy of this + // page security that was removed from the cache + // before this one was accessed + parent.resetPageSecurity((PageSecurityImpl)pageSecurity, true); + // notify page manager listeners delegator.notifyUpdatedNode(pageSecurity); }