[exo-jcr-commits] exo-jcr SVN: r720 - in jcr/branches/1.12.0-JBC/component/core/src: main/java/org/exoplatform/services/jcr/impl/core/query and 4 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Tue Nov 17 11:07:54 EST 2009


Author: skabashnyuk
Date: 2009-11-17 11:07:53 -0500 (Tue, 17 Nov 2009)
New Revision: 720

Added:
   jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/cacheloader/IndexInterceptor.java
   jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/cacheloader/IndexModificationsBuilder.java
Removed:
   jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SearchManagerHolder.java
Modified:
   jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/RepositoryContainer.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/cacheloader/IndexerCacheLoader.java
   jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheWorkspaceDataContainer.java
   jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/IndexerCacheLoaderRuntimeTest.java
   jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/IndexerCacheLoaderTest.java
   jcr/branches/1.12.0-JBC/component/core/src/test/resources/conf/standalone/test-jbosscache-config-exoloader.xml
Log:
EXOJCR-241 : IndexInterceptor initial implementation

Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/RepositoryContainer.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/RepositoryContainer.java	2009-11-17 13:17:40 UTC (rev 719)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/RepositoryContainer.java	2009-11-17 16:07:53 UTC (rev 720)
@@ -48,9 +48,9 @@
 import org.exoplatform.services.jcr.impl.core.query.QueryManagerFactory;
 import org.exoplatform.services.jcr.impl.core.query.RepositoryIndexSearcherHolder;
 import org.exoplatform.services.jcr.impl.core.query.SearchManager;
-import org.exoplatform.services.jcr.impl.core.query.SearchManagerHolder;
 import org.exoplatform.services.jcr.impl.core.query.SystemSearchManager;
 import org.exoplatform.services.jcr.impl.core.query.SystemSearchManagerHolder;
+import org.exoplatform.services.jcr.impl.core.query.cacheloader.IndexInterceptor;
 import org.exoplatform.services.jcr.impl.core.value.ValueFactoryImpl;
 import org.exoplatform.services.jcr.impl.dataflow.persistent.JBossCacheWorkspaceDataManager;
 import org.exoplatform.services.jcr.impl.dataflow.persistent.LocalWorkspaceDataManagerStub;
@@ -221,7 +221,8 @@
             //so IndexerCacheLoader will use it.
             //registerComponentInstance(new SearchManagerHolder());
             // workspaceContainer.registerComponentImplementation(SearchManagerHolder.class);
