From 1125926c9008c69f10929d6e9b95a9e202857238 Mon Sep 17 00:00:00 2001 From: Britt Park Date: Sat, 22 Jul 2006 17:35:56 +0000 Subject: [PATCH] Changed signature of AVMRepository.getAVMStoreByName() to get rid of unused and misleading parameter. Fixed PlainFileNodeImpl copy from LayeredFileNode constructor so that properties will be correctly copied. Switched out the GPL mysql driver that I had been inadvertantly using. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/WCM-DEV2/root@3378 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- config/alfresco/avm-console.properties | 2 +- config/alfresco/avm-test.properties | 2 +- .../org/alfresco/repo/avm/AVMRepository.java | 89 +++++++++---------- .../repo/avm/LayeredFileNodeImpl.java | 5 +- .../alfresco/repo/avm/PlainFileNodeImpl.java | 6 +- .../HibernateRetryingTransaction.java | 7 +- 6 files changed, 59 insertions(+), 52 deletions(-) diff --git a/config/alfresco/avm-console.properties b/config/alfresco/avm-console.properties index c12eccf301..ba26929f28 100644 --- a/config/alfresco/avm-console.properties +++ b/config/alfresco/avm-console.properties @@ -1,5 +1,5 @@ # Database specifics. -db.driver=com.mysql.jdbc.Driver +db.driver=org.gjt.mm.mysql.Driver db.url=jdbc:mysql://127.0.0.1/avm db.username=root db.password= diff --git a/config/alfresco/avm-test.properties b/config/alfresco/avm-test.properties index 91a4fb59b2..d479dc0d3e 100644 --- a/config/alfresco/avm-test.properties +++ b/config/alfresco/avm-test.properties @@ -1,5 +1,5 @@ # Database specifics. -db.driver=com.mysql.jdbc.Driver +db.driver=org.gjt.mm.mysql.Driver db.url=jdbc:mysql://127.0.0.1/avm db.username=root db.password= diff --git a/source/java/org/alfresco/repo/avm/AVMRepository.java b/source/java/org/alfresco/repo/avm/AVMRepository.java index 2fb16ffeae..0cb4f56d08 100644 --- a/source/java/org/alfresco/repo/avm/AVMRepository.java +++ b/source/java/org/alfresco/repo/avm/AVMRepository.java @@ -96,7 +96,7 @@ class AVMRepository { fLookupCount.set(1); String[] pathParts = SplitPath(path); - AVMStore rep = getAVMStoreByName(pathParts[0], true); + AVMStore rep = getAVMStoreByName(pathParts[0]); // fSession.get().lock(rep, LockMode.UPGRADE); return rep.createFile(pathParts[1], name); } @@ -111,7 +111,7 @@ class AVMRepository { fLookupCount.set(1); String[] pathParts = SplitPath(path); - AVMStore rep = getAVMStoreByName(pathParts[0], true); + AVMStore rep = getAVMStoreByName(pathParts[0]); rep.createFile(pathParts[1], name, data); } @@ -124,7 +124,7 @@ class AVMRepository { fLookupCount.set(1); String[] pathParts = SplitPath(path); - AVMStore rep = getAVMStoreByName(pathParts[0], true); + AVMStore rep = getAVMStoreByName(pathParts[0]); rep.createDirectory(pathParts[1], name); } @@ -143,7 +143,7 @@ class AVMRepository } fLookupCount.set(1); String[] pathParts = SplitPath(dstPath); - AVMStore rep = getAVMStoreByName(pathParts[0], true); + AVMStore rep = getAVMStoreByName(pathParts[0]); // fSession.get().lock(rep, LockMode.UPGRADE); rep.createLayeredDirectory(srcPath, pathParts[1], name); } @@ -158,7 +158,7 @@ class AVMRepository { fLookupCount.set(1); String[] pathParts = SplitPath(dstPath); - AVMStore rep = getAVMStoreByName(pathParts[0], true); + AVMStore rep = getAVMStoreByName(pathParts[0]); rep.createLayeredFile(srcPath, pathParts[1], name); } @@ -170,7 +170,7 @@ class AVMRepository { try { - getAVMStoreByName(name, false); + getAVMStoreByName(name); throw new AVMExistsException("AVMStore exists: " + name); } catch (AVMNotFoundException anf) @@ -201,12 +201,12 @@ class AVMRepository // Lookup the src node. fLookupCount.set(1); String [] pathParts = SplitPath(srcPath); - AVMStore srcRepo = getAVMStoreByName(pathParts[0], false); + AVMStore srcRepo = getAVMStoreByName(pathParts[0]); Lookup sPath = srcRepo.lookup(version, pathParts[1], false); // Lookup the destination directory. fLookupCount.set(1); pathParts = SplitPath(dstPath); - AVMStore dstRepo = getAVMStoreByName(pathParts[0], true); + AVMStore dstRepo = getAVMStoreByName(pathParts[0]); Lookup dPath = dstRepo.lookupDirectory(-1, pathParts[1], true); DirectoryNode dirNode = (DirectoryNode)dPath.getCurrentNode(); AVMNode srcNode = sPath.getCurrentNode(); @@ -247,7 +247,7 @@ class AVMRepository { fLookupCount.set(1); String [] pathParts = SplitPath(path); - AVMStore rep = getAVMStoreByName(pathParts[0], true); + AVMStore rep = getAVMStoreByName(pathParts[0]); return rep.getOutputStream(pathParts[1]); } @@ -262,7 +262,7 @@ class AVMRepository { fLookupCount.set(1); String[] pathParts = SplitPath(path); - AVMStore rep = getAVMStoreByName(pathParts[0], true); + AVMStore rep = getAVMStoreByName(pathParts[0]); return rep.getRandomAccess(version, pathParts[1], access); } @@ -283,7 +283,7 @@ class AVMRepository } fLookupCount.set(1); String [] pathParts = SplitPath(srcPath); - AVMStore srcRepo = getAVMStoreByName(pathParts[0], true); + AVMStore srcRepo = getAVMStoreByName(pathParts[0]); Lookup sPath = srcRepo.lookupDirectory(-1, pathParts[1], true); DirectoryNode srcDir = (DirectoryNode)sPath.getCurrentNode(); AVMNode srcNode = srcDir.lookupChild(sPath, srcName, -1, true); @@ -293,7 +293,7 @@ class AVMRepository } fLookupCount.set(1); pathParts = SplitPath(dstPath); - AVMStore dstRepo = getAVMStoreByName(pathParts[0], true); + AVMStore dstRepo = getAVMStoreByName(pathParts[0]); Lookup dPath = dstRepo.lookupDirectory(-1, pathParts[1], true); DirectoryNode dstDir = (DirectoryNode)dPath.getCurrentNode(); AVMNode dstNode = dstDir.lookupChild(dPath, dstName, -1, true); @@ -396,7 +396,7 @@ class AVMRepository { fLookupCount.set(1); String [] pathParts = SplitPath(dirPath); - AVMStore repo = getAVMStoreByName(pathParts[0], true); + AVMStore repo = getAVMStoreByName(pathParts[0]); repo.uncover(pathParts[1], name); } @@ -410,7 +410,7 @@ class AVMRepository List result = new ArrayList(); for (String repName : repositories) { - AVMStore repo = getAVMStoreByName(repName, true); + AVMStore repo = getAVMStoreByName(repName); result.add(repo.createSnapshot()); } return result; @@ -423,7 +423,7 @@ class AVMRepository */ public int createSnapshot(String storeName) { - AVMStore store = getAVMStoreByName(storeName, true); + AVMStore store = getAVMStoreByName(storeName); return store.createSnapshot(); } @@ -436,7 +436,7 @@ class AVMRepository { fLookupCount.set(1); String [] pathParts = SplitPath(path); - AVMStore store = getAVMStoreByName(pathParts[0], true); + AVMStore store = getAVMStoreByName(pathParts[0]); store.removeNode(pathParts[1], name); } @@ -448,7 +448,7 @@ class AVMRepository @SuppressWarnings("unchecked") public void purgeAVMStore(String name) { - AVMStore store = getAVMStoreByName(name, true); + AVMStore store = getAVMStoreByName(name); AVMNode root = store.getRoot(); root.setIsRoot(false); VersionRootDAO vrDAO = AVMContext.fgInstance.fVersionRootDAO; @@ -475,7 +475,7 @@ class AVMRepository */ public void purgeVersion(String name, int version) { - AVMStore store = getAVMStoreByName(name, true); + AVMStore store = getAVMStoreByName(name); store.purgeVersion(version); } @@ -489,7 +489,7 @@ class AVMRepository { fLookupCount.set(1); String [] pathParts = SplitPath(path); - AVMStore store = getAVMStoreByName(pathParts[0], false); + AVMStore store = getAVMStoreByName(pathParts[0]); return store.getInputStream(version, pathParts[1]); } @@ -525,7 +525,7 @@ class AVMRepository { fLookupCount.set(1); String [] pathParts = SplitPath(path); - AVMStore store = getAVMStoreByName(pathParts[0], false); + AVMStore store = getAVMStoreByName(pathParts[0]); return store.getListing(version, pathParts[1]); } @@ -570,7 +570,7 @@ class AVMRepository */ public AVMStoreDescriptor getAVMStore(String name) { - AVMStore store = getAVMStoreByName(name, false); + AVMStore store = getAVMStoreByName(name); return store.getDescriptor(); } @@ -581,7 +581,7 @@ class AVMRepository */ public List getAVMStoreVersions(String name) { - AVMStore store = getAVMStoreByName(name, false); + AVMStore store = getAVMStoreByName(name); return store.getVersions(); } @@ -595,7 +595,7 @@ class AVMRepository */ public List getAVMStoreVersions(String name, Date from, Date to) { - AVMStore store = getAVMStoreByName(name, false); + AVMStore store = getAVMStoreByName(name); return store.getVersions(from, to); } @@ -636,7 +636,7 @@ class AVMRepository { fLookupCount.set(1); String [] pathParts = SplitPath(path); - AVMStore store = getAVMStoreByName(pathParts[0], false); + AVMStore store = getAVMStoreByName(pathParts[0]); return store.getIndirectionPath(version, pathParts[1]); } @@ -647,17 +647,16 @@ class AVMRepository */ public int getLatestVersionID(String name) { - AVMStore store = getAVMStoreByName(name, false); + AVMStore store = getAVMStoreByName(name); return store.getNextVersionID(); } /** * Get an AVMStore by name. * @param name The name of the AVMStore. - * @param write Whether this is called for a write operation. * @return The AVMStore. */ - private AVMStore getAVMStoreByName(String name, boolean write) + private AVMStore getAVMStoreByName(String name) { AVMStore store = AVMContext.fgInstance.fAVMStoreDAO.getByName(name); if (store == null) @@ -675,7 +674,7 @@ class AVMRepository */ public AVMNodeDescriptor getAVMStoreRoot(int version, String name) { - AVMStore store = getAVMStoreByName(name, false); + AVMStore store = getAVMStoreByName(name); if (store == null) { throw new AVMNotFoundException("Not found: " + name); @@ -706,7 +705,7 @@ class AVMRepository throw new AVMCycleException("Cycle in lookup."); } String [] pathParts = SplitPath(path); - AVMStore store = getAVMStoreByName(pathParts[0], false); + AVMStore store = getAVMStoreByName(pathParts[0]); Lookup result = store.lookup(version, pathParts[1], false); if (count == null) { @@ -748,7 +747,7 @@ class AVMRepository { fLookupCount.set(1); String [] pathParts = SplitPath(path); - AVMStore store = getAVMStoreByName(pathParts[0], false); + AVMStore store = getAVMStoreByName(pathParts[0]); Lookup lookup = store.lookup(version, pathParts[1], false); return new LayeringDescriptor(!lookup.getDirectlyContained(), lookup.getAVMStore().getDescriptor(), @@ -769,7 +768,7 @@ class AVMRepository throw new AVMCycleException("Cycle in lookup."); } String [] pathParts = SplitPath(path); - AVMStore store = getAVMStoreByName(pathParts[0], false); + AVMStore store = getAVMStoreByName(pathParts[0]); return store.lookupDirectory(version, pathParts[1], false); } @@ -805,7 +804,7 @@ class AVMRepository { fLookupCount.set(1); String[] pathParts = SplitPath(path); - AVMStore store = getAVMStoreByName(pathParts[0], true); + AVMStore store = getAVMStoreByName(pathParts[0]); store.makePrimary(pathParts[1]); } @@ -818,7 +817,7 @@ class AVMRepository { fLookupCount.set(1); String[] pathParts = SplitPath(path); - AVMStore store = getAVMStoreByName(pathParts[0], true); + AVMStore store = getAVMStoreByName(pathParts[0]); store.retargetLayeredDirectory(pathParts[1], target); } @@ -862,7 +861,7 @@ class AVMRepository { fLookupCount.set(1); String[] pathParts = SplitPath(path); - AVMStore store = getAVMStoreByName(pathParts[0], true); + AVMStore store = getAVMStoreByName(pathParts[0]); store.setOpacity(pathParts[1], opacity); } @@ -876,7 +875,7 @@ class AVMRepository { fLookupCount.set(1); String [] pathParts = SplitPath(path); - AVMStore store = getAVMStoreByName(pathParts[0], true); + AVMStore store = getAVMStoreByName(pathParts[0]); store.setNodeProperty(pathParts[1], name, value); } @@ -889,7 +888,7 @@ class AVMRepository { fLookupCount.set(1); String [] pathParts = SplitPath(path); - AVMStore store = getAVMStoreByName(pathParts[0], true); + AVMStore store = getAVMStoreByName(pathParts[0]); store.setNodeProperties(pathParts[1], properties); } @@ -904,7 +903,7 @@ class AVMRepository { fLookupCount.set(1); String [] pathParts = SplitPath(path); - AVMStore store = getAVMStoreByName(pathParts[0], false); + AVMStore store = getAVMStoreByName(pathParts[0]); return store.getNodeProperty(version, pathParts[1], name); } @@ -918,7 +917,7 @@ class AVMRepository { fLookupCount.set(1); String [] pathParts = SplitPath(path); - AVMStore store = getAVMStoreByName(pathParts[0], false); + AVMStore store = getAVMStoreByName(pathParts[0]); return store.getNodeProperties(version, pathParts[1]); } @@ -931,7 +930,7 @@ class AVMRepository { fLookupCount.set(1); String [] pathParts = SplitPath(path); - AVMStore store = getAVMStoreByName(pathParts[0], true); + AVMStore store = getAVMStoreByName(pathParts[0]); store.deleteNodeProperty(pathParts[1], name); } @@ -943,7 +942,7 @@ class AVMRepository */ public void setStoreProperty(String store, QName name, PropertyValue value) { - getAVMStoreByName(store, true).setProperty(name, value); + getAVMStoreByName(store).setProperty(name, value); } /** @@ -953,7 +952,7 @@ class AVMRepository */ public void setStoreProperties(String store, Map props) { - getAVMStoreByName(store, true).setProperties(props); + getAVMStoreByName(store).setProperties(props); } /** @@ -964,7 +963,7 @@ class AVMRepository */ public PropertyValue getStoreProperty(String store, QName name) { - return getAVMStoreByName(store, false).getProperty(name); + return getAVMStoreByName(store).getProperty(name); } /** @@ -974,7 +973,7 @@ class AVMRepository */ public Map getStoreProperties(String store) { - return getAVMStoreByName(store, false).getProperties(); + return getAVMStoreByName(store).getProperties(); } /** @@ -984,7 +983,7 @@ class AVMRepository */ public void deleteStoreProperty(String store, QName name) { - getAVMStoreByName(store, true).deleteProperty(name); + getAVMStoreByName(store).deleteProperty(name); } /** @@ -994,7 +993,7 @@ class AVMRepository */ public AVMStoreDescriptor getAVMStoreDescriptor(String name) { - return getAVMStoreByName(name, false).getDescriptor(); + return getAVMStoreByName(name).getDescriptor(); } /** diff --git a/source/java/org/alfresco/repo/avm/LayeredFileNodeImpl.java b/source/java/org/alfresco/repo/avm/LayeredFileNodeImpl.java index b77e46f023..ff91e06ad9 100644 --- a/source/java/org/alfresco/repo/avm/LayeredFileNodeImpl.java +++ b/source/java/org/alfresco/repo/avm/LayeredFileNodeImpl.java @@ -84,7 +84,10 @@ class LayeredFileNodeImpl extends FileNodeImpl implements LayeredFileNode // This is a mildly dirty trick. We use getContentForRead so as not to startle // the ultimate destination content into copying itself prematurely. FileContent content = ((FileNode)indirect).getContentForRead(); - PlainFileNodeImpl newMe = new PlainFileNodeImpl(content, lPath.getAVMStore(), getBasicAttributes()); + PlainFileNodeImpl newMe = new PlainFileNodeImpl(this, + content, + lPath.getAVMStore(), + getBasicAttributes()); newMe.setAncestor(this); return newMe; } diff --git a/source/java/org/alfresco/repo/avm/PlainFileNodeImpl.java b/source/java/org/alfresco/repo/avm/PlainFileNodeImpl.java index 68211d0f53..5979e1a7e7 100644 --- a/source/java/org/alfresco/repo/avm/PlainFileNodeImpl.java +++ b/source/java/org/alfresco/repo/avm/PlainFileNodeImpl.java @@ -86,11 +86,12 @@ class PlainFileNodeImpl extends FileNodeImpl implements PlainFileNode } /** - * Constructor that takes a FileContent to share. + * Constructor that takes a FileContent to share. Called by LayeredFileNodeImpl.copy(). * @param content The FileContent to share. * @param store The AVMStore. */ - public PlainFileNodeImpl(FileContent content, + public PlainFileNodeImpl(LayeredFileNode other, + FileContent content, AVMStore store, BasicAttributes oAttrs) { @@ -100,6 +101,7 @@ class PlainFileNodeImpl extends FileNodeImpl implements PlainFileNode AVMContext.fgInstance.fAVMNodeDAO.save(this); AVMContext.fgInstance.fAVMNodeDAO.flush(); AVMContext.fgInstance.fNewInAVMStoreDAO.save(new NewInAVMStoreImpl(store, this)); + copyProperties(other); } /** diff --git a/source/java/org/alfresco/repo/avm/hibernate/HibernateRetryingTransaction.java b/source/java/org/alfresco/repo/avm/hibernate/HibernateRetryingTransaction.java index 4893272555..5b93f442df 100644 --- a/source/java/org/alfresco/repo/avm/hibernate/HibernateRetryingTransaction.java +++ b/source/java/org/alfresco/repo/avm/hibernate/HibernateRetryingTransaction.java @@ -70,8 +70,11 @@ public class HibernateRetryingTransaction extends HibernateTemplate implements R fRandom = new Random(); } - /* (non-Javadoc) - * @see org.alfresco.repo.avm.hibernate.RetryingTransaction#perform(org.alfresco.repo.avm.hibernate.HibernateTxnCallback, boolean) + /** + * Run an idempotent transaction, repeating invocations as necessary + * for failures caused by deadlocks and lost races. + * @param callback The callback containging the work to do. + * @param write Whether this is a write transaction. */ public void perform(RetryingTransactionCallback callback, boolean write) {