You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by md...@apache.org on 2009/10/06 17:18:10 UTC
svn commit: r822311 - in /jackrabbit/trunk/jackrabbit-jcr2spi: ./
src/main/java/org/apache/jackrabbit/jcr2spi/
src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/
Author: mduerig
Date: Tue Oct 6 15:18:09 2009
New Revision: 822311
URL: http://svn.apache.org/viewvc?rev=822311&view=rev
Log:
JCR-2324: Remove dependency on EDU.oswego.cs.dl.util.concurrent
Modified:
jackrabbit/trunk/jackrabbit-jcr2spi/pom.xml
jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java
jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/BitsetENTCacheImpl.java
jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java
Modified: jackrabbit/trunk/jackrabbit-jcr2spi/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/pom.xml?rev=822311&r1=822310&r2=822311&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/pom.xml (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/pom.xml Tue Oct 6 15:18:09 2009
@@ -124,6 +124,7 @@
<dependency>
<groupId>concurrent</groupId>
<artifactId>concurrent</artifactId>
+ <scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
Modified: jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java?rev=822311&r1=822310&r2=822311&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/WorkspaceManager.java Tue Oct 6 15:18:09 2009
@@ -22,6 +22,7 @@
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.Semaphore;
import javax.jcr.AccessDeniedException;
import javax.jcr.InvalidItemStateException;
@@ -114,9 +115,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import EDU.oswego.cs.dl.util.concurrent.Mutex;
-import EDU.oswego.cs.dl.util.concurrent.Sync;
-
/**
* <code>WorkspaceManager</code>...
*/
@@ -140,11 +138,11 @@
private final ItemDefinitionProvider definitionProvider;
/**
- * Mutex to synchronize the feed thread with client
+ * Semaphore to synchronize the feed thread with client
* threads that call {@link #execute(Operation)} or {@link
* #execute(ChangeLog)}.
*/
- private final Sync updateSync = new Mutex();
+ private final Semaphore updateSync = new Semaphore(1);
/**
* This is the event polling for changes. If <code>null</code>
@@ -197,8 +195,7 @@
InternalEventListener listener = createHierarchyListener(hierarchyManager);
if (cacheBehaviour == CacheBehaviour.OBSERVATION) {
addEventListener(listener);
- }
- else {
+ } else {
listeners.add(listener);
}
}
@@ -607,6 +604,11 @@
public synchronized void dispose() {
try {
updateSync.acquire();
+ } catch (InterruptedException e) {
+ log.warn("Exception while disposing WorkspaceManager: " + e);
+ return;
+ }
+ try {
if (changeFeed != null) {
disposeChangeFeed = true;
changeFeed.interrupt();
Modified: jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/BitsetENTCacheImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/BitsetENTCacheImpl.java?rev=822311&r1=822310&r2=822311&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/BitsetENTCacheImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/BitsetENTCacheImpl.java Tue Oct 6 15:18:09 2009
@@ -16,14 +16,13 @@
*/
package org.apache.jackrabbit.jcr2spi.nodetype;
-import org.apache.jackrabbit.spi.Name;
-
-import java.util.TreeSet;
-import java.util.HashMap;
-import java.util.ArrayList;
import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.TreeSet;
+import java.util.concurrent.ConcurrentHashMap;
-import EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap;
+import org.apache.jackrabbit.spi.Name;
/**
* Implements an effective node type cache that uses a bit set for storing the
@@ -63,7 +62,7 @@
* be stored in the node type registry since only registered node type names
* are allowed in the keys.
*/
- private final ConcurrentReaderHashMap nameIndex = new ConcurrentReaderHashMap();
+ private final ConcurrentHashMap<Name, Integer> nameIndex = new ConcurrentHashMap<Name, Integer>();
/**
* The reverse lookup table for bit numbers to names
@@ -166,13 +165,13 @@
* @return the bit number for the given name
*/
private int getBitNumber(Name name) {
- Integer i = (Integer) nameIndex.get(name);
+ Integer i = nameIndex.get(name);
if (i == null) {
synchronized (nameIndex) {
- i = (Integer) nameIndex.get(name);
+ i = nameIndex.get(name);
if (i == null) {
int idx = nameIndex.size();
- i = new Integer(idx);
+ i = idx;
nameIndex.put(name, i);
if (idx >= names.length) {
Name[] newNames = new Name[names.length*2];
@@ -183,7 +182,7 @@
}
}
}
- return i.intValue();
+ return i;
}
/**
@@ -217,6 +216,7 @@
/**
* @see Cloneable#clone()
*/
+ @Override
public Object clone() {
BitsetENTCacheImpl clone = new BitsetENTCacheImpl();
clone.sortedKeys.addAll(sortedKeys);
@@ -453,6 +453,7 @@
/**
* @see Object#equals(Object)
*/
+ @Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
@@ -479,6 +480,7 @@
/**
* @see Object#hashCode()
*/
+ @Override
public int hashCode() {
return hashCode;
}
@@ -486,6 +488,7 @@
/**
* @see Object#toString()
*/
+ @Override
public String toString() {
StringBuffer buf = new StringBuffer("w=");
buf.append(names.length);
Modified: jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java?rev=822311&r1=822310&r2=822311&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/NodeTypeRegistryImpl.java Tue Oct 6 15:18:09 2009
@@ -16,40 +16,41 @@
*/
package org.apache.jackrabbit.jcr2spi.nodetype;
-import EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+import java.util.concurrent.ConcurrentHashMap;
+
+import javax.jcr.NamespaceRegistry;
+import javax.jcr.PropertyType;
+import javax.jcr.RepositoryException;
+import javax.jcr.nodetype.ConstraintViolationException;
+import javax.jcr.nodetype.InvalidNodeTypeDefinitionException;
+import javax.jcr.nodetype.NoSuchNodeTypeException;
+import javax.jcr.nodetype.NodeTypeExistsException;
+import javax.jcr.version.OnParentVersionAction;
+
import org.apache.commons.collections.map.ReferenceMap;
import org.apache.jackrabbit.jcr2spi.util.Dumpable;
import org.apache.jackrabbit.spi.Name;
+import org.apache.jackrabbit.spi.QItemDefinition;
import org.apache.jackrabbit.spi.QNodeDefinition;
import org.apache.jackrabbit.spi.QNodeTypeDefinition;
import org.apache.jackrabbit.spi.QPropertyDefinition;
import org.apache.jackrabbit.spi.QValue;
-import org.apache.jackrabbit.spi.QItemDefinition;
import org.apache.jackrabbit.spi.QValueConstraint;
import org.apache.jackrabbit.spi.commons.nodetype.NodeTypeStorage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.jcr.NamespaceRegistry;
-import javax.jcr.PropertyType;
-import javax.jcr.RepositoryException;
-import javax.jcr.nodetype.NoSuchNodeTypeException;
-import javax.jcr.nodetype.ConstraintViolationException;
-import javax.jcr.nodetype.InvalidNodeTypeDefinitionException;
-import javax.jcr.nodetype.NodeTypeExistsException;
-import javax.jcr.version.OnParentVersionAction;
-import java.io.PrintStream;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.TreeSet;
-import java.util.HashMap;
-
/**
* A <code>NodeTypeRegistry</code> ...
*/
@@ -82,6 +83,7 @@
/**
* Listeners (soft references)
*/
+ @SuppressWarnings("unchecked")
private final Map<NodeTypeRegistryListener, NodeTypeRegistryListener> listeners = Collections.synchronizedMap(new ReferenceMap(ReferenceMap.WEAK, ReferenceMap.WEAK));
/**
@@ -660,14 +662,13 @@
private class NodeTypeDefinitionMap implements Map<Name, QNodeTypeDefinition>, Dumpable {
// map of node type names and node type definitions
- private final ConcurrentReaderHashMap nodetypeDefinitions = new ConcurrentReaderHashMap();
+ private final ConcurrentHashMap<Name, QNodeTypeDefinition> nodetypeDefinitions =
+ new ConcurrentHashMap<Name, QNodeTypeDefinition>();
- @SuppressWarnings("unchecked")
private Collection<QNodeTypeDefinition> getValues() {
return nodetypeDefinitions.values();
}
- @SuppressWarnings("unchecked")
private Set<Name> getKeySet() {
return nodetypeDefinitions.keySet();
}
@@ -755,14 +756,13 @@
}
public QNodeTypeDefinition put(Name key, QNodeTypeDefinition value) {
- return (QNodeTypeDefinition) nodetypeDefinitions.put(key, value);
+ return nodetypeDefinitions.put(key, value);
}
public void putAll(Map<? extends Name, ? extends QNodeTypeDefinition> t) {
throw new UnsupportedOperationException("Implementation missing");
}
- @SuppressWarnings("unchecked")
public Set<Map.Entry<Name, QNodeTypeDefinition>> entrySet() {
// make sure all node type definitions have been loaded.
keySet();
@@ -773,7 +773,7 @@
if (!(key instanceof Name)) {
throw new IllegalArgumentException();
}
- QNodeTypeDefinition def = (QNodeTypeDefinition) nodetypeDefinitions.get(key);
+ QNodeTypeDefinition def = nodetypeDefinitions.get(key);
if (def == null) {
try {
// node type does either not exist or hasn't been loaded yet
@@ -783,12 +783,12 @@
log.debug(e.getMessage());
}
}
- def = (QNodeTypeDefinition) nodetypeDefinitions.get(key);
+ def = nodetypeDefinitions.get(key);
return def;
}
public QNodeTypeDefinition remove(Object key) {
- return (QNodeTypeDefinition) nodetypeDefinitions.remove(key);
+ return nodetypeDefinitions.remove(key);
}
//-------------------------------------------------------< Dumpable >---