Author: areshetnyak
Date: 2010-01-16 05:13:10 -0500 (Sat, 16 Jan 2010)
New Revision: 1426
Modified:
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableLockManager.java
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/resources/binding.xml
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/test/resources/conf/standalone/test-jbosscache-lockconfig.xml
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/test/resources/conf/standalone/test-jcr-config.xml
Log:
EXOJCR-332 : Add setting parameners as property to lock manager configuration.
Modified:
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableLockManager.java
===================================================================
---
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableLockManager.java 2010-01-16
09:59:17 UTC (rev 1425)
+++
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/lock/jbosscache/CacheableLockManager.java 2010-01-16
10:13:10 UTC (rev 1426)
@@ -22,6 +22,7 @@
import org.exoplatform.management.jmx.annotations.Property;
import org.exoplatform.services.jcr.access.SystemIdentity;
import org.exoplatform.services.jcr.config.RepositoryConfigurationException;
+import org.exoplatform.services.jcr.config.SimpleParameterEntry;
import org.exoplatform.services.jcr.config.WorkspaceEntry;
import org.exoplatform.services.jcr.core.ExtendedSession;
import org.exoplatform.services.jcr.dataflow.ChangesLogIterator;
@@ -85,9 +86,21 @@
*/
@Managed
@NameTemplate(@Property(key = "service", value = "lockmanager"))
-public class CacheableLockManager extends AbstractLockManager implements
ItemsPersistenceListener, Startable
+public class CacheableLockManager
+ extends AbstractLockManager
+ implements ItemsPersistenceListener, Startable
{
/**
+ * The name to property time out.
+ */
+ public static final String TIME_OUT = "time-out";
+
+ /**
+ * The name to property cache configuration.
+ */
+ public static final String JBOSSCACCHE_CONFIG = "jbosscache-configuration";
+
+ /**
* Default lock time out. 30min
*/
public static final long DEFAULT_LOCK_TIMEOUT = 1000 * 60 * 30;
@@ -121,7 +134,7 @@
/**
* Logger
*/
- private final Log log = ExoLogger.getLogger("jcr.lock.LockManager");
+ private final Log log =
ExoLogger.getLogger("jcr.lock.CacheableLockManager");
/**
* Data manager.
@@ -159,19 +172,31 @@
* @param config
*/
public CacheableLockManager(WorkspacePersistentDataManager dataManager, WorkspaceEntry
config)
- throws RepositoryConfigurationException
+ throws RepositoryConfigurationException
{
this(dataManager, config, null);
}
public CacheableLockManager(WorkspacePersistentDataManager dataManager, WorkspaceEntry
config,
- LockPersister persister) throws RepositoryConfigurationException
+ LockPersister persister) throws RepositoryConfigurationException
{
+ List<SimpleParameterEntry> paramenerts =
config.getLockManager().getParameters();
+
this.dataManager = dataManager;
if (config.getLockManager() != null)
{
- lockTimeOut =
- config.getLockManager().getTimeout() > 0 ?
config.getLockManager().getTimeout() : DEFAULT_LOCK_TIMEOUT;
+ if (paramenerts != null &&
config.getLockManager().getParameterValue(TIME_OUT, null) != null)
+ {
+ long timeOut = config.getLockManager().getParameterTime(TIME_OUT);
+ lockTimeOut = timeOut > 0 ? timeOut : DEFAULT_LOCK_TIMEOUT;
+ }
+ else
+ {
+ lockTimeOut =
+ config.getLockManager().getTimeout() > 0 ?
config.getLockManager().getTimeout()
+ : DEFAULT_LOCK_TIMEOUT;
+ }
+
}
else
lockTimeOut = DEFAULT_LOCK_TIMEOUT;
@@ -182,9 +207,12 @@
dataManager.addItemPersistenceListener(this);
// make cache
- if (config.getLockManager() != null &&
config.getLockManager().getCacheConfig() != null)
+ if (config.getLockManager() != null
+ && (config.getLockManager().getCacheConfig() != null ||
(paramenerts != null && config
+ .getLockManager().getParameterValue(JBOSSCACCHE_CONFIG, null) !=
null)))
{
- String pathToConfig = config.getLockManager().getCacheConfig();
+ String pathToConfig = (paramenerts != null &&
config.getLockManager().getParameterValue(JBOSSCACCHE_CONFIG, null) != null) ?
config.getLockManager()
+ .getParameterValue(JBOSSCACCHE_CONFIG) :
config.getLockManager().getCacheConfig();
CacheFactory<Serializable, Object> factory = new
DefaultCacheFactory<Serializable, Object>();
cache = factory.createCache(pathToConfig, false);
cache.create();
@@ -213,9 +241,9 @@
* .jcr.impl.core.NodeImpl, boolean, boolean, long)
*/
public synchronized Lock addPendingLock(NodeImpl node, boolean isDeep, boolean
isSessionScoped, long timeOut)
- throws LockException
+ throws LockException
{
- LockData lData = getLockData((NodeData)node.getData(), SEARCH_EXECMATCH |
SEARCH_CLOSEDPARENT);
+ LockData lData = getLockData((NodeData) node.getData(), SEARCH_EXECMATCH |
SEARCH_CLOSEDPARENT);
if (lData != null)
{
if (lData.getNodeIdentifier().equals(node.getInternalIdentifier()))
@@ -228,15 +256,15 @@
}
}
- if (isDeep && getLockData((NodeData)node.getData(), SEARCH_CLOSEDCHILD) !=
null)
+ if (isDeep && getLockData((NodeData) node.getData(), SEARCH_CLOSEDCHILD) !=
null)
{
throw new LockException("Some child node is locked.");
}
String lockToken = IdGenerator.generate();
lData =
- new LockData(node.getInternalIdentifier(), lockToken, isDeep, isSessionScoped,
node.getSession().getUserID(),
- timeOut > 0 ? timeOut : lockTimeOut);
+ new LockData(node.getInternalIdentifier(), lockToken, isDeep,
isSessionScoped, node.getSession()
+ .getUserID(), timeOut > 0 ? timeOut : lockTimeOut);
holdLockToken(node.getSession().getId(), lockToken);
pendingLocks.put(node.getInternalIdentifier(), lData);
@@ -261,7 +289,7 @@
public LockImpl getLock(NodeImpl node) throws LockException, RepositoryException
{
- LockData lData = getLockData((NodeData)node.getData(), SEARCH_EXECMATCH |
SEARCH_CLOSEDPARENT);
+ LockData lData = getLockData((NodeData) node.getData(), SEARCH_EXECMATCH |
SEARCH_CLOSEDPARENT);
if (lData == null ||
(!node.getInternalIdentifier().equals(lData.getNodeIdentifier()) &&
!lData.isDeep()))
{
@@ -344,7 +372,7 @@
*/
public boolean isLockHolder(NodeImpl node) throws RepositoryException
{
- LockData lData = getLockData((NodeData)node.getData(), SEARCH_EXECMATCH |
SEARCH_CLOSEDPARENT);
+ LockData lData = getLockData((NodeData) node.getData(), SEARCH_EXECMATCH |
SEARCH_CLOSEDPARENT);
return lData != null && isLockHolder(node.getSession().getId(),
lData.getToken());
}
@@ -364,21 +392,21 @@
*/
public synchronized void onCloseSession(ExtendedSession session)
{
- SessionImpl sessionImpl = (SessionImpl)session;
+ SessionImpl sessionImpl = (SessionImpl) session;
for (LockData lockData : getLockList())
{
// check is lock holder
if (lockTokenHolders.containsKey(session.getId())
- &&
lockTokenHolders.get(session.getId()).contains(lockData.getToken()))
+ &&
lockTokenHolders.get(session.getId()).contains(lockData.getToken()))
{
if (lockData.isSessionScoped())
{
// if no session currently holds lock except this
try
{
-
((NodeImpl)sessionImpl.getTransientNodesManager().getItemByIdentifier(lockData.getNodeIdentifier(),
- false)).unlock();
+ ((NodeImpl)
sessionImpl.getTransientNodesManager().getItemByIdentifier(lockData.getNodeIdentifier(),
+ false)).unlock();
}
catch (UnsupportedRepositoryOperationException e)
{
@@ -416,7 +444,7 @@
List<PlainChangesLog> chengesLogList = new
ArrayList<PlainChangesLog>();
if (changesLog instanceof TransactionChangesLog)
{
- ChangesLogIterator logIterator =
((TransactionChangesLog)changesLog).getLogIterator();
+ ChangesLogIterator logIterator = ((TransactionChangesLog)
changesLog).getLogIterator();
while (logIterator.hasNextLog())
{
@@ -425,11 +453,11 @@
}
else if (changesLog instanceof PlainChangesLog)
{
- chengesLogList.add((PlainChangesLog)changesLog);
+ chengesLogList.add((PlainChangesLog) changesLog);
}
else if (changesLog instanceof CompositeChangesLog)
{
- for (ChangesLogIterator iter =
((CompositeChangesLog)changesLog).getLogIterator(); iter.hasNextLog();)
+ for (ChangesLogIterator iter = ((CompositeChangesLog)
changesLog).getLogIterator(); iter.hasNextLog();)
{
chengesLogList.add(iter.nextLog());
}
@@ -446,7 +474,7 @@
if (currChangesLog.getSize() < 2)
{
log.error("Incorrect changes log of type ExtendedEvent.LOCK
size=" + currChangesLog.getSize()
- + "<2 \n" + currChangesLog.dump());
+ + "<2 \n" + currChangesLog.dump());
break;
}
nodeIdentifier =
currChangesLog.getAllStates().get(0).getData().getParentIdentifier();
@@ -464,12 +492,12 @@
if (currChangesLog.getSize() < 2)
{
log.error("Incorrect changes log of type ExtendedEvent.UNLOCK
size=" + currChangesLog.getSize()
- + "<2 \n" + currChangesLog.dump());
+ + "<2 \n" + currChangesLog.dump());
break;
}
internalUnLock(currChangesLog.getSessionId(),
currChangesLog.getAllStates().get(0).getData()
- .getParentIdentifier());
+ .getParentIdentifier());
break;
default :
HashSet<String> removedLock = new HashSet<String>();
@@ -529,7 +557,7 @@
else
{
throw new LockException("Can't refresh lock for node " +
newLockData.getNodeIdentifier()
- + " since lock is not exist");
+ + " since lock is not exist");
}
}
}
@@ -621,8 +649,8 @@
// make a copy, value may be null for deleting items
TransientPropertyData newData =
- new TransientPropertyData(prop.getQPath(), prop.getIdentifier(),
prop.getPersistedVersion(), prop.getType(),
- prop.getParentIdentifier(), prop.isMultiValued(), prop.getValues());
+ new TransientPropertyData(prop.getQPath(), prop.getIdentifier(),
prop.getPersistedVersion(), prop
+ .getType(), prop.getParentIdentifier(), prop.isMultiValued(),
prop.getValues());
return newData;
}
@@ -670,7 +698,7 @@
if (retval == null && (searchType & SEARCH_CLOSEDPARENT) != 0)
{
- NodeData parentData =
(NodeData)dataManager.getItemData(data.getParentIdentifier());
+ NodeData parentData = (NodeData)
dataManager.getItemData(data.getParentIdentifier());
if (parentData != null)
{
retval = getLockDataById(parentData.getIdentifier());
@@ -740,12 +768,12 @@
node.setResident(true);
// this will return null if success. And old data if something exists...
- LockData oldLockData = (LockData)node.putIfAbsent(LOCK_DATA, lockData);
+ LockData oldLockData = (LockData) node.putIfAbsent(LOCK_DATA, lockData);
if (oldLockData != null)
{
throw new LockException("Unable to write LockData. Node [" +
lockData.getNodeIdentifier()
- + "] already has LockData!");
+ + "] already has LockData!");
}
pendingLocks.remove(nodeIdentifier);
}
@@ -832,7 +860,7 @@
Node<Serializable, Object> node = lockRoot.getChild(Fqn.fromString(nodeId));
if (node != null)
{
- lockData = (LockData)node.get(LOCK_DATA);
+ lockData = (LockData) node.get(LOCK_DATA);
}
return lockData;
}
@@ -846,7 +874,7 @@
{
if (node != null)
{
- LockData lockData = (LockData)node.get(LOCK_DATA);
+ LockData lockData = (LockData) node.get(LOCK_DATA);
if (lockData != null)
{
locksData.add(lockData);
@@ -865,17 +893,19 @@
{
try
{
- NodeData nData = (NodeData)dataManager.getItemData(nodeIdentifier);
+ NodeData nData = (NodeData) dataManager.getItemData(nodeIdentifier);
PlainChangesLog changesLog =
- new PlainChangesLogImpl(new ArrayList<ItemState>(),
SystemIdentity.SYSTEM, ExtendedEvent.UNLOCK);
+ new PlainChangesLogImpl(new ArrayList<ItemState>(),
SystemIdentity.SYSTEM, ExtendedEvent.UNLOCK);
ItemData lockOwner =
- copyItemData((PropertyData)dataManager.getItemData(nData, new
QPathEntry(Constants.JCR_LOCKOWNER, 1)));
+ copyItemData((PropertyData) dataManager
+ .getItemData(nData, new QPathEntry(Constants.JCR_LOCKOWNER,
1)));
changesLog.add(ItemState.createDeletedState(lockOwner));
ItemData lockIsDeep =
- copyItemData((PropertyData)dataManager.getItemData(nData, new
QPathEntry(Constants.JCR_LOCKISDEEP, 1)));
+ copyItemData((PropertyData) dataManager.getItemData(nData,
+ new QPathEntry(Constants.JCR_LOCKISDEEP, 1)));
changesLog.add(ItemState.createDeletedState(lockIsDeep));
// lock probably removed by other thread
Modified:
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/resources/binding.xml
===================================================================
---
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/resources/binding.xml 2010-01-16
09:59:17 UTC (rev 1425)
+++
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/main/resources/binding.xml 2010-01-16
10:13:10 UTC (rev 1426)
@@ -66,9 +66,11 @@
<structure name="lock-manager" field="lockManager"
usage="optional">
<value name="class" field="type" style="attribute"
usage="optional" />
+ <collection name="properties" field="parameters"
usage="optional"
+ item-type="org.exoplatform.services.jcr.config.SimpleParameterEntry"
+ factory="org.jibx.runtime.Utility.arrayListFactory" />
<value name="time-out" field="timeout"
usage="optional"
deserializer="org.exoplatform.services.jcr.util.ConfigurationFormat.parseTime"
/>
-
<value name="jbosscache-configuration" field="cacheConfig"
usage="optional" />
<structure name="persister" field="persister"
usage="optional">
Modified:
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/test/resources/conf/standalone/test-jbosscache-lockconfig.xml
===================================================================
---
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/test/resources/conf/standalone/test-jbosscache-lockconfig.xml 2010-01-16
09:59:17 UTC (rev 1425)
+++
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/test/resources/conf/standalone/test-jbosscache-lockconfig.xml 2010-01-16
10:13:10 UTC (rev 1426)
@@ -3,4 +3,26 @@
<locking useLockStriping="false" concurrencyLevel="50000"
lockParentForChildInsertRemove="false"
lockAcquisitionTimeout="3600000"/>
+ <!-- loaders passivation="false" shared="false">
+
+ <loader class="org.jboss.cache.loader.JDBCCacheLoader"
async="false" fetchPersistentState="true"
+ ignoreModifications="false" purgeOnStartup="false">
+ <properties>
+ cache.jdbc.table.name=jdbcjcr
+ cache.jdbc.table.create=true
+ cache.jdbc.table.drop=true
+ cache.jdbc.table.primarykey=exojcr_pk
+ cache.jdbc.fqn.column=fqn
+ cache.jdbc.fqn.type=VARCHAR(512)
+ cache.jdbc.node.column=node
+ cache.jdbc.node.type=VARBINARY(65535)
+ cache.jdbc.parent.column=parent
+ cache.jdbc.driver=org.hsqldb.jdbcDriver
+ cache.jdbc.url="jdbc:hsqldb:file:target/temp/data/exojcr
+ cache.jdbc.user=sa
+ cache.jdbc.password=
+ </properties>
+ </loader>
+ </loaders -->
+
</jbosscache>
Modified:
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/test/resources/conf/standalone/test-jcr-config.xml
===================================================================
---
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/test/resources/conf/standalone/test-jcr-config.xml 2010-01-16
09:59:17 UTC (rev 1425)
+++
jcr/branches/1.12.0-JBCCACHE/exo.jcr.component.core/src/test/resources/conf/standalone/test-jcr-config.xml 2010-01-16
10:13:10 UTC (rev 1426)
@@ -80,8 +80,10 @@
</properties>
</query-handler>
<lock-manager
class="org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManager">
- <time-out>15m</time-out>
-
<jbosscache-configuration>conf/standalone/test-jbosscache-lockconfig.xml</jbosscache-configuration>
+ <properties>
+ <property name="time-out" value="15m" />
+ <property name="jbosscache-configuration"
value="conf/standalone/test-jbosscache-lockconfig.xml" />
+ </properties>
</lock-manager>
</workspace>
@@ -123,8 +125,10 @@
</properties>
</query-handler>
<lock-manager
class="org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManager">
- <time-out>15m</time-out>
-
<jbosscache-configuration>conf/standalone/test-jbosscache-lockconfig.xml</jbosscache-configuration>
+ <properties>
+ <property name="time-out" value="15m" />
+ <property name="jbosscache-configuration"
value="conf/standalone/test-jbosscache-lockconfig.xml" />
+ </properties>
</lock-manager>
</workspace>
@@ -166,8 +170,10 @@
</properties>
</query-handler>
<lock-manager
class="org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManager">
- <time-out>15m</time-out>
-
<jbosscache-configuration>conf/standalone/test-jbosscache-lockconfig.xml</jbosscache-configuration>
+ <properties>
+ <property name="time-out" value="15m" />
+ <property name="jbosscache-configuration"
value="conf/standalone/test-jbosscache-lockconfig.xml" />
+ </properties>
</lock-manager>
</workspace>
@@ -241,8 +247,10 @@
</properties>
</query-handler>
<lock-manager
class="org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManager">
- <time-out>15m</time-out>
-
<jbosscache-configuration>conf/standalone/test-jbosscache-lockconfig.xml</jbosscache-configuration>
+ <properties>
+ <property name="time-out" value="15m"
/>
+ <property name="jbosscache-configuration"
value="conf/standalone/test-jbosscache-lockconfig.xml" />
+ </properties>
</lock-manager>
</workspace>
</workspaces>
@@ -301,8 +309,10 @@
</properties>
</query-handler>
<lock-manager
class="org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManager">
- <time-out>15m</time-out>
-
<jbosscache-configuration>conf/standalone/test-jbosscache-lockconfig.xml</jbosscache-configuration>
+ <properties>
+ <property name="time-out" value="15m" />
+ <property name="jbosscache-configuration"
value="conf/standalone/test-jbosscache-lockconfig.xml" />
+ </properties>
</lock-manager>
</workspace>
@@ -350,8 +360,10 @@
</properties>
</query-handler>
<lock-manager
class="org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManager">
- <time-out>15m</time-out>
-
<jbosscache-configuration>conf/standalone/test-jbosscache-lockconfig.xml</jbosscache-configuration>
+ <properties>
+ <property name="time-out" value="15m" />
+ <property name="jbosscache-configuration"
value="conf/standalone/test-jbosscache-lockconfig.xml" />
+ </properties>
</lock-manager>
</workspace>
@@ -402,8 +414,10 @@
</properties>
</query-handler>
<lock-manager
class="org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManager">
- <time-out>15m</time-out>
-
<jbosscache-configuration>conf/standalone/test-jbosscache-lockconfig.xml</jbosscache-configuration>
+ <properties>
+ <property name="time-out" value="15m" />
+ <property name="jbosscache-configuration"
value="conf/standalone/test-jbosscache-lockconfig.xml" />
+ </properties>
</lock-manager>
</workspace>
</workspaces>