-            workspaceContainer.registerComponentInstance(new SearchManagerHolder());
+            workspaceContainer.registerComponentImplementation(IndexInterceptor.class);
+
             if (isSystem)
             {
                //registerComponentInstance(new SearchManagerHolder());

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-11-17 13:17:40 UTC (rev 719)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SearchManager.java	2009-11-17 16:07:53 UTC (rev 720)
@@ -42,6 +42,8 @@
 import org.exoplatform.services.jcr.impl.core.NamespaceRegistryImpl;
 import org.exoplatform.services.jcr.impl.core.SessionDataManager;
 import org.exoplatform.services.jcr.impl.core.SessionImpl;
+import org.exoplatform.services.jcr.impl.core.query.cacheloader.IndexInterceptor;
+import org.exoplatform.services.jcr.impl.core.query.cacheloader.IndexModificationsBuilder;
 import org.exoplatform.services.jcr.impl.core.query.lucene.FieldNames;
 import org.exoplatform.services.jcr.impl.core.query.lucene.LuceneVirtualTableResolver;
 import org.exoplatform.services.jcr.impl.core.query.lucene.QueryHits;
@@ -54,6 +56,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 org.jboss.cache.factories.annotations.NonVolatile;
 import org.picocontainer.Startable;
 
@@ -165,7 +168,7 @@
    public SearchManager(QueryHandlerEntry config, NamespaceRegistryImpl nsReg, NodeTypeDataManager ntReg,
       WorkspacePersistentDataManager itemMgr, SystemSearchManagerHolder parentSearchManager,
       DocumentReaderService extractor, ConfigurationManager cfm,
-      final RepositoryIndexSearcherHolder indexSearcherHolder, final SearchManagerHolder searchManagerHolder)
+      final RepositoryIndexSearcherHolder indexSearcherHolder, IndexInterceptor indexInterceptor)
       throws RepositoryException, RepositoryConfigurationException
    {
 
@@ -178,8 +181,9 @@
       this.cfm = cfm;
       this.virtualTableResolver = new LuceneVirtualTableResolver(nodeTypeDataManager, nsReg);
       this.parentSearchManager = parentSearchManager != null ? parentSearchManager.get() : null;
-      itemMgr.addItemPersistenceListener(this);
-      searchManagerHolder.put(this);
+      //itemMgr.addItemPersistenceListener(this);
+      //searchManagerHolder.put(this);
+      indexInterceptor.addIndexInterceptorListener(this);
    }
 
    /**
@@ -243,6 +247,41 @@
       return handler;
    }
 
+   public void onSaveItems(List<WriteCommand> modifications) throws RepositoryException
+   {
+      try
+      {
+         // nodes that need to be removed from the index.
+         HashSet<String> removedNodes = new HashSet<String>();
+
+         // nodes that need to be added to the index.
+         HashSet<String> addedNodes = new HashSet<String>();
+
+         // node thst must be updated
+         HashSet<String> updateNodes = new HashSet<String>();
+
+         IndexModificationsBuilder indexModificationsBuilder =
+            new IndexModificationsBuilder(addedNodes, removedNodes, updateNodes);
+         for (WriteCommand cacheCommand : modifications)
+         {
+            cacheCommand.acceptVisitor(null, indexModificationsBuilder);
+         }
+
+         for (String uuid : updateNodes)
+         {
+            removedNodes.add(uuid);
+            addedNodes.add(uuid);
+         }
+
+         updateIndex(removedNodes, addedNodes);
+      }
+      catch (Throwable e)
+      {
+         e.printStackTrace();
+         throw new RepositoryException(e.getLocalizedMessage(), e.getCause());
+      }
+   }
+
    public void onSaveItems(ItemStateChangesLog changesLog)
    {
       Exception es = new Exception();

Deleted: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SearchManagerHolder.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SearchManagerHolder.java	2009-11-17 13:17:40 UTC (rev 719)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SearchManagerHolder.java	2009-11-17 16:07:53 UTC (rev 720)
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2003-2009 eXo Platform SAS.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Affero General Public License
- * as published by the Free Software Foundation; either version 3
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, see<http://www.gnu.org/licenses/>.
- */
-package org.exoplatform.services.jcr.impl.core.query;
-
-import org.jboss.cache.factories.annotations.NonVolatile;
-
-/**
- * Created by The eXo Platform SAS.
- * 
- * <br/>Date: 
- *
- * @author <a href="karpenko.sergiy at gmail.com">Karpenko Sergiy</a> 
- * @version $Id: SearchManagerHolder.java 111 2008-11-11 11:11:11Z serg $
- */
- at NonVolatile
-public class SearchManagerHolder
-{
-   protected SearchManager manager;
-
-   public SearchManagerHolder()
-   {
-   }
-
-   public void put(SearchManager manager)
-   {
-      this.manager = manager;
-   }
-
-   public SearchManager get()
-   {
-      return manager;
-   }
-}

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-17 13:17:40 UTC (rev 719)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/SystemSearchManager.java	2009-11-17 16:07:53 UTC (rev 720)
@@ -26,6 +26,7 @@
 import org.exoplatform.services.jcr.datamodel.QPath;
 import org.exoplatform.services.jcr.impl.Constants;
 import org.exoplatform.services.jcr.impl.core.NamespaceRegistryImpl;
+import org.exoplatform.services.jcr.impl.core.query.cacheloader.IndexInterceptor;
 import org.exoplatform.services.jcr.impl.dataflow.persistent.WorkspacePersistentDataManager;
 import org.exoplatform.services.log.ExoLogger;
 import org.exoplatform.services.log.Log;
@@ -64,10 +65,10 @@
 
    public SystemSearchManager(QueryHandlerEntry config, NamespaceRegistryImpl nsReg, NodeTypeDataManager ntReg,
       WorkspacePersistentDataManager itemMgr, DocumentReaderService service, ConfigurationManager cfm,
-      RepositoryIndexSearcherHolder indexSearcherHolder, SearchManagerHolder holder) throws RepositoryException,
+      RepositoryIndexSearcherHolder indexSearcherHolder, IndexInterceptor indexInterceptor) throws RepositoryException,
       RepositoryConfigurationException
    {
-      super(config, nsReg, ntReg, itemMgr, null, service, cfm, indexSearcherHolder, holder);
+      super(config, nsReg, ntReg, itemMgr, null, service, cfm, indexSearcherHolder, indexInterceptor);
    }
 
    @Override

Added: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/cacheloader/IndexInterceptor.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/cacheloader/IndexInterceptor.java	                        (rev 0)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/cacheloader/IndexInterceptor.java	2009-11-17 16:07:53 UTC (rev 720)
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.exoplatform.services.jcr.impl.core.query.cacheloader;
+
+import org.exoplatform.services.jcr.impl.core.query.SearchManager;
+import org.exoplatform.services.log.ExoLogger;
+import org.exoplatform.services.log.Log;
+import org.jboss.cache.InvocationContext;
+import org.jboss.cache.commands.tx.PrepareCommand;
+import org.jboss.cache.interceptors.base.CommandInterceptor;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author <a href="mailto:Sergey.Kabashnyuk at exoplatform.org">Sergey Kabashnyuk</a>
+ * @version $Id: exo-jboss-codetemplates.xml 34360 2009-07-22 23:58:59Z ksm $
+ *
+ */
+public class IndexInterceptor extends CommandInterceptor
+{
+   private final Log log = ExoLogger.getLogger(IndexInterceptor.class);
+
+   /**
+    * List of index interceptor listeners.
+    */
+   private final List<SearchManager> indexInterceptorListners;
+
+   /**
+    * Default constructor.
+    */
+   public IndexInterceptor()
+   {
+      super();
+      this.indexInterceptorListners = new ArrayList<SearchManager>();
+   }
+
+   /**
+    * @see org.jboss.cache.commands.AbstractVisitor#visitPrepareCommand(org.jboss.cache.InvocationContext, org.jboss.cache.commands.tx.PrepareCommand)
+    */
+   @Override
+   public Object visitPrepareCommand(InvocationContext ctx, PrepareCommand command) throws Throwable
+   {
+      //      try
+      //      {
+      //         if (ctx.getTransactionContext().getModifications().size() > 0)
+      //         {
+      //            for (SearchManager searchManager : indexInterceptorListners)
+      //            {
+      //               searchManager.onSaveItems(ctx.getTransactionContext().getModifications());
+      //            }
+      //         }
+      //      }
+      //      catch (RepositoryException e)
+      //      {
+      //         //TODO handle rollback
+      //         log.error(e.getLocalizedMessage());
+      //      }
+
+      return invokeNextInterceptor(ctx, command);
+   }
+
+   /**
+    * Add new SearchManager to the indexInterceptorListners list.
+    * @param searchManager - search manager.
+    */
+   public void addIndexInterceptorListener(SearchManager searchManager)
+   {
+      indexInterceptorListners.add(searchManager);
+   }
+
+   /**
+    * Add new SearchManager to the indexInterceptorListners list.
+    * @param searchManager - search manager.
+    */
+   public boolean removeIndexInterceptorListener(SearchManager searchManager)
+   {
+      return indexInterceptorListners.remove(searchManager);
+   }
+}


