[exo-jcr-commits] exo-jcr SVN: r1323 - in jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main: java/org/exoplatform/services/jcr/impl/core and 1 other directories.
do-not-reply at jboss.org
do-not-reply at jboss.org
Fri Jan 8 07:38:15 EST 2010
Author: pnedonosko
Date: 2010-01-08 07:38:14 -0500 (Fri, 08 Jan 2010)
New Revision: 1323
Modified:
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/config/WorkspaceEntry.java
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionDataManager.java
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionImpl.java
jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/resources/binding.xml
Log:
EXOJCR-338 lazy load for childs items with thresold parameter (100 default).
Modified: jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/config/WorkspaceEntry.java
===================================================================
--- jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/config/WorkspaceEntry.java 2010-01-08 12:03:33 UTC (rev 1322)
+++ jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/config/WorkspaceEntry.java 2010-01-08 12:38:14 UTC (rev 1323)
@@ -29,6 +29,8 @@
{
protected String name;
+
+ protected int lazyReadThreshold = 0;
@Deprecated
protected String autoInitializedRootNt;
@@ -192,5 +194,15 @@
{
this.initializer = initializer;
}
+
+ public int getLazyReadThreshold()
+ {
+ return lazyReadThreshold;
+ }
+ public void setLazyReadThreshold(int lazyReadThreshold)
+ {
+ this.lazyReadThreshold = lazyReadThreshold;
+ }
+
}
Modified: jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java
===================================================================
--- jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java 2010-01-08 12:03:33 UTC (rev 1322)
+++ jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java 2010-01-08 12:38:14 UTC (rev 1323)
@@ -1035,11 +1035,29 @@
checkValid();
try
{
- // TODO full iterator code
- // return new EntityCollection(childNodes());
+ List<NodeData> childs = childNodesData();
- // lazy childs
- return new LazyNodeIterator(childNodesData());
+ if (childs.size() < session.getLazyReadThreshold())
+ {
+ // full iterator
+ List<NodeImpl> nodes = new ArrayList<NodeImpl>();
+ for (NodeData child : childs)
+ {
+ if (session.getAccessManager().hasPermission(child.getACL(), new String[]{PermissionType.READ},
+ session.getUserState().getIdentity()))
+ {
+ NodeImpl item = (NodeImpl)dataManager.readItem(child, nodeData(), true, false);
+ session.getActionHandler().postRead(item);
+ nodes.add(item);
+ }
+ }
+ return new EntityCollection(nodes);
+ }
+ else
+ {
+ // lazy iterator
+ return new LazyNodeIterator(childs);
+ }
}
finally
{
@@ -1066,20 +1084,32 @@
try
{
- // TODO full iterator code
- // ItemFilter filter = new NamePatternFilter(namePattern);
- // ArrayList<NodeImpl> list = new ArrayList<NodeImpl>();
- // for (NodeImpl item : childNodes())
- // {
- // if (filter.accept(item))
- // {
- // list.add(item);
- // }
- // }
- // return new EntityCollection(list);
+ List<NodeData> childs = childNodesData();
- // lazy childs
- return new LazyNodeIterator(childNodesData(), new ItemDataNamePatternFilter(namePattern, session));
+ ItemDataFilter filter = new ItemDataNamePatternFilter(namePattern, session);
+
+ if (childs.size() < session.getLazyReadThreshold())
+ {
+ // full iterator
+ List<NodeImpl> nodes = new ArrayList<NodeImpl>();
+ for (NodeData child : childs)
+ {
+ if (filter.accept(child)
+ && session.getAccessManager().hasPermission(child.getACL(), new String[]{PermissionType.READ},
+ session.getUserState().getIdentity()))
+ {
+ NodeImpl item = (NodeImpl)dataManager.readItem(child, nodeData(), true, false);
+ session.getActionHandler().postRead(item);
+ nodes.add(item);
+ }
+ }
+ return new EntityCollection(nodes);
+ }
+ else
+ {
+ // lazy iterator
+ return new LazyNodeIterator(childNodesData(), filter);
+ }
}
finally
{
@@ -1149,11 +1179,35 @@
try
{
- // TODO full iterator code
- // return new EntityCollection(childProperties());
+ List<PropertyData> childs = childPropertiesData();
- // lazy childs
- return new LazyPropertyIterator(childPropertiesData());
+ if (session.getAccessManager().hasPermission(nodeData().getACL(), new String[]{PermissionType.READ},
+ session.getUserState().getIdentity()))
+ {
+ if (childs.size() < session.getLazyReadThreshold())
+ {
+ // full iterator
+ List<PropertyImpl> props = new ArrayList<PropertyImpl>();
+ for (PropertyData child : childs)
+ {
+ PropertyImpl item = (PropertyImpl)dataManager.readItem(child, nodeData(), true, false);
+ session.getActionHandler().postRead(item);
+ props.add(item);
+
+ }
+ return new EntityCollection(props);
+ }
+ else
+ {
+ // lazy iterator
+ return new LazyPropertyIterator(childs);
+ }
+ }
+ else
+ {
+ // return empty
+ return new EntityCollection();
+ }
}
finally
{
@@ -1169,28 +1223,50 @@
*/
public PropertyIterator getProperties(String namePattern) throws RepositoryException
{
-
long start = System.currentTimeMillis();
if (LOG.isDebugEnabled())
+ {
LOG.debug("getProperties(String) >>>>>");
+ }
checkValid();
try
{
- // TODO full iterator code
- // ItemFilter filter = new NamePatternFilter(namePattern);
- // ArrayList<PropertyImpl> list = new ArrayList<PropertyImpl>();
- // for (PropertyImpl item : childProperties())
- // {
- // if (filter.accept(item))
- // list.add(item);
- // }
- //
- // return new EntityCollection(list);
+ List<PropertyData> childs = childPropertiesData();
- // lazy childs
- return new LazyPropertyIterator(childPropertiesData(), new ItemDataNamePatternFilter(namePattern, session));
+ ItemDataFilter filter = new ItemDataNamePatternFilter(namePattern, session);
+
+ if (session.getAccessManager().hasPermission(nodeData().getACL(), new String[]{PermissionType.READ},
+ session.getUserState().getIdentity()))
+ {
+ if (childs.size() < session.getLazyReadThreshold())
+ {
+ // full iterator
+ List<PropertyImpl> props = new ArrayList<PropertyImpl>();
+ for (PropertyData child : childs)
+ {
+ if (filter.accept(child))
+ {
+ PropertyImpl item = (PropertyImpl)dataManager.readItem(child, nodeData(), true, false);
+ session.getActionHandler().postRead(item);
+ props.add(item);
+ }
+
+ }
+ return new EntityCollection(props);
+ }
+ else
+ {
+ // lazy iterator
+ return new LazyPropertyIterator(childPropertiesData(), filter);
+ }
+ }
+ else
+ {
+ // return empty
+ return new EntityCollection();
+ }
}
finally
{
@@ -2672,39 +2748,9 @@
*/
private List<NodeData> childNodesData() throws RepositoryException, AccessDeniedException
{
-
- //List<NodeData> storedNodes = dataManager.getChildNodesData(nodeData());
List<NodeData> storedNodes = new ArrayList<NodeData>(dataManager.getChildNodesData(nodeData()));
-
- // TODO we should not sort here!
Collections.sort(storedNodes, new NodeDataOrderComparator());
-
return storedNodes;
-
- // TODO cleanup
- // List<Object> results = new ArrayList<Object>(storedNodes.size());
- //
- // Iterator<NodeData> it = storedNodes.iterator();
- // while (it.hasNext())
- // {
- // NodeData node = it.next();
- //
- // if (session.getAccessManager().hasPermission(node.getACL(), new String[]{PermissionType.READ},
- // session.getUserState().getIdentity()))
- // {
- // ItemImpl pooled = dataManager.reloadItem(node);
- // if (pooled != null)
- // {
- // results.add(pooled);
- // }
- // else
- // {
- // results.add(node);
- // }
- // }
- // }
- //
- // return results;
}
private EntityCollection createMergeFailed(Map<String, String> failed, SessionChangesLog changes)
Modified: jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionDataManager.java
===================================================================
--- jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionDataManager.java 2010-01-08 12:03:33 UTC (rev 1322)
+++ jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionDataManager.java 2010-01-08 12:38:14 UTC (rev 1323)
@@ -592,7 +592,6 @@
{
PropertyData data = refDatas.get(i);
// check for permission for read
- // [PN] 21.12.07 use item data
NodeData parent = (NodeData)getItemData(data.getParentIdentifier());
// skip not permitted
if (accessManager.hasPermission(parent.getACL(), new String[]{PermissionType.READ}, session.getUserState()
@@ -609,12 +608,10 @@
}
item = (PropertyImpl)readItem(state.getData(), null, true, false);
- // TODO item = (PropertyImpl)itemFactory.createItem(state.getData());
}
else
{
item = (PropertyImpl)readItem(data, null, true, false);
- // TODO item = (PropertyImpl)itemFactory.createItem(data);
}
refs.add(item);
@@ -643,7 +640,9 @@
long start = System.currentTimeMillis();
if (log.isDebugEnabled())
+ {
log.debug("getChildNodes(" + parent.getQPath().getAsString() + ") >>>>>");
+ }
try
{
@@ -657,13 +656,8 @@
if (accessManager.hasPermission(data.getACL(), new String[]{PermissionType.READ}, session.getUserState()
.getIdentity()))
{
- //NodeImpl item = itemFactory.createNode(data, parent.getPrimaryTypeName(), parent.getMixinTypeNames());
NodeImpl item = (NodeImpl)readItem(data, parent, pool, false);
session.getActionHandler().postRead(item);
-
- //TODO if (pool)
- // item = (NodeImpl)itemsPool.get(item);
-
nodes.add(item);
}
}
@@ -672,8 +666,10 @@
finally
{
if (log.isDebugEnabled())
+ {
log.debug("getChildNodes(" + parent.getQPath().getAsString() + ") <<<<< "
+ ((System.currentTimeMillis() - start) / 1000d) + "sec");
+ }
}
}
@@ -708,15 +704,11 @@
for (int i = 0, length = propDatas.size(); i < length; i++)
{
PropertyData data = propDatas.get(i);
- //ItemImpl item = itemFactory.createItem(data);
if (accessManager.hasPermission(parent.getACL(), new String[]{PermissionType.READ}, session.getUserState()
.getIdentity()))
{
- // TODO if (pool)
- // item = itemsPool.get(item);
ItemImpl item = readItem(data, parent, pool, false);
session.getActionHandler().postRead(item);
-
props.add((PropertyImpl)item);
}
}
@@ -725,8 +717,10 @@
finally
{
if (log.isDebugEnabled())
+ {
log.debug("getChildProperties(" + parent.getQPath().getAsString() + ") <<<<< "
+ ((System.currentTimeMillis() - start) / 1000d) + "sec");
+ }
}
}
Modified: jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionImpl.java
===================================================================
--- jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionImpl.java 2010-01-08 12:03:33 UTC (rev 1322)
+++ jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionImpl.java 2010-01-08 12:38:14 UTC (rev 1323)
@@ -98,6 +98,8 @@
public class SessionImpl implements ExtendedSession, NamespaceAccessor
{
+ public static final int DEFAULT_LAZY_READ_THRESHOLD = 100;
+
private final RepositoryImpl repository;
private final ConversationState userState;
@@ -132,6 +134,8 @@
private long lastAccessTime;
+ private final int lazyReadThreshold;
+
private final SessionRegistry sessionRegistry;
protected final SessionDataManager dataManager;
@@ -154,6 +158,10 @@
this.accessManager = (AccessManager)container.getComponentInstanceOfType(AccessManager.class);
this.lockManager = (LockManagerImpl)container.getComponentInstanceOfType(LockManagerImpl.class);
WorkspaceEntry wsConfig = (WorkspaceEntry)container.getComponentInstanceOfType(WorkspaceEntry.class);
+
+ this.lazyReadThreshold =
+ wsConfig.getLazyReadThreshold() > 0 ? wsConfig.getLazyReadThreshold() : DEFAULT_LAZY_READ_THRESHOLD;
+
WorkspaceFileCleanerHolder cleanerHolder =
(WorkspaceFileCleanerHolder)container.getComponentInstanceOfType(WorkspaceFileCleanerHolder.class);
@@ -620,7 +628,7 @@
{
return getNamespaceURI(prefix);
}
-
+
/**
* {@inheritDoc}
*/
@@ -961,5 +969,10 @@
{
return this.userState;
}
+
+ int getLazyReadThreshold()
+ {
+ return lazyReadThreshold;
+ }
}
Modified: jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/resources/binding.xml
===================================================================
--- jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/resources/binding.xml 2010-01-08 12:03:33 UTC (rev 1322)
+++ jcr/branches/1.12.0-OPT/exo.jcr.component.core/src/main/resources/binding.xml 2010-01-08 12:38:14 UTC (rev 1323)
@@ -23,7 +23,8 @@
<value name="name" field="name" style="attribute" />
<value name="auto-init-root-nodetype" field="autoInitializedRootNt" style="attribute" usage="optional" />
<value name="auto-init-permissions" field="autoInitPermissions" style="attribute" usage="optional" />
-
+ <value name="lazy-read-threshold" field="lazyReadThreshold" usage="optional" />
+
<structure name="container" field="container">
<value name="class" field="type" style="attribute" />
<collection name="properties" field="parameters" usage="optional"
More information about the exo-jcr-commits
mailing list