Author: skabashnyuk
Date: 2009-11-28 16:33:31 -0500 (Sat, 28 Nov 2009)
New Revision: 904
Modified:
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SystemSearchManager.java
Log:
EXOJCR-241: fixed indexing of the jcr:system. Now all test pass
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-11-28
00:05:57 UTC (rev 903)
+++
jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SystemSearchManager.java 2009-11-28
21:33:31 UTC (rev 904)
@@ -30,6 +30,7 @@
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;
@@ -61,12 +62,17 @@
*/
private List<ItemStateChangesLog> changesLogBuffer = new
ArrayList<ItemStateChangesLog>();
+ /**
+ * 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,
WorkspacePersistentDataManager itemMgr, DocumentReaderService service,
ConfigurationManager cfm,
- RepositoryIndexSearcherHolder indexSearcherHolder, IndexerInterceptor
indexInterceptor) throws RepositoryException,
- RepositoryConfigurationException
+ RepositoryIndexSearcherHolder indexSearcherHolder, IndexerInterceptor
indexInterceptor)
+ throws RepositoryException, RepositoryConfigurationException
{
super(config, nsReg, ntReg, itemMgr, null, service, cfm, indexSearcherHolder,
indexInterceptor);
}
@@ -107,24 +113,50 @@
{
log.error(e.getLocalizedMessage());
handler = null;
- changesLogBuffer.clear();
- changesLogBuffer = null;
+ freeBuffers();
throw new RuntimeException(e);
}
catch (RepositoryConfigurationException e)
{
log.error(e.getLocalizedMessage());
handler = null;
- changesLogBuffer.clear();
- changesLogBuffer = null;
+ freeBuffers();
throw new RuntimeException(e);
}
- for (ItemStateChangesLog bufferedChangesLog : changesLogBuffer)
+ if (changesLogBuffer.size() > 0)
{
- super.onSaveItems(bufferedChangesLog);
+ 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;
}
@Override
@@ -133,7 +165,25 @@
{
QueryHandlerContext context =
new QueryHandlerContext(itemMgr, indexingTree, nodeTypeDataManager, nsReg,
parentHandler, getIndexDir() + "_"
- + INDEX_DIR_SUFFIX, extractor, changesLogBuffer.size() > 0 &&
!isStarted, virtualTableResolver);
+ + INDEX_DIR_SUFFIX, extractor,
+ (changesLogBuffer.size() > 0 || writeCommandBuffer.size() > 0)
&& !isStarted, 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);
+ }
+
+ }
}