Update of /var/cvs/src/org/mmbase/storage
In directory james.mmbase.org:/tmp/cvs-serv16113
Modified Files:
StorageManagerFactory.java
Log Message:
Some of the members are accessed very very often. These structures are only
changed on load. Removing synchronization may have an effect on performance
See also: http://cvs.mmbase.org/viewcvs/src/org/mmbase/storage
Index: StorageManagerFactory.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/storage/StorageManagerFactory.java,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -b -r1.34 -r1.35
--- StorageManagerFactory.java 21 Mar 2008 13:44:23 -0000 1.34
+++ StorageManagerFactory.java 19 Aug 2008 17:15:45 -0000 1.35
@@ -12,6 +12,9 @@
import java.util.*;
import org.xml.sax.InputSource;
import javax.servlet.ServletContext;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CopyOnWriteArrayList;
+
import org.mmbase.storage.search.SearchQueryHandler;
import org.mmbase.storage.util.*;
@@ -35,7 +38,7 @@
*
* @author Pierre van Rooden
* @since MMBase-1.7
- * @version $Id: StorageManagerFactory.java,v 1.34 2008/03/21 13:44:23 michiel
Exp $
+ * @version $Id: StorageManagerFactory.java,v 1.35 2008/08/19 17:15:45 michiel
Exp $
*/
public abstract class StorageManagerFactory<SM extends StorageManager> {
@@ -158,8 +161,8 @@
protected final void init(MMBase mmbase) throws StorageError {
log.service("initializing Storage Manager factory " +
this.getClass().getName());
this.mmbase = mmbase;
- attributes = Collections.synchronizedMap(new HashMap<String,
Object>()); // ConcurrentHashMap not possible because null-values are put (TODO)
- typeMappings = Collections.synchronizedList(new
ArrayList<TypeMapping>()); // CopyOnWriteArrayList not possible because
Collections.sort is done (TODO)
+ attributes = new ConcurrentHashMap<String, Object>();
+ typeMappings = new CopyOnWriteArrayList<TypeMapping>();
storeBinaryAsFileObjects = Collections.synchronizedList(new
ArrayList<String>());
changeManager = new ChangeManager();
try {
@@ -263,8 +266,10 @@
}
log.service("get type mappings");
- typeMappings.addAll(reader.getTypeMappings());
- Collections.sort(typeMappings);
+ List<TypeMapping> list = new ArrayList<TypeMapping>();
+ list.addAll(reader.getTypeMappings());
+ Collections.sort(list);
+ typeMappings.addAll(list);
// get the queryhandler class
// has to be done last, as we have to passing the disallowedfields map
(doh!)
@@ -369,7 +374,7 @@
* You cannot change this map, though you can change the attributes
themselves.
* @return an unmodifiable Map
*/
- public Map getAttributes() {
+ public Map<String, Object> getAttributes() {
return Collections.unmodifiableMap(attributes);
}
@@ -381,7 +386,9 @@
* @param attributes the map of attributes to add
*/
public void setAttributes(Map<String, Object> attributes) {
- this.attributes.putAll(attributes);
+ for (Map.Entry<String, Object> entry : attributes.entrySet()) {
+ setAttribute(entry.getKey(), entry.getKey());
+ }
log.debug("Database attributes " + this.attributes);
}
@@ -404,6 +411,7 @@
* @param value the value of the attribute
*/
public void setAttribute(String key, Object value) {
+ if (value == null) value = "";
attributes.put(key, value);
}
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs