You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2010/10/15 15:16:50 UTC
svn commit: r1022909 - in
/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence:
bundle/ pool/ util/
Author: jukka
Date: Fri Oct 15 13:16:50 2010
New Revision: 1022909
URL: http://svn.apache.org/viewvc?rev=1022909&view=rev
Log:
JCR-2762: Optimize bundle serialization
Avoid the extra byte in front of many names by writing out explicit counts before mixin types and properties.
Modified:
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/AbstractBundlePersistenceManager.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/pool/AbstractBundlePersistenceManager.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleNames.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleReader.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleWriter.java
jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/NodePropBundle.java
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/AbstractBundlePersistenceManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/AbstractBundlePersistenceManager.java?rev=1022909&r1=1022908&r2=1022909&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/AbstractBundlePersistenceManager.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/AbstractBundlePersistenceManager.java Fri Oct 15 13:16:50 2010
@@ -16,6 +16,10 @@
*/
package org.apache.jackrabbit.core.persistence.bundle;
+import static org.apache.jackrabbit.spi.commons.name.NameConstants.JCR_MIXINTYPES;
+import static org.apache.jackrabbit.spi.commons.name.NameConstants.JCR_PRIMARYTYPE;
+import static org.apache.jackrabbit.spi.commons.name.NameConstants.JCR_UUID;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.jackrabbit.core.cache.ConcurrentCache;
@@ -40,8 +44,8 @@ import org.apache.jackrabbit.core.util.S
import org.apache.jackrabbit.core.persistence.util.BLOBStore;
import org.apache.jackrabbit.core.persistence.util.FileBasedIndex;
import org.apache.jackrabbit.core.persistence.util.NodePropBundle;
+import org.apache.jackrabbit.core.persistence.util.NodePropBundle.PropertyEntry;
import org.apache.jackrabbit.spi.Name;
-import org.apache.jackrabbit.spi.commons.name.NameConstants;
import java.util.HashMap;
import java.util.HashSet;
@@ -409,34 +413,37 @@ public abstract class AbstractBundlePers
public PropertyState load(PropertyId id)
throws NoSuchItemStateException, ItemStateException {
NodePropBundle bundle = getBundle(id.getParentId());
- if (bundle == null) {
- throw new NoSuchItemStateException(id.toString());
- }
- PropertyState state = bundle.createPropertyState(this, id.getName());
- if (state == null) {
- // check if autocreated property state
- if (id.getName().equals(NameConstants.JCR_UUID)) {
- state = createNew(id);
+ if (bundle != null) {
+ PropertyState state = createNew(id);
+ PropertyEntry p = bundle.getPropertyEntry(id.getName());
+ if (p != null) {
+ state.setMultiValued(p.isMultiValued());
+ state.setType(p.getType());
+ state.setValues(p.getValues());
+ state.setModCount(p.getModCount());
+ } else if (id.getName().equals(JCR_UUID)) {
state.setType(PropertyType.STRING);
state.setMultiValued(false);
- state.setValues(new InternalValue[]{InternalValue.create(id.getParentId().toString())});
- } else if (id.getName().equals(NameConstants.JCR_PRIMARYTYPE)) {
- state = createNew(id);
+ state.setValues(new InternalValue[] {
+ InternalValue.create(id.getParentId().toString()) });
+ } else if (id.getName().equals(JCR_PRIMARYTYPE)) {
state.setType(PropertyType.NAME);
state.setMultiValued(false);
- state.setValues(new InternalValue[]{InternalValue.create(bundle.getNodeTypeName())});
- } else if (id.getName().equals(NameConstants.JCR_MIXINTYPES)) {
- Set<Name> mixins = bundle.getMixinTypeNames();
- state = createNew(id);
+ state.setValues(new InternalValue[] {
+ InternalValue.create(bundle.getNodeTypeName()) });
+ } else if (id.getName().equals(JCR_MIXINTYPES)) {
state.setType(PropertyType.NAME);
state.setMultiValued(true);
- state.setValues(InternalValue.create(mixins.toArray(new Name[mixins.size()])));
+ Set<Name> mixins = bundle.getMixinTypeNames();
+ state.setValues(InternalValue.create(
+ mixins.toArray(new Name[mixins.size()])));
} else {
throw new NoSuchItemStateException(id.toString());
}
- bundle.addProperty(state, getBlobStore());
+ return state;
+ } else {
+ throw new NoSuchItemStateException(id.toString());
}
- return state;
}
/**
@@ -446,7 +453,16 @@ public abstract class AbstractBundlePers
*/
public boolean exists(PropertyId id) throws ItemStateException {
NodePropBundle bundle = getBundle(id.getParentId());
- return bundle != null && bundle.hasProperty(id.getName());
+ if (bundle != null) {
+ Name name = id.getName();
+ return bundle.hasProperty(name)
+ || JCR_PRIMARYTYPE.equals(name)
+ || (JCR_UUID.equals(name) && bundle.isReferenceable())
+ || (JCR_MIXINTYPES.equals(name)
+ && !bundle.getMixinTypeNames().isEmpty());
+ } else {
+ return false;
+ }
}
/**
@@ -539,9 +555,9 @@ public abstract class AbstractBundlePers
} else {
PropertyId id = (PropertyId) state.getId();
// skip redundant primaryType, mixinTypes and uuid properties
- if (id.getName().equals(NameConstants.JCR_PRIMARYTYPE)
- || id.getName().equals(NameConstants.JCR_MIXINTYPES)
- || id.getName().equals(NameConstants.JCR_UUID)) {
+ if (id.getName().equals(JCR_PRIMARYTYPE)
+ || id.getName().equals(JCR_MIXINTYPES)
+ || id.getName().equals(JCR_UUID)) {
continue;
}
NodeId nodeId = id.getParentId();
@@ -587,9 +603,9 @@ public abstract class AbstractBundlePers
if (!state.isNode()) {
PropertyId id = (PropertyId) state.getId();
// skip primaryType pr mixinTypes properties
- if (id.getName().equals(NameConstants.JCR_PRIMARYTYPE)
- || id.getName().equals(NameConstants.JCR_MIXINTYPES)
- || id.getName().equals(NameConstants.JCR_UUID)) {
+ if (id.getName().equals(JCR_PRIMARYTYPE)
+ || id.getName().equals(JCR_MIXINTYPES)
+ || id.getName().equals(JCR_UUID)) {
continue;
}
NodeId nodeId = id.getParentId();
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/pool/AbstractBundlePersistenceManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/pool/AbstractBundlePersistenceManager.java?rev=1022909&r1=1022908&r2=1022909&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/pool/AbstractBundlePersistenceManager.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/pool/AbstractBundlePersistenceManager.java Fri Oct 15 13:16:50 2010
@@ -16,6 +16,10 @@
*/
package org.apache.jackrabbit.core.persistence.pool;
+import static org.apache.jackrabbit.spi.commons.name.NameConstants.JCR_MIXINTYPES;
+import static org.apache.jackrabbit.spi.commons.name.NameConstants.JCR_PRIMARYTYPE;
+import static org.apache.jackrabbit.spi.commons.name.NameConstants.JCR_UUID;
+
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
@@ -37,6 +41,7 @@ import org.apache.jackrabbit.core.persis
import org.apache.jackrabbit.core.persistence.util.BLOBStore;
import org.apache.jackrabbit.core.persistence.util.FileBasedIndex;
import org.apache.jackrabbit.core.persistence.util.NodePropBundle;
+import org.apache.jackrabbit.core.persistence.util.NodePropBundle.PropertyEntry;
import org.apache.jackrabbit.core.state.ItemState;
import org.apache.jackrabbit.core.state.ChangeLog;
import org.apache.jackrabbit.core.state.ItemStateException;
@@ -47,7 +52,6 @@ import org.apache.jackrabbit.core.state.
import org.apache.jackrabbit.core.util.StringIndex;
import org.apache.jackrabbit.core.value.InternalValue;
import org.apache.jackrabbit.spi.Name;
-import org.apache.jackrabbit.spi.commons.name.NameConstants;
/**
* The <code>AbstractBundlePersistenceManager</code> acts as base for all
@@ -407,34 +411,37 @@ public abstract class AbstractBundlePers
*/
public PropertyState load(PropertyId id) throws NoSuchItemStateException, ItemStateException {
NodePropBundle bundle = getBundle(id.getParentId());
- if (bundle == null) {
- throw new NoSuchItemStateException(id.toString());
- }
- PropertyState state = bundle.createPropertyState(this, id.getName());
- if (state == null) {
- // check if autocreated property state
- if (id.getName().equals(NameConstants.JCR_UUID)) {
- state = createNew(id);
+ if (bundle != null) {
+ PropertyState state = createNew(id);
+ PropertyEntry p = bundle.getPropertyEntry(id.getName());
+ if (p != null) {
+ state.setMultiValued(p.isMultiValued());
+ state.setType(p.getType());
+ state.setValues(p.getValues());
+ state.setModCount(p.getModCount());
+ } else if (id.getName().equals(JCR_UUID)) {
state.setType(PropertyType.STRING);
state.setMultiValued(false);
- state.setValues(new InternalValue[]{InternalValue.create(id.getParentId().toString())});
- } else if (id.getName().equals(NameConstants.JCR_PRIMARYTYPE)) {
- state = createNew(id);
+ state.setValues(new InternalValue[] {
+ InternalValue.create(id.getParentId().toString()) });
+ } else if (id.getName().equals(JCR_PRIMARYTYPE)) {
state.setType(PropertyType.NAME);
state.setMultiValued(false);
- state.setValues(new InternalValue[]{InternalValue.create(bundle.getNodeTypeName())});
- } else if (id.getName().equals(NameConstants.JCR_MIXINTYPES)) {
- Set<Name> mixins = bundle.getMixinTypeNames();
- state = createNew(id);
+ state.setValues(new InternalValue[] {
+ InternalValue.create(bundle.getNodeTypeName()) });
+ } else if (id.getName().equals(JCR_MIXINTYPES)) {
state.setType(PropertyType.NAME);
state.setMultiValued(true);
- state.setValues(InternalValue.create(mixins.toArray(new Name[mixins.size()])));
+ Set<Name> mixins = bundle.getMixinTypeNames();
+ state.setValues(InternalValue.create(
+ mixins.toArray(new Name[mixins.size()])));
} else {
throw new NoSuchItemStateException(id.toString());
}
- bundle.addProperty(state, getBlobStore());
+ return state;
+ } else {
+ throw new NoSuchItemStateException(id.toString());
}
- return state;
}
/**
@@ -444,7 +451,16 @@ public abstract class AbstractBundlePers
*/
public boolean exists(PropertyId id) throws ItemStateException {
NodePropBundle bundle = getBundle(id.getParentId());
- return bundle != null && bundle.hasProperty(id.getName());
+ if (bundle != null) {
+ Name name = id.getName();
+ return bundle.hasProperty(name)
+ || JCR_PRIMARYTYPE.equals(name)
+ || (JCR_UUID.equals(name) && bundle.isReferenceable())
+ || (JCR_MIXINTYPES.equals(name)
+ && !bundle.getMixinTypeNames().isEmpty());
+ } else {
+ return false;
+ }
}
/**
@@ -537,9 +553,9 @@ public abstract class AbstractBundlePers
} else {
PropertyId id = (PropertyId) state.getId();
// skip redundant primaryType, mixinTypes and uuid properties
- if (id.getName().equals(NameConstants.JCR_PRIMARYTYPE)
- || id.getName().equals(NameConstants.JCR_MIXINTYPES)
- || id.getName().equals(NameConstants.JCR_UUID)) {
+ if (id.getName().equals(JCR_PRIMARYTYPE)
+ || id.getName().equals(JCR_MIXINTYPES)
+ || id.getName().equals(JCR_UUID)) {
continue;
}
NodeId nodeId = id.getParentId();
@@ -585,9 +601,9 @@ public abstract class AbstractBundlePers
if (!state.isNode()) {
PropertyId id = (PropertyId) state.getId();
// skip primaryType pr mixinTypes properties
- if (id.getName().equals(NameConstants.JCR_PRIMARYTYPE)
- || id.getName().equals(NameConstants.JCR_MIXINTYPES)
- || id.getName().equals(NameConstants.JCR_UUID)) {
+ if (id.getName().equals(JCR_PRIMARYTYPE)
+ || id.getName().equals(JCR_MIXINTYPES)
+ || id.getName().equals(JCR_UUID)) {
continue;
}
NodeId nodeId = id.getParentId();
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleNames.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleNames.java?rev=1022909&r1=1022908&r2=1022909&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleNames.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleNames.java Fri Oct 15 13:16:50 2010
@@ -44,7 +44,7 @@ class BundleNames {
*/
private static final Name[] NAME_ARRAY = {
// WARNING: Only edit if you really know what you're doing!
- null,
+
// Most frequently used names
NameConstants.NT_UNSTRUCTURED,
NameConstants.NT_RESOURCE,
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleReader.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleReader.java?rev=1022909&r1=1022908&r2=1022909&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleReader.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleReader.java Fri Oct 15 13:16:50 2010
@@ -151,27 +151,10 @@ class BundleReader {
}
// mixin types
- Set<Name> mixinTypeNames = new HashSet<Name>();
- Name name = readIndexedQName();
- while (name != null) {
- mixinTypeNames.add(name);
- name = readIndexedQName();
- }
- bundle.setMixinTypeNames(mixinTypeNames);
+ readMixinTypes(bundle);
// properties
- name = readIndexedQName();
- while (name != null) {
- PropertyId pId = new PropertyId(id, name);
- NodePropBundle.PropertyEntry pState = readPropertyEntry(pId);
- // skip redundant primaryType, mixinTypes and uuid properties
- if (!name.equals(NameConstants.JCR_PRIMARYTYPE)
- && !name.equals(NameConstants.JCR_MIXINTYPES)
- && !name.equals(NameConstants.JCR_UUID)) {
- bundle.addProperty(pState);
- }
- name = readIndexedQName();
- }
+ readProperties(bundle);
// set referenceable flag
bundle.setReferenceable(in.readBoolean());
@@ -192,6 +175,58 @@ class BundleReader {
return bundle;
}
+ private void readMixinTypes(NodePropBundle bundle) throws IOException {
+ if (version >= BundleBinding.VERSION_3) {
+ int n = readVarInt();
+ if (n == 0) {
+ bundle.setMixinTypeNames(Collections.<Name>emptySet());
+ } else if (n == 1) {
+ bundle.setMixinTypeNames(Collections.singleton(readName()));
+ } else {
+ Set<Name> mixins = new HashSet<Name>(n * 2);
+ for (int i = 0; i < n; i++) {
+ mixins.add(readName());
+ }
+ bundle.setMixinTypeNames(mixins);
+ }
+ } else {
+ Name name = readIndexedQName();
+ if (name == null) {
+ bundle.setMixinTypeNames(Collections.<Name>emptySet());
+ } else {
+ Set<Name> mixinTypeNames = new HashSet<Name>();
+ do {
+ mixinTypeNames.add(name);
+ name = readIndexedQName();
+ } while (name != null);
+ bundle.setMixinTypeNames(mixinTypeNames);
+ }
+ }
+ }
+
+ private void readProperties(NodePropBundle bundle) throws IOException {
+ if (version >= BundleBinding.VERSION_3) {
+ int n = readVarInt();
+ for (int i = 0; i < n; i++) {
+ PropertyId id = new PropertyId(bundle.getId(), readName());
+ bundle.addProperty(readPropertyEntry(id));
+ }
+ } else {
+ Name name = readIndexedQName();
+ while (name != null) {
+ PropertyId pId = new PropertyId(bundle.getId(), name);
+ NodePropBundle.PropertyEntry pState = readPropertyEntry(pId);
+ // skip redundant primaryType, mixinTypes and uuid properties
+ if (!name.equals(NameConstants.JCR_PRIMARYTYPE)
+ && !name.equals(NameConstants.JCR_MIXINTYPES)
+ && !name.equals(NameConstants.JCR_UUID)) {
+ bundle.addProperty(pState);
+ }
+ name = readIndexedQName();
+ }
+ }
+ }
+
private void readSharedSet(NodePropBundle bundle) throws IOException {
Set<NodeId> sharedSet;
if (version >= BundleBinding.VERSION_3) {
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleWriter.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleWriter.java?rev=1022909&r1=1022908&r2=1022909&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleWriter.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/BundleWriter.java Fri Oct 15 13:16:50 2010
@@ -23,6 +23,7 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.util.Calendar;
+import java.util.Collection;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Set;
@@ -35,8 +36,8 @@ import org.apache.jackrabbit.core.data.D
import org.apache.jackrabbit.core.id.NodeId;
import org.apache.jackrabbit.core.value.InternalValue;
import org.apache.jackrabbit.core.persistence.util.NodePropBundle.ChildNodeEntry;
+import org.apache.jackrabbit.core.persistence.util.NodePropBundle.PropertyEntry;
import org.apache.jackrabbit.spi.Name;
-import org.apache.jackrabbit.spi.commons.name.NameConstants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -95,28 +96,10 @@ class BundleWriter {
writeNodeId(bundle.getParentId());
// mixin types
- for (Name name : bundle.getMixinTypeNames()) {
- writeName(name);
- }
- writeName(null);
+ writeMixinTypes(bundle);
// properties
- for (Name pName : bundle.getPropertyNames()) {
- // skip redundant primaryType, mixinTypes and uuid properties
- if (pName.equals(NameConstants.JCR_PRIMARYTYPE)
- || pName.equals(NameConstants.JCR_MIXINTYPES)
- || pName.equals(NameConstants.JCR_UUID)) {
- continue;
- }
- NodePropBundle.PropertyEntry pState = bundle.getPropertyEntry(pName);
- if (pState == null) {
- log.error("PropertyState missing in bundle: " + pName);
- } else {
- writeName(pName);
- writeState(pState);
- }
- }
- writeName(null);
+ writeProperties(bundle);
// write uuid flag
out.writeBoolean(bundle.isReferenceable());
@@ -134,6 +117,22 @@ class BundleWriter {
bundle.setSize(out.size() - size);
}
+ private void writeMixinTypes(NodePropBundle bundle) throws IOException {
+ Set<Name> mixins = bundle.getMixinTypeNames();
+ writeVarInt(mixins.size());
+ for (Name name : mixins) {
+ writeName(name);
+ }
+ }
+
+ private void writeProperties(NodePropBundle bundle) throws IOException {
+ Collection<PropertyEntry> properties = bundle.getPropertyEntries();
+ writeVarInt(properties.size());
+ for (PropertyEntry property : properties) {
+ writeState(property);
+ }
+ }
+
private void writeChildNodeEntries(NodePropBundle bundle)
throws IOException {
List<ChildNodeEntry> chilren = bundle.getChildNodeEntries();
@@ -153,8 +152,9 @@ class BundleWriter {
}
/**
- * Serializes a property entry. The serialization begins with a single
- * byte that encodes the type and multi-valuedness of the property:
+ * Serializes a property entry. The serialization begins with the
+ * property name followed by a single byte that encodes the type and
+ * multi-valuedness of the property:
* <pre>
* +-------------------------------+
* | mv count | type |
@@ -182,6 +182,8 @@ class BundleWriter {
*/
private void writeState(NodePropBundle.PropertyEntry state)
throws IOException {
+ writeName(state.getName());
+
InternalValue[] values = state.getValues();
int type = state.getType();
Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/NodePropBundle.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/NodePropBundle.java?rev=1022909&r1=1022908&r2=1022909&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/NodePropBundle.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/util/NodePropBundle.java Fri Oct 15 13:16:50 2010
@@ -177,25 +177,6 @@ public class NodePropBundle {
}
/**
- * Creates a property state from the values of this bundle
- * @param pMgr the persistence manager
- * @param name the name of the new property
- * @return the new property state
- */
- public PropertyState createPropertyState(PersistenceManager pMgr, Name name) {
- PropertyEntry p = getPropertyEntry(name);
- if (p == null) {
- return null;
- }
- PropertyState ps = pMgr.createNew(new PropertyId(id, name));
- ps.setMultiValued(p.isMultiValued());
- ps.setType(p.getType());
- ps.setValues(p.getValues());
- ps.setModCount(p.getModCount());
- return ps;
- }
-
- /**
* Checks if this bundle is new.
* @return <code>true</code> if this bundle is new;
* <code>false</code> otherwise.
@@ -322,6 +303,9 @@ public class NodePropBundle {
* @param entry the enrty to add
*/
public void addProperty(PropertyEntry entry) {
+ assert !NameConstants.JCR_PRIMARYTYPE.equals(entry.getName());
+ assert !NameConstants.JCR_MIXINTYPES.equals(entry.getName());
+ assert !NameConstants.JCR_UUID.equals(entry.getName());
properties.put(entry.getName(), entry);
}
@@ -346,10 +330,7 @@ public class NodePropBundle {
* <code>false</code> otherwise.
*/
public boolean hasProperty(Name name) {
- return properties.containsKey(name)
- || name.equals(NameConstants.JCR_PRIMARYTYPE)
- || (isReferenceable && name.equals(NameConstants.JCR_UUID))
- || (mixinTypeNames.size() > 0 && name.equals(NameConstants.JCR_MIXINTYPES));
+ return properties.containsKey(name);
}
/**