mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-24 17:32:48 +00:00
Moving to root below branch label
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@2005 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
/*
|
||||
* Copyright (C) 2005 Alfresco, Inc.
|
||||
*
|
||||
* Licensed under the Mozilla Public License version 1.1
|
||||
* with a permitted attribution clause. You may obtain a
|
||||
* copy of the License at
|
||||
*
|
||||
* http://www.alfresco.org/legal/license.txt
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
||||
* either express or implied. See the License for the specific
|
||||
* language governing permissions and limitations under the
|
||||
* License.
|
||||
*/
|
||||
package org.alfresco.repo.version.common.counter;
|
||||
|
||||
import org.alfresco.service.cmr.repository.StoreRef;
|
||||
|
||||
/**
|
||||
* Version counter DAO service interface.
|
||||
*
|
||||
* @author Roy Wetherall
|
||||
*/
|
||||
public interface VersionCounterDaoService
|
||||
{
|
||||
/**
|
||||
* Get the next available version number for the specified store.
|
||||
*
|
||||
* @param storeRef the store reference
|
||||
* @return the next version number
|
||||
*/
|
||||
public int nextVersionNumber(StoreRef storeRef);
|
||||
|
||||
/**
|
||||
* Gets the current version number for the specified store.
|
||||
*
|
||||
* @param storeRef the store reference
|
||||
* @return the current versio number
|
||||
*/
|
||||
public int currentVersionNumber(StoreRef storeRef);
|
||||
|
||||
/**
|
||||
* Resets the version number for a the specified store.
|
||||
*
|
||||
* WARNING: calling this method will completely reset the current
|
||||
* version count for the specified store and cannot be undone.
|
||||
*
|
||||
* @param storeRef the store reference
|
||||
*/
|
||||
public void resetVersionNumber(StoreRef storeRef);
|
||||
}
|
@@ -0,0 +1,90 @@
|
||||
/*
|
||||
* Copyright (C) 2005 Alfresco, Inc.
|
||||
*
|
||||
* Licensed under the Mozilla Public License version 1.1
|
||||
* with a permitted attribution clause. You may obtain a
|
||||
* copy of the License at
|
||||
*
|
||||
* http://www.alfresco.org/legal/license.txt
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
||||
* either express or implied. See the License for the specific
|
||||
* language governing permissions and limitations under the
|
||||
* License.
|
||||
*/
|
||||
package org.alfresco.repo.version.common.counter;
|
||||
|
||||
import org.alfresco.service.cmr.repository.NodeService;
|
||||
import org.alfresco.service.cmr.repository.StoreRef;
|
||||
import org.alfresco.util.BaseSpringTest;
|
||||
|
||||
/**
|
||||
* @author Roy Wetherall
|
||||
*/
|
||||
public class VersionCounterDaoServiceTest extends BaseSpringTest
|
||||
{
|
||||
/*
|
||||
* Test store id's
|
||||
*/
|
||||
private final static String STORE_ID_1 = "test1_" + System.currentTimeMillis();
|
||||
private final static String STORE_ID_2 = "test2_" + System.currentTimeMillis();
|
||||
private static final String STORE_NONE = "test3_" + System.currentTimeMillis();;
|
||||
|
||||
private NodeService nodeService;
|
||||
private VersionCounterDaoService counter;
|
||||
|
||||
@Override
|
||||
public void onSetUpInTransaction()
|
||||
{
|
||||
nodeService = (NodeService) applicationContext.getBean("dbNodeService");
|
||||
counter = (VersionCounterDaoService) applicationContext.getBean("versionCounterDaoService");
|
||||
}
|
||||
|
||||
public void testSetUp() throws Exception
|
||||
{
|
||||
assertNotNull(nodeService);
|
||||
assertNotNull(counter);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test nextVersionNumber
|
||||
*/
|
||||
public void testNextVersionNumber()
|
||||
{
|
||||
// Create the store references
|
||||
StoreRef store1 = new StoreRef(StoreRef.PROTOCOL_WORKSPACE, VersionCounterDaoServiceTest.STORE_ID_1);
|
||||
StoreRef store2 = new StoreRef(StoreRef.PROTOCOL_WORKSPACE, VersionCounterDaoServiceTest.STORE_ID_2);
|
||||
StoreRef storeNone = new StoreRef(StoreRef.PROTOCOL_WORKSPACE, VersionCounterDaoServiceTest.STORE_NONE);
|
||||
|
||||
int store1Version0 = this.counter.nextVersionNumber(store1);
|
||||
assertEquals(store1Version0, 1);
|
||||
|
||||
int store1Version1 = this.counter.nextVersionNumber(store1);
|
||||
assertEquals(store1Version1, 2);
|
||||
|
||||
int store2Version0 = this.counter.nextVersionNumber(store2);
|
||||
assertEquals(store2Version0, 1);
|
||||
|
||||
int store1Version2 = this.counter.nextVersionNumber(store1);
|
||||
assertEquals(store1Version2, 3);
|
||||
|
||||
int store2Version1 = this.counter.nextVersionNumber(store2);
|
||||
assertEquals(store2Version1, 2);
|
||||
|
||||
int store1Current = this.counter.currentVersionNumber(store1);
|
||||
assertEquals(store1Current, 3);
|
||||
|
||||
int store2Current = this.counter.currentVersionNumber(store2);
|
||||
assertEquals(store2Current, 2);
|
||||
|
||||
int storeNoneCurrent = this.counter.currentVersionNumber(storeNone);
|
||||
assertEquals(storeNoneCurrent, 0);
|
||||
|
||||
// Need to clean-up since the version counter works in its own transaction
|
||||
this.counter.resetVersionNumber(store1);
|
||||
this.counter.resetVersionNumber(store2);
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,107 @@
|
||||
/*
|
||||
* Copyright (C) 2005 Alfresco, Inc.
|
||||
*
|
||||
* Licensed under the Mozilla Public License version 1.1
|
||||
* with a permitted attribution clause. You may obtain a
|
||||
* copy of the License at
|
||||
*
|
||||
* http://www.alfresco.org/legal/license.txt
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
|
||||
* either express or implied. See the License for the specific
|
||||
* language governing permissions and limitations under the
|
||||
* License.
|
||||
*/
|
||||
package org.alfresco.repo.version.common.counter.hibernate;
|
||||
|
||||
import java.util.concurrent.locks.Lock;
|
||||
|
||||
import org.alfresco.repo.domain.StoreKey;
|
||||
import org.alfresco.repo.domain.VersionCount;
|
||||
import org.alfresco.repo.domain.hibernate.VersionCountImpl;
|
||||
import org.alfresco.repo.version.common.counter.VersionCounterDaoService;
|
||||
import org.alfresco.service.cmr.repository.StoreRef;
|
||||
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
|
||||
|
||||
/**
|
||||
* Version counter DAO service implemtation using Hibernate.
|
||||
* <p>
|
||||
* The object should execute within its own transaction, and is limited to single-thread
|
||||
* entry. If it becomes a bottleneck, the transaction synchronization should be moved
|
||||
* over to reentrant locks and/or the hibernate mappings should be optimized for better
|
||||
* read-write access.
|
||||
*
|
||||
* @author Derek Hulley
|
||||
*/
|
||||
public class HibernateVersionCounterDaoServiceImpl extends HibernateDaoSupport implements VersionCounterDaoService
|
||||
{
|
||||
private Lock countReadLock;
|
||||
private Lock countWriteLock;
|
||||
|
||||
/**
|
||||
* Retrieves or creates a version counter
|
||||
*
|
||||
* @param storeKey
|
||||
* @return Returns a current or new version counter
|
||||
*/
|
||||
private VersionCount getVersionCounter(StoreRef storeRef)
|
||||
{
|
||||
StoreKey storeKey = new StoreKey(storeRef.getProtocol(), storeRef.getIdentifier());
|
||||
// get the version counter
|
||||
VersionCount versionCounter = (VersionCount) getHibernateTemplate().get(VersionCountImpl.class, storeKey);
|
||||
// check if it exists
|
||||
if (versionCounter == null)
|
||||
{
|
||||
// create a new one
|
||||
versionCounter = new VersionCountImpl();
|
||||
getHibernateTemplate().save(versionCounter, storeKey);
|
||||
}
|
||||
return versionCounter;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the next available version number for the specified store.
|
||||
*
|
||||
* @param storeRef the version store id
|
||||
* @return the next version number
|
||||
*/
|
||||
public synchronized int nextVersionNumber(StoreRef storeRef)
|
||||
{
|
||||
// get the version counter
|
||||
VersionCount versionCounter = getVersionCounter(storeRef);
|
||||
// get an incremented count
|
||||
return versionCounter.incrementVersionCount();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the current version number for the specified store.
|
||||
*
|
||||
* @param storeRef the store reference
|
||||
* @return the current version number, zero if no version yet allocated.
|
||||
*/
|
||||
public synchronized int currentVersionNumber(StoreRef storeRef)
|
||||
{
|
||||
// get the version counter
|
||||
VersionCount versionCounter = getVersionCounter(storeRef);
|
||||
// get an incremented count
|
||||
return versionCounter.getVersionCount();
|
||||
}
|
||||
|
||||
/**
|
||||
* Resets the version number for a the specified store.
|
||||
*
|
||||
* WARNING: calling this method will completely reset the current
|
||||
* version count for the specified store and cannot be undone.
|
||||
*
|
||||
* @param storeRef the store reference
|
||||
*/
|
||||
public synchronized void resetVersionNumber(StoreRef storeRef)
|
||||
{
|
||||
// get the version counter
|
||||
VersionCount versionCounter = getVersionCounter(storeRef);
|
||||
// get an incremented count
|
||||
versionCounter.resetVersionCount();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user