Property changes on: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/cacheloader/IndexInterceptor.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Added: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/cacheloader/IndexModificationsBuilder.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/cacheloader/IndexModificationsBuilder.java	                        (rev 0)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/cacheloader/IndexModificationsBuilder.java	2009-11-17 16:07:53 UTC (rev 720)
@@ -0,0 +1,215 @@
+/*
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.exoplatform.services.jcr.impl.core.query.cacheloader;
+
+import org.exoplatform.services.jcr.datamodel.PropertyData;
+import org.exoplatform.services.jcr.impl.storage.jbosscache.JBossCacheStorage;
+import org.jboss.cache.Fqn;
+import org.jboss.cache.InvocationContext;
+import org.jboss.cache.commands.AbstractVisitor;
+import org.jboss.cache.commands.write.ClearDataCommand;
+import org.jboss.cache.commands.write.MoveCommand;
+import org.jboss.cache.commands.write.PutDataMapCommand;
+import org.jboss.cache.commands.write.PutKeyValueCommand;
+import org.jboss.cache.commands.write.RemoveKeyCommand;
+import org.jboss.cache.commands.write.RemoveNodeCommand;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * @author <a href="mailto:Sergey.Kabashnyuk at exoplatform.org">Sergey Kabashnyuk</a>
+ * @version $Id: exo-jboss-codetemplates.xml 34360 2009-07-22 23:58:59Z ksm $
+ *
+ */
+public class IndexModificationsBuilder extends AbstractVisitor
+{
+
+   // nodes that need to be removed from the index.
+   private final Set<String> removedNodes;
+
+   // nodes that need to be added to the index.
+   private final Set<String> addedNodes;
+
+   // node thst must be updated
+   private final Set<String> updateNodes;
+
+   public IndexModificationsBuilder(HashSet<String> addedNodes, HashSet<String> removedNodes,
+      HashSet<String> updateNodes)
+   {
+      // nodes that need to be removed from the index.
+      this.removedNodes = removedNodes;
+
+      // nodes that need to be added to the index.
+      this.addedNodes = addedNodes;
+
+      // node thst must be updated
+      this.updateNodes = updateNodes;
+
+   }
+
+   @Override
+   public Object visitClearDataCommand(InvocationContext ctx, ClearDataCommand command) throws Throwable
+   {
+      Fqn fqn = command.getFqn();
+      if (fqn.size() == 2)
+      {
+
+         if (isNode(fqn))
+         {
+            // add node
+            String uuid = parseUUID(fqn);
+            removedNodes.add(uuid);
+         }
+      }
+      return null;
+   }
+
+   @Override
+   public Object visitMoveCommand(InvocationContext ctx, MoveCommand command) throws Throwable
+   {
+      Fqn fqn = command.getFqn();
+      if (fqn.size() == 2)
+      {
+
+         if (isNode(fqn))
+         {
+            //remove first
+            removedNodes.add(parseUUID(command.getFqn()));
+            //add second
+            addedNodes.add(parseUUID(command.getTo()));
+         }
+         else
+         {
+            // this is property - do nothing
+         }
+      }
+      return null;
+   }
+
+   @Override
+   public Object visitPutDataMapCommand(InvocationContext ctx, PutDataMapCommand command) throws Throwable
+   {
+
+      Fqn fqn = command.getFqn();
+      if (fqn.size() == 2)
+      {
+
+         if (isNode(fqn))
+         {
+            // add node
+            String uuid = parseUUID(fqn);
+            addedNodes.add(uuid);
+         }
+         else
+         {
+            // this is property - do nothing
+         }
+      }
+      return null;
+   }
+
+   @Override
+   public Object visitPutKeyValueCommand(InvocationContext ctx, PutKeyValueCommand command) throws Throwable
+   {
+      Fqn fqn = command.getFqn();
+      if (fqn.size() == 2)
+      {
+         String uuid = parseUUID(fqn);
+         if (!isNode(fqn))
+         {
+            PropertyData property = (PropertyData)command.getValue();
+            uuid = property.getParentIdentifier();
+         }
+         if (!addedNodes.contains(uuid))
+         {
+            updateNodes.add(uuid);
+         }
+
+      }
+      return null;
+
+   }
+
+   @Override
+   public Object visitRemoveKeyCommand(InvocationContext ctx, RemoveKeyCommand command) throws Throwable
+   {
+      Fqn fqn = command.getFqn();
+      if (fqn.size() == 2)
+      {
+
+         if (isNode(fqn))
+         {
+            // add node
+            String uuid = parseUUID(fqn);
+            if (!removedNodes.contains(uuid))
+            {
+               updateNodes.add(uuid);
+            }
+         }
+      }
+      return null;
+
+   }
+
+   @Override
+   public Object visitRemoveNodeCommand(InvocationContext ctx, RemoveNodeCommand command) throws Throwable
+   {
+      Fqn fqn = command.getFqn();
+      if (fqn.size() == 2)
+      {
+
+         if (isNode(fqn))
+         {
+            // add node
+            String uuid = parseUUID(fqn);
+            removedNodes.add(uuid);
+         }
+         else
+         {
+            // this is property - do nothing
+         }
+      }
+      return null;
+   }
+
+   private boolean isNode(Fqn<String> fqn)
+   {
+      String items = (String)fqn.get(0);
+      String s = items.toString();
+      return s.equals(JBossCacheStorage.NODES);
+   }
+
+   private String parseUUID(Fqn<String> fqn)
+   {
+      if (fqn.size() > 1)
+      {
+
+         // get only uuid
+         String uuid = (String)fqn.get(1);
+         //remove slash
+         return uuid;
+      }
+      else
+      {
+         return null;
+      }
+   }
+
+}


