Author: skabashnyuk
Date: 2009-12-07 11:03:16 -0500 (Mon, 07 Dec 2009)
New Revision: 935
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/DefaultChangesFilter.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/IndexerChangesFilter.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/QueryHandlerContext.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SearchManager.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SystemSearchManager.java
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/JbossCacheIndexChangesFilter.java
Log:
EXOJCR-283: System indexer logic changed
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/DefaultChangesFilter.java
===================================================================
---
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/DefaultChangesFilter.java 2009-12-07
14:27:08 UTC (rev 934)
+++
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/DefaultChangesFilter.java 2009-12-07
16:03:16 UTC (rev 935)
@@ -35,32 +35,38 @@
public class DefaultChangesFilter extends IndexerChangesFilter
{
/**
- * Logger instance for this class
- */
- private static final Log log = ExoLogger.getLogger(DefaultChangesFilter.class);
-
- /**
* @param searchManager
- * @param handler
+ * @param parentSearchManager
+ * @param config
* @param indexingTree
+ * @param parentIndexingTree
*/
- public DefaultChangesFilter(SearchManager searchManager, QueryHandlerEntry config,
IndexingTree indexingTree)
+ public DefaultChangesFilter(SearchManager searchManager, SearchManager
parentSearchManager,
+ QueryHandlerEntry config, IndexingTree indexingTree, IndexingTree
parentIndexingTree)
{
- super(searchManager, config, indexingTree);
+ super(searchManager, parentSearchManager, config, indexingTree,
parentIndexingTree);
+ // TODO Auto-generated constructor stub
}
/**
+ * Logger instance for this class
+ */
+ private static final Log log = ExoLogger.getLogger(DefaultChangesFilter.class);
+
+ /**
* @param removedNodes
* @param addedNodes
* @see
org.exoplatform.services.jcr.impl.core.query.IndexerChangesFilter#doUpdateIndex()
*/
@Override
- protected void doUpdateIndex(Set<String> removedNodes, Set<String>
addedNodes)
+ protected void doUpdateIndex(Set<String> removedNodes, Set<String>
addedNodes, Set<String> parentRemovedNodes,
+ Set<String> parentAddedNodes)
{
try
{
searchManager.updateIndex(removedNodes, addedNodes);
+ parentSearchManager.updateIndex(parentRemovedNodes, parentAddedNodes);
}
catch (RepositoryException e)
{
@@ -79,6 +85,27 @@
}
}
+ try
+ {
+ parentSearchManager.updateIndex(parentRemovedNodes, parentAddedNodes);
+ }
+ catch (RepositoryException e)
+ {
+ log.error("Error indexing changes " + e, e);
+ }
+ catch (IOException e)
+ {
+ log.error("Error indexing changes " + e, e);
+ try
+ {
+ parentHandler.logErrorChanges(removedNodes, addedNodes);
+ }
+ catch (IOException ioe)
+ {
+ log.warn("Exception occure when errorLog writed. Error log is not
complete. " + ioe, ioe);
+ }
+ }
+
}
}
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/IndexerChangesFilter.java
===================================================================
---
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/IndexerChangesFilter.java 2009-12-07
14:27:08 UTC (rev 934)
+++
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/IndexerChangesFilter.java 2009-12-07
16:03:16 UTC (rev 935)
@@ -51,19 +51,28 @@
protected QueryHandler handler;
+ protected QueryHandler parentHandler;
+
protected final IndexingTree indexingTree;
+ protected final SearchManager parentSearchManager;
+
+ protected final IndexingTree parentIndexingTree;
+
/**
* @param searchManager
+ * @param isSystem
* @param handler
* @param indexingTree
*/
- public IndexerChangesFilter(SearchManager searchManager, QueryHandlerEntry config,
IndexingTree indexingTree)
+ public IndexerChangesFilter(SearchManager searchManager, SearchManager
parentSearchManager,
+ QueryHandlerEntry config, IndexingTree indexingTree, IndexingTree
parentIndexingTree)
{
super();
this.searchManager = searchManager;
+ this.parentSearchManager = parentSearchManager;
this.config = config;
-
+ this.parentIndexingTree = parentIndexingTree;
this.indexingTree = indexingTree;
}
@@ -76,11 +85,11 @@
}
/**
- * @param handler the handler to set
+ * @return the indexingTree
*/
- public void setHandler(QueryHandler handler)
+ public IndexingTree getIndexingTree()
{
- this.handler = handler;
+ return indexingTree;
}
/**
@@ -92,14 +101,6 @@
}
/**
- * @return the indexingTree
- */
- public IndexingTree getIndexingTree()
- {
- return indexingTree;
- }
-
- /**
* @see
org.exoplatform.services.jcr.dataflow.persistent.ItemsPersistenceListener#onSaveItems(org.exoplatform.services.jcr.dataflow.ItemStateChangesLog)
*/
public void onSaveItems(ItemStateChangesLog itemStates)
@@ -111,85 +112,139 @@
final Set<String> removedNodes = new HashSet<String>();
// nodes that need to be added to the index.
final Set<String> addedNodes = new HashSet<String>();
-
+ //updated
final Map<String, List<ItemState>> updatedNodes = new
HashMap<String, List<ItemState>>();
+ final Set<String> parentRemovedNodes = new HashSet<String>();
+ // nodes that need to be added to the index.
+ final Set<String> parentAddedNodes = new HashSet<String>();
+ //updated
+ final Map<String, List<ItemState>> parentUpdatedNodes = new
HashMap<String, List<ItemState>>();
+
for (Iterator<ItemState> iter = itemStates.getAllStates().iterator();
iter.hasNext();)
{
ItemState itemState = iter.next();
if (!indexingTree.isExcluded(itemState))
{
- String uuid =
- itemState.isNode() ? itemState.getData().getIdentifier() :
itemState.getData().getParentIdentifier();
+ acceptChanges(removedNodes, addedNodes, updatedNodes, itemState);
+ }
+ else if (parentIndexingTree != null &&
!parentIndexingTree.isExcluded(itemState))
+ {
+ acceptChanges(parentRemovedNodes, parentAddedNodes, parentUpdatedNodes,
itemState);
+ }
+ }
- if (itemState.isAdded())
+ for (String uuid : updatedNodes.keySet())
+ {
+ removedNodes.add(uuid);
+ addedNodes.add(uuid);
+ }
+
+ for (String uuid : parentUpdatedNodes.keySet())
+ {
+ parentRemovedNodes.add(uuid);
+ parentAddedNodes.add(uuid);
+ }
+
+ doUpdateIndex(removedNodes, addedNodes, parentRemovedNodes, parentAddedNodes);
+ }
+
+ /**
+ * @param removedNodes
+ * @param addedNodes
+ * @param updatedNodes
+ * @param itemState
+ */
+ private void acceptChanges(final Set<String> removedNodes, final
Set<String> addedNodes,
+ final Map<String, List<ItemState>> updatedNodes, ItemState itemState)
+ {
+ {
+ String uuid =
+ itemState.isNode() ? itemState.getData().getIdentifier() :
itemState.getData().getParentIdentifier();
+
+ if (itemState.isAdded())
+ {
+ if (itemState.isNode())
{
- if (itemState.isNode())
- {
- addedNodes.add(uuid);
- }
- else
- {
- if (!addedNodes.contains(uuid))
- {
- createNewOrAdd(uuid, itemState, updatedNodes);
- }
- }
+ addedNodes.add(uuid);
}
- else if (itemState.isRenamed())
+ else
{
- if (itemState.isNode())
+ if (!addedNodes.contains(uuid))
{
- addedNodes.add(uuid);
- }
- else
- {
createNewOrAdd(uuid, itemState, updatedNodes);
}
}
- else if (itemState.isUpdated())
+ }
+ else if (itemState.isRenamed())
+ {
+ if (itemState.isNode())
{
- createNewOrAdd(uuid, itemState, updatedNodes);
+ addedNodes.add(uuid);
}
- else if (itemState.isMixinChanged())
+ else
{
createNewOrAdd(uuid, itemState, updatedNodes);
}
- else if (itemState.isDeleted())
+ }
+ else if (itemState.isUpdated())
+ {
+ createNewOrAdd(uuid, itemState, updatedNodes);
+ }
+ else if (itemState.isMixinChanged())
+ {
+ createNewOrAdd(uuid, itemState, updatedNodes);
+ }
+ else if (itemState.isDeleted())
+ {
+ if (itemState.isNode())
{
- if (itemState.isNode())
+ if (addedNodes.contains(uuid))
{
- if (addedNodes.contains(uuid))
- {
- addedNodes.remove(uuid);
- removedNodes.remove(uuid);
- }
- else
- {
- removedNodes.add(uuid);
- }
- // remove all changes after node remove
- updatedNodes.remove(uuid);
+ addedNodes.remove(uuid);
+ removedNodes.remove(uuid);
}
else
{
- if (!removedNodes.contains(uuid) &&
!addedNodes.contains(uuid))
- {
- createNewOrAdd(uuid, itemState, updatedNodes);
- }
+ removedNodes.add(uuid);
}
+ // remove all changes after node remove
+ updatedNodes.remove(uuid);
}
+ else
+ {
+ if (!removedNodes.contains(uuid) && !addedNodes.contains(uuid))
+ {
+ createNewOrAdd(uuid, itemState, updatedNodes);
+ }
+ }
}
}
+ }
- for (String uuid : updatedNodes.keySet())
- {
- removedNodes.add(uuid);
- addedNodes.add(uuid);
- }
+ /**
+ * @param handler the handler to set
+ */
+ public void setHandler(QueryHandler handler)
+ {
+ this.handler = handler;
+ }
- doUpdateIndex(removedNodes, addedNodes);
+ /**
+ * Update index.
+ * @param removedNodes
+ * @param addedNodes
+ */
+ protected abstract void doUpdateIndex(Set<String> removedNodes,
Set<String> addedNodes,
+ Set<String> parentRemovedNodes, Set<String> parentAddedNodes);
+
+ /**
+ * @param parentHandler the parentHandler to set
+ */
+ protected void setParentHandler(QueryHandler parentHandler)
+ {
+ this.parentHandler = parentHandler;
}
private void createNewOrAdd(String key, ItemState state, Map<String,
List<ItemState>> updatedNodes)
@@ -204,11 +259,4 @@
}
- /**
- * Update index.
- * @param removedNodes
- * @param addedNodes
- */
- protected abstract void doUpdateIndex(Set<String> removedNodes,
Set<String> addedNodes);
-
}
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/QueryHandlerContext.java
===================================================================
---
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/QueryHandlerContext.java 2009-12-07
14:27:08 UTC (rev 934)
+++
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/QueryHandlerContext.java 2009-12-07
16:03:16 UTC (rev 935)
@@ -28,175 +28,184 @@
* stable. This class provides access to the environment where the query handler
* is running in.
*/
-public class QueryHandlerContext {
- /**
- * The persistent <code>ItemStateManager</code>
- */
- private final ItemDataConsumer stateMgr;
+public class QueryHandlerContext
+{
+ /**
+ * The persistent <code>ItemStateManager</code>
+ */
+ private final ItemDataConsumer stateMgr;
- /**
- * The node type registry of the repository
- */
- private final NodeTypeDataManager nodeTypeDataManager;
+ /**
+ * The node type registry of the repository
+ */
+ private final NodeTypeDataManager nodeTypeDataManager;
- /**
- * The namespace registry of the repository.
- */
- private final NamespaceRegistryImpl nsRegistry;
+ /**
+ * The namespace registry of the repository.
+ */
+ private final NamespaceRegistryImpl nsRegistry;
- /**
- * The id of the root node.
- */
- private final IndexingTree indexingTree;
+ /**
+ * The id of the root node.
+ */
+ private final IndexingTree indexingTree;
- /**
- * PropertyType registry to look up the type of a property with a given
- * name.
- */
- private final PropertyTypeRegistry propRegistry;
+ /**
+ * PropertyType registry to look up the type of a property with a given
+ * name.
+ */
+ private final PropertyTypeRegistry propRegistry;
- /**
- * The query handler for the jcr:system tree
- */
- private final QueryHandler parentHandler;
+ /**
+ * The query handler for the jcr:system tree
+ */
+ private final QueryHandler parentHandler;
- /**
- * Text extractor for extracting text content of binary properties.
- */
- private final DocumentReaderService extractor;
+ /**
+ * Text extractor for extracting text content of binary properties.
+ */
+ private final DocumentReaderService extractor;
- private final String indexDirectory;
+ private final String indexDirectory;
- private final boolean createInitialIndex;
+ private final boolean createInitialIndex;
- private final LuceneVirtualTableResolver virtualTableResolver;
+ private final LuceneVirtualTableResolver virtualTableResolver;
- /**
- * Creates a new context instance.
- *
- * @param fs
- * a this <code>QueryHandler</code> may use to store its
index.
- * If no <code>FileSystem</code> has been configured
- * <code>fs</code> is <code>null</code>.
- * @param stateMgr
- * provides persistent item states.
- * @param rootId
- * the id of the root node.
- * @param ntRegistry
- * the node type registry.
- * @param nsRegistry
- * the namespace registry.
- * @param parentHandler
- * the parent query handler or <code>null</code> it there is
no
- * parent handler.
- * @param virtualTableResolver
- * @param excludedNodeId
- * id of the node that should be excluded from indexing. Any
- * descendant of that node is also excluded from indexing.
- */
- public QueryHandlerContext(ItemDataConsumer stateMgr,
- IndexingTree indexingTree, NodeTypeDataManager nodeTypeDataManager,
- NamespaceRegistryImpl nsRegistry, QueryHandler parentHandler,
- String indexDirectory, DocumentReaderService extractor,
- boolean createInitialIndex,
- LuceneVirtualTableResolver virtualTableResolver) {
- this.stateMgr = stateMgr;
- this.indexingTree = indexingTree;
- this.nodeTypeDataManager = nodeTypeDataManager;
- this.nsRegistry = nsRegistry;
- this.indexDirectory = indexDirectory;
- this.extractor = extractor;
- this.createInitialIndex = createInitialIndex;
- this.virtualTableResolver = virtualTableResolver;
- this.propRegistry = new PropertyTypeRegistry(nodeTypeDataManager);
- this.parentHandler = parentHandler;
- ((NodeTypeDataManagerImpl) this.nodeTypeDataManager)
- .addListener(propRegistry);
- }
+ /**
+ * Creates a new context instance.
+ *
+ * @param fs
+ * a this <code>QueryHandler</code> may use to store its
index.
+ * If no <code>FileSystem</code> has been configured
+ * <code>fs</code> is <code>null</code>.
+ * @param stateMgr
+ * provides persistent item states.
+ * @param rootId
+ * the id of the root node.
+ * @param ntRegistry
+ * the node type registry.
+ * @param nsRegistry
+ * the namespace registry.
+ * @param parentHandler
+ * the parent query handler or <code>null</code> it there is
no
+ * parent handler.
+ * @param virtualTableResolver
+ * @param excludedNodeId
+ * id of the node that should be excluded from indexing. Any
+ * descendant of that node is also excluded from indexing.
+ */
+ public QueryHandlerContext(ItemDataConsumer stateMgr, IndexingTree indexingTree,
+ NodeTypeDataManager nodeTypeDataManager, NamespaceRegistryImpl nsRegistry,
QueryHandler parentHandler,
+ String indexDirectory, DocumentReaderService extractor, boolean
createInitialIndex,
+ LuceneVirtualTableResolver virtualTableResolver)
+ {
+ this.stateMgr = stateMgr;
+ this.indexingTree = indexingTree;
+ this.nodeTypeDataManager = nodeTypeDataManager;
+ this.nsRegistry = nsRegistry;
+ this.indexDirectory = indexDirectory;
+ this.extractor = extractor;
+ this.createInitialIndex = createInitialIndex;
+ this.virtualTableResolver = virtualTableResolver;
+ this.propRegistry = new PropertyTypeRegistry(nodeTypeDataManager);
+ this.parentHandler = parentHandler;
+ ((NodeTypeDataManagerImpl)this.nodeTypeDataManager).addListener(propRegistry);
+ }
- /**
- * @return the virtualTableResolver
- */
- public LuceneVirtualTableResolver getVirtualTableResolver() {
- return virtualTableResolver;
- }
+ /**
+ * @return the virtualTableResolver
+ */
+ public LuceneVirtualTableResolver getVirtualTableResolver()
+ {
+ return virtualTableResolver;
+ }
- /**
- * @return the createInitialIndex
- */
- public boolean isCreateInitialIndex() {
- return createInitialIndex;
- }
+ /**
+ * @return the createInitialIndex
+ */
+ public boolean isCreateInitialIndex()
+ {
+ return createInitialIndex;
+ }
- /**
- * Returns the persistent {@link ItemStateManager} of the workspace this
- * <code>QueryHandler</code> is based on.
- *
- * @return the persistent <code>ItemStateManager</code> of the current
- * workspace.
- */
- public ItemDataConsumer getItemStateManager() {
- return stateMgr;
- }
+ /**
+ * Returns the persistent {@link ItemStateManager} of the workspace this
+ * <code>QueryHandler</code> is based on.
+ *
+ * @return the persistent <code>ItemStateManager</code> of the current
+ * workspace.
+ */
+ public ItemDataConsumer getItemStateManager()
+ {
+ return stateMgr;
+ }
- /**
- * Returns the id of the root node.
- *
- * @return the idof the root node.
- */
- public IndexingTree getIndexingTree() {
- return indexingTree;
- }
+ /**
+ * Returns the id of the root node.
+ *
+ * @return the idof the root node.
+ */
+ public IndexingTree getIndexingTree()
+ {
+ return indexingTree;
+ }
- /**
- * Returns the PropertyTypeRegistry for this repository.
- *
- * @return the PropertyTypeRegistry for this repository.
- */
- public PropertyTypeRegistry getPropertyTypeRegistry() {
- return propRegistry;
- }
+ /**
+ * Returns the PropertyTypeRegistry for this repository.
+ *
+ * @return the PropertyTypeRegistry for this repository.
+ */
+ public PropertyTypeRegistry getPropertyTypeRegistry()
+ {
+ return propRegistry;
+ }
- /**
- * Returns the NodeTypeRegistry for this repository.
- *
- * @return the NodeTypeRegistry for this repository.
- */
- public NodeTypeDataManager getNodeTypeDataManager() {
- return nodeTypeDataManager;
- }
+ /**
+ * Returns the NodeTypeRegistry for this repository.
+ *
+ * @return the NodeTypeRegistry for this repository.
+ */
+ public NodeTypeDataManager getNodeTypeDataManager()
+ {
+ return nodeTypeDataManager;
+ }
- /**
- * Returns the NamespaceRegistryImpl for this repository.
- *
- * @return the NamespaceRegistryImpl for this repository.
- */
- public NamespaceRegistryImpl getNamespaceRegistry() {
- return nsRegistry;
- }
+ /**
+ * Returns the NamespaceRegistryImpl for this repository.
+ *
+ * @return the NamespaceRegistryImpl for this repository.
+ */
+ public NamespaceRegistryImpl getNamespaceRegistry()
+ {
+ return nsRegistry;
+ }
- /**
- * Returns the parent query handler.
- *
- * @return the parent query handler.
- */
- public QueryHandler getParentHandler() {
- return parentHandler;
- }
+ /**
+ * Returns the parent query handler.
+ *
+ * @return the parent query handler.
+ */
+ public QueryHandler getParentHandler()
+ {
+ return parentHandler;
+ }
- /**
- * Destroys this context and releases resources.
- */
- public void destroy() {
- ((NodeTypeDataManagerImpl) this.nodeTypeDataManager)
- .removeListener(propRegistry);
- }
+ /**
+ * Destroys this context and releases resources.
+ */
+ public void destroy()
+ {
+ ((NodeTypeDataManagerImpl)this.nodeTypeDataManager).removeListener(propRegistry);
+ }
- public DocumentReaderService getExtractor() {
- return extractor;
- }
+ public DocumentReaderService getExtractor()
+ {
+ return extractor;
+ }
- public String getIndexDirectory() {
- return indexDirectory;
- }
+ public String getIndexDirectory()
+ {
+ return indexDirectory;
+ }
}
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SearchManager.java
===================================================================
---
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SearchManager.java 2009-12-07
14:27:08 UTC (rev 934)
+++
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SearchManager.java 2009-12-07
16:03:16 UTC (rev 935)
@@ -130,19 +130,20 @@
*/
protected final SearchManager parentSearchManager;
- // protected QPath indexingRoot;
- //
- // protected List<QPath> excludedPaths = new ArrayList<QPath>();
-
protected IndexingTree indexingTree;
private final ConfigurationManager cfm;
protected LuceneVirtualTableResolver virtualTableResolver;
- private IndexerChangesFilter changesFilter;
+ protected IndexerChangesFilter changesFilter;
/**
+ * ChangesLog Buffer (used for saves before start).
+ */
+ private List<ItemStateChangesLog> changesLogBuffer = new
ArrayList<ItemStateChangesLog>();
+
+ /**
* Creates a new <code>SearchManager</code>.
*
* @param config
@@ -181,8 +182,10 @@
this.cfm = cfm;
this.virtualTableResolver = new LuceneVirtualTableResolver(nodeTypeDataManager,
nsReg);
this.parentSearchManager = parentSearchManager != null ? parentSearchManager.get()
: null;
- //indexInterceptor.addIndexInterceptorListener(this);
- ((WorkspacePersistentDataManager)this.itemMgr).addItemPersistenceListener(this);
+ if (parentSearchManager != null)
+ {
+
((WorkspacePersistentDataManager)this.itemMgr).addItemPersistenceListener(this);
+ }
}
public void createNewOrAdd(String key, ItemState state, Map<String,
List<ItemState>> updatedNodes)
@@ -376,8 +379,13 @@
{
//Check if SearchManager started
if (changesFilter == null)
- return;
- changesFilter.onSaveItems(itemStates);
+ {
+ changesLogBuffer.add(itemStates);
+ }
+ else
+ {
+ changesFilter.onSaveItems(itemStates);
+ }
}
@@ -487,6 +495,17 @@
}
initializeChangesFilter();
initializeQueryHandler();
+
+ if (changesLogBuffer.size() > 0)
+ {
+ for (ItemStateChangesLog bufferedChangesLog : changesLogBuffer)
+ {
+ onSaveItems(bufferedChangesLog);
+ }
+ changesLogBuffer.clear();
+ changesLogBuffer = null;
+ }
+
}
catch (RepositoryException e)
{
@@ -653,6 +672,14 @@
}
/**
+ * @return the indexingTree
+ */
+ protected IndexingTree getIndexingTree()
+ {
+ return indexingTree;
+ }
+
+ /**
* Initialize changes filter.
* @throws RepositoryException
* @throws RepositoryConfigurationException
@@ -674,8 +701,19 @@
.getClassLoader());
}
Constructor<? extends IndexerChangesFilter> constuctor =
- changesFilterClass.getConstructor(SearchManager.class,
QueryHandlerEntry.class, IndexingTree.class);
- changesFilter = constuctor.newInstance(this, config, indexingTree);
+ changesFilterClass.getConstructor(SearchManager.class, SearchManager.class,
QueryHandlerEntry.class,
+ IndexingTree.class, IndexingTree.class);
+ if (parentSearchManager != null)
+ {
+ changesFilter =
+ constuctor.newInstance(this, parentSearchManager, config, indexingTree,
parentSearchManager
+ .getIndexingTree());
+ }
+ else
+ {
+ changesFilter = constuctor.newInstance(this, null, config, indexingTree,
null);
+ }
+
}
catch (SecurityException e)
{
@@ -731,6 +769,10 @@
QueryHandlerContext context = createQueryHandlerContext(parentHandler);
handler.init(context);
changesFilter.setHandler(handler);
+ if (parentSearchManager != null)
+ {
+ changesFilter.setParentHandler(parentSearchManager.getHandler());
+ }
}
catch (SecurityException e)
{
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SystemSearchManager.java
===================================================================
---
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SystemSearchManager.java 2009-12-07
14:27:08 UTC (rev 934)
+++
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SystemSearchManager.java 2009-12-07
16:03:16 UTC (rev 935)
@@ -21,7 +21,6 @@
import org.exoplatform.services.jcr.config.QueryHandlerEntry;
import org.exoplatform.services.jcr.config.RepositoryConfigurationException;
import org.exoplatform.services.jcr.core.nodetype.NodeTypeDataManager;
-import org.exoplatform.services.jcr.dataflow.ItemStateChangesLog;
import org.exoplatform.services.jcr.datamodel.NodeData;
import org.exoplatform.services.jcr.datamodel.QPath;
import org.exoplatform.services.jcr.impl.Constants;
@@ -29,7 +28,6 @@
import
org.exoplatform.services.jcr.impl.dataflow.persistent.WorkspacePersistentDataManager;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
-import org.jboss.cache.commands.WriteCommand;
import java.util.ArrayList;
import java.util.List;
@@ -56,16 +54,17 @@
*/
private boolean isStarted = false;
- /**
- * ChangesLog Buffer (used for saves before start).
- */
- private List<ItemStateChangesLog> changesLogBuffer = new
ArrayList<ItemStateChangesLog>();
+ //
+ // /**
+ // * ChangesLog Buffer (used for saves before start).
+ // */
+ // private List<ItemStateChangesLog> changesLogBuffer = new
ArrayList<ItemStateChangesLog>();
+ //
+ // /**
+ // * ChangesLog Buffer (used for saves before start).
+ // */
+ // private List<List<WriteCommand>> writeCommandBuffer = new
ArrayList<List<WriteCommand>>();
- /**
- * ChangesLog Buffer (used for saves before start).
- */
- private List<List<WriteCommand>> writeCommandBuffer = new
ArrayList<List<WriteCommand>>();
-
public static final String INDEX_DIR_SUFFIX = "system";
public SystemSearchManager(QueryHandlerEntry config, NamespaceRegistryImpl nsReg,
NodeTypeDataManager ntReg,
@@ -75,114 +74,167 @@
super(config, nsReg, ntReg, itemMgr, null, service, cfm, indexSearcherHolder);
}
+ // @Override
+ // public void onSaveItems(ItemStateChangesLog changesLog)
+ // {
+ // if (!isStarted)
+ // {
+ // changesLogBuffer.add(changesLog);
+ // }
+ // else
+ // {
+ // super.onSaveItems(changesLog);
+ // }
+ // }
+
@Override
- public void onSaveItems(ItemStateChangesLog changesLog)
+ public void start()
{
if (!isStarted)
{
- changesLogBuffer.add(changesLog);
- }
- else
- {
- super.onSaveItems(changesLog);
- }
- }
- @Override
- public void start()
- {
-
- isStarted = true;
- try
- {
- if (indexingTree == null)
+ try
{
- List<QPath> excludedPaths = new ArrayList<QPath>();
+ if (indexingTree == null)
+ {
+ List<QPath> excludedPaths = new ArrayList<QPath>();
- NodeData indexingRootNodeData =
(NodeData)itemMgr.getItemData(Constants.SYSTEM_UUID);
+ NodeData indexingRootNodeData =
(NodeData)itemMgr.getItemData(Constants.SYSTEM_UUID);
- indexingTree = new IndexingTree(indexingRootNodeData, excludedPaths);
- }
- initializeChangesFilter();
- initializeQueryHandler();
+ indexingTree = new IndexingTree(indexingRootNodeData, excludedPaths);
+ }
+ initializeChangesFilter();
+ initializeQueryHandler();
- }
-
- catch (RepositoryException e)
- {
- log.error(e.getLocalizedMessage());
- handler = null;
- freeBuffers();
- throw new RuntimeException(e);
- }
- catch (RepositoryConfigurationException e)
- {
- log.error(e.getLocalizedMessage());
- handler = null;
- freeBuffers();
- throw new RuntimeException(e);
- }
- if (changesLogBuffer.size() > 0)
- {
- for (ItemStateChangesLog bufferedChangesLog : changesLogBuffer)
- {
- super.onSaveItems(bufferedChangesLog);
}
- }
-
- if (writeCommandBuffer.size() > 0)
- {
- try
+ catch (RepositoryException e)
{
- for (List<WriteCommand> bufferedWriteLog : writeCommandBuffer)
- {
- super.onSaveItems(bufferedWriteLog);
- }
+ log.error(e.getLocalizedMessage());
+ handler = null;
+ //freeBuffers();
+ throw new RuntimeException(e);
}
- catch (RepositoryException e)
+ catch (RepositoryConfigurationException e)
{
- freeBuffers();
+ log.error(e.getLocalizedMessage());
+ handler = null;
+ //freeBuffers();
throw new RuntimeException(e);
-
}
+ isStarted = true;
}
- freeBuffers();
+ // if (changesLogBuffer.size() > 0)
+ // {
+ // for (ItemStateChangesLog bufferedChangesLog : changesLogBuffer)
+ // {
+ // super.onSaveItems(bufferedChangesLog);
+ // }
+ //
+ // }
+ //
+ // if (writeCommandBuffer.size() > 0)
+ // {
+ // try
+ // {
+ // for (List<WriteCommand> bufferedWriteLog : writeCommandBuffer)
+ // {
+ // super.onSaveItems(bufferedWriteLog);
+ // }
+ // }
+ // catch (RepositoryException e)
+ // {
+ // freeBuffers();
+ // throw new RuntimeException(e);
+ //
+ // }
+ // }
+ // freeBuffers();
}
- private void freeBuffers()
- {
- changesLogBuffer.clear();
- changesLogBuffer = null;
- writeCommandBuffer.clear();
- writeCommandBuffer = null;
- }
+ // /**
+ // * @see
org.exoplatform.services.jcr.impl.core.query.SearchManager#initializeChangesFilter()
+ // */
+ // @Override
+ // protected void initializeChangesFilter() throws RepositoryException,
RepositoryConfigurationException
+ // {
+ // Class<? extends IndexerChangesFilter> changesFilterClass =
DefaultChangesFilter.class;
+ // String changesFilterClassName =
config.getParameterValue(QueryHandlerParams.PARAM_CHANGES_FILTER_CLASS, null);
+ // try
+ // {
+ // if (changesFilterClassName != null)
+ // {
+ // changesFilterClass =
+ // (Class<? extends
IndexerChangesFilter>)Class.forName(changesFilterClassName, true, this.getClass()
+ // .getClassLoader());
+ // }
+ // Constructor<? extends IndexerChangesFilter> constuctor =
+ // changesFilterClass.getConstructor(SearchManager.class,
QueryHandlerEntry.class, Boolean.class,
+ // IndexingTree.class);
+ // changesFilter = constuctor.newInstance(this, config, true, indexingTree);
+ // }
+ // catch (SecurityException e)
+ // {
+ // throw new RepositoryException(e.getMessage(), e);
+ // }
+ // catch (IllegalArgumentException e)
+ // {
+ // throw new RepositoryException(e.getMessage(), e);
+ // }
+ // catch (ClassNotFoundException e)
+ // {
+ // throw new RepositoryException(e.getMessage(), e);
+ // }
+ // catch (NoSuchMethodException e)
+ // {
+ // throw new RepositoryException(e.getMessage(), e);
+ // }
+ // catch (InstantiationException e)
+ // {
+ // throw new RepositoryException(e.getMessage(), e);
+ // }
+ // catch (IllegalAccessException e)
+ // {
+ // throw new RepositoryException(e.getMessage(), e);
+ // }
+ // catch (InvocationTargetException e)
+ // {
+ // throw new RepositoryException(e.getMessage(), e);
+ // }
+ // }
+ // private void freeBuffers()
+ // {
+ // changesLogBuffer.clear();
+ // changesLogBuffer = null;
+ // writeCommandBuffer.clear();
+ // writeCommandBuffer = null;
+ // }
+
@Override
protected QueryHandlerContext createQueryHandlerContext(QueryHandler parentHandler)
throws RepositoryConfigurationException
{
QueryHandlerContext context =
new QueryHandlerContext(itemMgr, indexingTree, nodeTypeDataManager, nsReg,
parentHandler, getIndexDir() + "_"
- + INDEX_DIR_SUFFIX, extractor,
- (changesLogBuffer.size() > 0 || writeCommandBuffer.size() > 0)
&& !isStarted, virtualTableResolver);
+ + INDEX_DIR_SUFFIX, extractor, true, virtualTableResolver);
return context;
}
-
- /* (non-Javadoc)
- * @see
org.exoplatform.services.jcr.impl.core.query.SearchManager#onSaveItems(java.util.List)
- */
- @Override
- public void onSaveItems(List<WriteCommand> modifications) throws
RepositoryException
- {
- if (!isStarted)
- {
- writeCommandBuffer.add(modifications);
- }
- else
- {
- super.onSaveItems(modifications);
- }
-
- }
+ //
+ // /* (non-Javadoc)
+ // * @see
org.exoplatform.services.jcr.impl.core.query.SearchManager#onSaveItems(java.util.List)
+ // */
+ // @Override
+ // public void onSaveItems(List<WriteCommand> modifications) throws
RepositoryException
+ // {
+ // if (!isStarted)
+ // {
+ // writeCommandBuffer.add(modifications);
+ // }
+ // else
+ // {
+ // super.onSaveItems(modifications);
+ // }
+ //
+ // }
}
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/JbossCacheIndexChangesFilter.java
===================================================================
---
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/JbossCacheIndexChangesFilter.java 2009-12-07
14:27:08 UTC (rev 934)
+++
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/jbosscache/JbossCacheIndexChangesFilter.java 2009-12-07
16:03:16 UTC (rev 935)
@@ -53,10 +53,11 @@
* @param indexingTree
* @throws RepositoryConfigurationException
*/
- public JbossCacheIndexChangesFilter(SearchManager searchManager, QueryHandlerEntry
config, IndexingTree indexingTree)
+ public JbossCacheIndexChangesFilter(SearchManager searchManager, SearchManager
parentSearchManager,
+ QueryHandlerEntry config, IndexingTree indexingTree, IndexingTree
parentIndexingTree)
throws RepositoryConfigurationException
{
- super(searchManager, config, indexingTree);
+ super(searchManager, parentSearchManager, config, indexingTree,
parentIndexingTree);
String jbcConfig =
config.getParameterValue(QueryHandlerParams.PARAM_CHANGES_FILTER_CONFIG_PATH);
CacheFactory<Serializable, Object> factory = new
DefaultCacheFactory<Serializable, Object>();
log.info("JBoss Cache configuration used: " + jbcConfig);
@@ -67,12 +68,13 @@
}
/**
- * @see
org.exoplatform.services.jcr.impl.core.query.IndexerChangesFilter#doUpdateIndex(java.util.Set,
java.util.Set)
+ * @see
org.exoplatform.services.jcr.impl.core.query.IndexerChangesFilter#doUpdateIndex(java.util.Set,
java.util.Set, java.util.Set, java.util.Set)
*/
@Override
- protected void doUpdateIndex(Set<String> removedNodes, Set<String>
addedNodes)
+ protected void doUpdateIndex(Set<String> removedNodes, Set<String>
addedNodes, Set<String> parentRemovedNodes,
+ Set<String> parentAddedNodes)
{
- //write changes
+ // TODO Auto-generated method stub
}