Property changes on: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/cacheloader/IndexModificationsBuilder.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/cacheloader/IndexerCacheLoader.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/cacheloader/IndexerCacheLoader.java	2009-11-17 13:17:40 UTC (rev 719)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/cacheloader/IndexerCacheLoader.java	2009-11-17 16:07:53 UTC (rev 720)
@@ -17,7 +17,6 @@
 package org.exoplatform.services.jcr.impl.core.query.cacheloader;
 
 import org.exoplatform.services.jcr.datamodel.PropertyData;
-import org.exoplatform.services.jcr.impl.core.query.SearchManagerHolder;
 import org.exoplatform.services.jcr.impl.storage.jbosscache.AbstractWriteOnlyCacheLoader;
 import org.exoplatform.services.jcr.impl.storage.jbosscache.JBossCacheStorage;
 import org.exoplatform.services.log.ExoLogger;
@@ -25,7 +24,6 @@
 import org.jboss.cache.CacheException;
 import org.jboss.cache.Fqn;
 import org.jboss.cache.Modification;
-import org.jboss.cache.factories.annotations.Inject;
 
 import java.util.HashSet;
 import java.util.List;
@@ -39,6 +37,7 @@
  * @author <a href="karpenko.sergiy at gmail.com">Karpenko Sergiy</a> 
  * @version $Id: CacheIndexer.java 111 2008-11-11 11:11:11Z serg $
  */
+ at Deprecated
 public class IndexerCacheLoader extends AbstractWriteOnlyCacheLoader
 {
 
@@ -47,17 +46,17 @@
     */
    private static final Log log = ExoLogger.getLogger(IndexerCacheLoader.class);
 
-   SearchManagerHolder searchManagerHolder = null;
+   //IndexInterceptorHolder searchManagerHolder = null;
 
    public IndexerCacheLoader()
    {
    }
 
-   @Inject
-   public void injectDependencies(SearchManagerHolder holder)
-   {
-      searchManagerHolder = holder;
-   }
+   //   @Inject
+   //   public void injectDependencies(IndexInterceptorHolder holder)
+   //   {
+   //      searchManagerHolder = holder;
+   //   }
 
    private String parseUUID(Fqn<String> fqn)
    {
@@ -85,10 +84,10 @@
    @Override
    public void put(List<Modification> modifications) throws Exception
    {
-      if (searchManagerHolder == null && searchManagerHolder.get() != null)
-      {
-         return;
-      }
+      //      if (searchManagerHolder == null || searchManagerHolder.get() == null)
+      //      {
+      //         return;
+      //      }
 
       // nodes that need to be removed from the index.
       final Set<String> removedNodes = new HashSet<String>();
@@ -219,7 +218,15 @@
          addedNodes.add(uuid);
       }
 
-      searchManagerHolder.get().updateIndex(removedNodes, addedNodes);
+      try
+      {
+         //searchManagerHolder.get().updateIndex(removedNodes, addedNodes);
+      }
+      catch (Exception e)
+      {
+         // TODO Auto-generated catch block
+         e.printStackTrace();
+      }
 
    }
 }

Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheWorkspaceDataContainer.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheWorkspaceDataContainer.java	2009-11-17 13:17:40 UTC (rev 719)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheWorkspaceDataContainer.java	2009-11-17 16:07:53 UTC (rev 720)
@@ -21,7 +21,7 @@
 import org.exoplatform.services.jcr.config.RepositoryConfigurationException;
 import org.exoplatform.services.jcr.config.RepositoryEntry;
 import org.exoplatform.services.jcr.config.WorkspaceEntry;
-import org.exoplatform.services.jcr.impl.core.query.SearchManagerHolder;
+import org.exoplatform.services.jcr.impl.core.query.cacheloader.IndexInterceptor;
 import org.exoplatform.services.jcr.impl.storage.WorkspaceDataContainerBase;
 import org.exoplatform.services.jcr.impl.storage.jdbc.JDBCWorkspaceDataContainer;
 import org.exoplatform.services.jcr.storage.WorkspaceDataContainer;
@@ -36,6 +36,7 @@
 import org.jboss.cache.DefaultCacheFactory;
 import org.jboss.cache.Fqn;
 import org.jboss.cache.Node;
+import org.jboss.cache.interceptors.CacheStoreInterceptor;
 import org.picocontainer.Startable;
 
 import java.io.IOException;
@@ -81,8 +82,8 @@
     */
    public JBossCacheWorkspaceDataContainer(WorkspaceEntry wsConfig, RepositoryEntry repConfig,
       InitialContextInitializer contextInit, ValueStoragePluginProvider valueStorageProvider,
-      SearchManagerHolder searchManagerHolder) throws RepositoryConfigurationException, NamingException,
-      RepositoryException, IOException
+      IndexInterceptor indexInterceptor) throws RepositoryConfigurationException, NamingException, RepositoryException,
+      IOException
    {
       this.repositoryName = repConfig.getName();
       this.containerName = wsConfig.getName();
@@ -114,13 +115,14 @@
       ((CacheSPI<Serializable, Object>)cache).getComponentRegistry().registerComponent(this.persistentContainer,
          WorkspaceDataContainer.class);
 
-      ((CacheSPI<Serializable, Object>)cache).getComponentRegistry().registerComponent(searchManagerHolder,
-         SearchManagerHolder.class);
+      // SearchManager stub. We need it because IndexInterceptor will be created    
+      // much earlier when SearchManager
 
       // TODO check lifecycle, might be we have to create in start(), with jdbc start. 
       // initializes configuration state, the root node, etc.
       this.cache.create();
       this.cache.start();
+      this.cache.addInterceptor(indexInterceptor, CacheStoreInterceptor.class);
 
       Node<Serializable, Object> cacheRoot = cache.getRoot();
       //Node<Serializable, Object> wsRoot = cacheRoot.addChild(Fqn.fromElements(repositoryName, containerName));

Modified: jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/IndexerCacheLoaderRuntimeTest.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/IndexerCacheLoaderRuntimeTest.java	2009-11-17 13:17:40 UTC (rev 719)
+++ jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/IndexerCacheLoaderRuntimeTest.java	2009-11-17 16:07:53 UTC (rev 720)
@@ -50,7 +50,6 @@
 import org.exoplatform.services.jcr.impl.core.nodetype.registration.NodeTypeDataPersister;
 import org.exoplatform.services.jcr.impl.core.query.RepositoryIndexSearcherHolder;
 import org.exoplatform.services.jcr.impl.core.query.SearchManager;
-import org.exoplatform.services.jcr.impl.core.query.SearchManagerHolder;
 import org.exoplatform.services.jcr.impl.core.query.SystemSearchManagerHolder;
 import org.exoplatform.services.jcr.impl.core.query.cacheloader.IndexerCacheLoader;
 import org.exoplatform.services.jcr.impl.core.query.lucene.SearchIndex;
@@ -97,7 +96,7 @@
 
    SearchManager manager;
 
-   SearchManagerHolder holder;
+   //IndexInterceptorHolder holder;
 
    public void createNewDataSource(String dataSourceName) throws Exception
    {
@@ -126,7 +125,7 @@
       initPersistence();
 
       loader = new IndexerCacheLoader();
-      loader.injectDependencies(holder);
+      //loader.injectDependencies(holder);
 
       initJCRRoot();
 
@@ -860,7 +859,7 @@
 
    protected void initPersistence() throws Exception
    {
-      holder = new SearchManagerHolder();
+      //holder = new IndexInterceptorHolder();
 
       // Create WorkspaceEntry
       ContainerEntry containerEntry = new ContainerEntry();
@@ -908,9 +907,9 @@
       DocumentReaderService extractor = null;
       ConfigurationManager cfm = new ConfigurationManagerImpl();
 
-      manager =
-         new SearchManager(ws.getQueryHandler(), nsReg, ntReg, itemMgr, parentSearchManager, extractor, cfm,
-            indexSearcherHolder, holder);
+      //      manager =
+      //         new SearchManager(ws.getQueryHandler(), nsReg, ntReg, itemMgr, parentSearchManager, extractor, cfm,
+      //            indexSearcherHolder, holder);
    }
 
    @Override

Modified: jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/IndexerCacheLoaderTest.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/IndexerCacheLoaderTest.java	2009-11-17 13:17:40 UTC (rev 719)
+++ jcr/branches/1.12.0-JBC/component/core/src/test/java/org/exoplatform/services/jcr/impl/storage/jbosscache/IndexerCacheLoaderTest.java	2009-11-17 16:07:53 UTC (rev 720)
@@ -31,7 +31,6 @@
 import org.exoplatform.services.jcr.impl.core.query.QueryHandler;
 import org.exoplatform.services.jcr.impl.core.query.RepositoryIndexSearcherHolder;
 import org.exoplatform.services.jcr.impl.core.query.SearchManager;
-import org.exoplatform.services.jcr.impl.core.query.SearchManagerHolder;
 import org.exoplatform.services.jcr.impl.core.query.cacheloader.IndexerCacheLoader;
 import org.exoplatform.services.jcr.impl.dataflow.TransientNodeData;
 import org.exoplatform.services.jcr.impl.dataflow.TransientPropertyData;
@@ -60,7 +59,7 @@
 
    private DummySearchManager searchManager;
 
-   private SearchManagerHolder holder;
+   //private IndexInterceptorHolder holder;
 
    /**
     * @see junit.framework.TestCase#setUp()
@@ -70,9 +69,9 @@
    {
       // TODO Auto-generated method stub
       super.setUp();
-      holder = new SearchManagerHolder();
+      // holder = new IndexInterceptorHolder();
       indexerCacheLoader = new IndexerCacheLoader();
-      indexerCacheLoader.injectDependencies(holder);
+      //indexerCacheLoader.injectDependencies(holder);
       searchManager = new DummySearchManager();
 
    }
@@ -270,7 +269,7 @@
 
       public DummySearchManager() throws RepositoryException, RepositoryConfigurationException
       {
-         super(null, null, null, null, null, null, null, new RepositoryIndexSearcherHolder(), holder);
+         super(null, null, null, null, null, null, null, new RepositoryIndexSearcherHolder(), null);
       }
 
       /**

Modified: jcr/branches/1.12.0-JBC/component/core/src/test/resources/conf/standalone/test-jbosscache-config-exoloader.xml
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/test/resources/conf/standalone/test-jbosscache-config-exoloader.xml	2009-11-17 13:17:40 UTC (rev 719)
+++ jcr/branches/1.12.0-JBC/component/core/src/test/resources/conf/standalone/test-jbosscache-config-exoloader.xml	2009-11-17 16:07:53 UTC (rev 720)
@@ -9,7 +9,7 @@
    <clustering mode="replication">
       
       <jgroupsConfig>
-         <UDP discard_incompatible_packets="true" enable_bundling="false" enable_diagnostics="false" ip_ttl="2"
+         <!--UDP discard_incompatible_packets="true" enable_bundling="false" enable_diagnostics="false" ip_ttl="2"
               loopback="false" max_bundle_size="64000" max_bundle_timeout="30" mcast_addr="228.10.10.10"
               mcast_port="45588" mcast_recv_buf_size="25000000" mcast_send_buf_size="640000"
               oob_thread_pool.enabled="true" oob_thread_pool.keep_alive_time="10000" oob_thread_pool.max_threads="4"
@@ -19,16 +19,17 @@
               thread_pool.queue_enabled="true" thread_pool.queue_max_size="10" thread_pool.rejection_policy="Run"
               tos="8" ucast_recv_buf_size="20000000" ucast_send_buf_size="640000" use_concurrent_stack="true"
               use_incoming_packet_handler="true" />
-         <PING num_initial_members="3" timeout="2000" />
+         <PING num_initial_members="3" timeout="2000" /-->
          
-         <!-- TCP bind_addr="192.168.0.15" start_port="7800" loopback="true" recv_buf_size="20000000" send_buf_size="640000" discard_incompatible_packets="true"
+         <TCP bind_addr="localhost" start_port="7800" loopback="true" recv_buf_size="20000000" send_buf_size="640000" discard_incompatible_packets="true"
             max_bundle_size="64000" max_bundle_timeout="30" use_incoming_packet_handler="true" enable_bundling="true" use_send_queues="false" sock_conn_timeout="300"
             skip_suspected_members="true" use_concurrent_stack="true" thread_pool.enabled="true" thread_pool.min_threads="1" thread_pool.max_threads="25"
             thread_pool.keep_alive_time="5000" thread_pool.queue_enabled="false" thread_pool.queue_max_size="100" thread_pool.rejection_policy="run"
 
             oob_thread_pool.enabled="true" oob_thread_pool.min_threads="1" oob_thread_pool.max_threads="8" oob_thread_pool.keep_alive_time="5000"
             oob_thread_pool.queue_enabled="false" oob_thread_pool.queue_max_size="100" oob_thread_pool.rejection_policy="run" />
-         <MPING timeout="2000" num_initial_members="3" mcast_port="34526" bind_addr="192.168.0.15" mcast_addr="224.0.0.1" /-->
+         <MPING timeout="2000" num_initial_members="3" mcast_port="34526" bind_addr="localhost" mcast_addr="224.0.0.1" />
+
          
          <MERGE2 max_interval="30000" min_interval="10000"/>
          <FD_SOCK/>
@@ -66,17 +67,12 @@
         </properties>
       </loader>   
 
-      <loader class="org.exoplatform.services.jcr.impl.core.query.cacheloader.IndexerCacheLoader" 
+      <!-- loader class="org.exoplatform.services.jcr.impl.core.query.cacheloader.IndexerCacheLoader" 
               async="false" fetchPersistentState="false" ignoreModifications="false" purgeOnStartup="false">
         <properties>
         </properties>
-      </loader>   
+      </loader-->   
       
-      <loader class="org.exoplatform.services.jcr.impl.storage.jbosscache.LockCacheLoader" 
-              async="false" fetchPersistentState="false" ignoreModifications="false" purgeOnStartup="false">
-        <properties>
-        </properties>
-      </loader>   
    </loaders>
    
     <!-- Enable batching -->



More information about the exo-jcr-commits mailing list