[exo-jcr-commits] exo-jcr SVN: r364 - in jcr/branches/1.12.0-JBC: component/core and 5 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Fri Oct 23 11:57:12 EDT 2009


Author: pnedonosko
Date: 2009-10-23 11:57:11 -0400 (Fri, 23 Oct 2009)
New Revision: 364

Added:
   jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/JBossCachePersistentDataManager.java
   jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/
   jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/ExoJCRCacheLoader.java
   jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheStorageConnection.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/main/resources/conf/portal/exojcr-jboss-cache-conf.xml
Modified:
   jcr/branches/1.12.0-JBC/component/core/pom.xml
   jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/WorkspacePersistentDataManager.java
   jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/SystemDataContainerHolder.java
   jcr/branches/1.12.0-JBC/component/core/src/test/resources/conf/standalone/test-configuration-sjdbc.xml
   jcr/branches/1.12.0-JBC/component/core/src/test/resources/conf/standalone/test-configuration.xml
   jcr/branches/1.12.0-JBC/component/core/src/test/resources/conf/standalone/test-jcr-config.xml
   jcr/branches/1.12.0-JBC/pom.xml
Log:
EXOJCR-200: skeleton of persistent manager and cache loader architecture 

Modified: jcr/branches/1.12.0-JBC/component/core/pom.xml
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/pom.xml	2009-10-23 15:26:35 UTC (rev 363)
+++ jcr/branches/1.12.0-JBC/component/core/pom.xml	2009-10-23 15:57:11 UTC (rev 364)
@@ -82,6 +82,11 @@
       </dependency>
 
       <!-- Third party dependencies (eXo JCR Impl) -->
+      
+      <dependency>
+         <groupId>org.jboss.cache</groupId>
+         <artifactId>jbosscache-core</artifactId>
+      </dependency>
 
       <dependency>
          <groupId>org.apache.lucene</groupId>

Added: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/JBossCachePersistentDataManager.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/JBossCachePersistentDataManager.java	                        (rev 0)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/JBossCachePersistentDataManager.java	2009-10-23 15:57:11 UTC (rev 364)
@@ -0,0 +1,182 @@
+/*
+ * 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 3 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.dataflow.persistent;
+
+import org.exoplatform.services.jcr.dataflow.ItemState;
+import org.exoplatform.services.jcr.dataflow.ItemStateChangesLog;
+import org.exoplatform.services.jcr.dataflow.ReadOnlyThroughChanges;
+import org.exoplatform.services.jcr.datamodel.QPath;
+import org.exoplatform.services.jcr.impl.Constants;
+import org.exoplatform.services.jcr.impl.dataflow.TransientItemData;
+import org.exoplatform.services.jcr.impl.storage.SystemDataContainerHolder;
+import org.exoplatform.services.jcr.storage.WorkspaceDataContainer;
+import org.exoplatform.services.jcr.storage.WorkspaceStorageConnection;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.jcr.RepositoryException;
+
+/**
+ * Created by The eXo Platform SAS.
+ * 
+ * <br/>Date: 23.10.2009
+ *
+ * @author <a href="mailto:peter.nedonosko at exoplatform.com.ua">Peter Nedonosko</a> 
+ * @version $Id$
+ */
+public class JBossCachePersistentDataManager extends WorkspacePersistentDataManager
+{
+   
+   /**
+    * JBossCachePersistentDataManager  constructor.
+    *
+    * @param dataContainer WorkspaceDataContainer
+    * @param systemDataContainerHolder SystemDataContainerHolder
+    */
+   public JBossCachePersistentDataManager(WorkspaceDataContainer dataContainer,
+      SystemDataContainerHolder<WorkspaceDataContainer> systemDataContainerHolder)
+   {
+      super(dataContainer, systemDataContainerHolder);      
+   }
+
+   @Override
+   public void save(ItemStateChangesLog changesLog) throws RepositoryException
+   {
+      // check if this workspace container is not read-only
+      if (readOnly && !(changesLog instanceof ReadOnlyThroughChanges))
+         throw new ReadOnlyWorkspaceException("Workspace container '" + dataContainer.getName() + "' is read-only.");
+
+      final Set<QPath> addedNodes = new HashSet<QPath>();
+
+      WorkspaceStorageConnection thisConnection = null;
+      WorkspaceStorageConnection systemConnection = null;
+
+      try
+      {
+         for (Iterator<ItemState> iter = changesLog.getAllStates().iterator(); iter.hasNext();)
+         {
+            ItemState itemState = iter.next();
+
+            if (!itemState.isPersisted())
+               continue;
+
+            long start = System.currentTimeMillis();
+
+            TransientItemData data = (TransientItemData)itemState.getData();
+
+            WorkspaceStorageConnection conn = null;
+            if (isSystemDescendant(data.getQPath()))
+            {
+               conn = systemConnection == null
+               // we need system connection but it's not exist
+                  ? systemConnection = (systemDataContainer != dataContainer
+                  // if it's different container instances
+                     ? systemDataContainer.equals(dataContainer) && thisConnection != null
+                     // but container confugrations are same and non-system connnection open
+                        // reuse this connection as system
+                        ? systemDataContainer.reuseConnection(thisConnection)
+                        // or open one new system
+                        : systemDataContainer.openConnection()
+                     // else if it's same container instances (system and this)
+                     : thisConnection == null
+                     // and non-system connection doens't exist - open it
+                        ? thisConnection = dataContainer.openConnection()
+                        // if already open - use it
+                        : thisConnection)
+                  // system connection opened - use it
+                  : systemConnection;
+            }
+            else
+            {
+               conn = thisConnection == null
+               // we need this conatiner conection
+                  ? thisConnection = (systemDataContainer != dataContainer
+                  // if it's different container instances
+                     ? dataContainer.equals(systemDataContainer) && systemConnection != null
+                     // but container confugrations are same and system connnection open
+                        // reuse system connection as this
+                        ? dataContainer.reuseConnection(systemConnection)
+                        // or open one new
+                        : dataContainer.openConnection()
+                     // else if it's same container instances (system and this)
+                     : systemConnection == null
+                     // and system connection doens't exist - open it
+                        ? systemConnection = dataContainer.openConnection()
+                        // if already open - use it
+                        : systemConnection)
+                  // this connection opened - use it
+                  : thisConnection;
+            }
+
+            data.increasePersistedVersion();
+
+            if (itemState.isAdded())
+            {
+               doAdd(data, conn, addedNodes);
+            }
+            else if (itemState.isUpdated())
+            {
+               doUpdate(data, conn);
+            }
+            else if (itemState.isDeleted())
+            {
+               doDelete(data, conn);
+            }
+            else if (itemState.isRenamed())
+            {
+               doRename(data, conn, addedNodes);
+            }
+
+            if (LOG.isDebugEnabled())
+               LOG.debug(ItemState.nameFromValue(itemState.getState()) + " " + (System.currentTimeMillis() - start)
+                  + "ms, " + data.getQPath().getAsString());
+         }
+         if (thisConnection != null)
+            thisConnection.commit();
+         if (systemConnection != null && !systemConnection.equals(thisConnection))
+            systemConnection.commit();
+      }
+      finally
+      {
+         if (thisConnection != null && thisConnection.isOpened())
+            thisConnection.rollback();
+         if (systemConnection != null && !systemConnection.equals(thisConnection) && systemConnection.isOpened())
+            systemConnection.rollback();
+
+         // help to GC
+         addedNodes.clear();
+      }
+   }
+
+
+   /**
+    * Tell if the path is jcr:system descendant.
+    * 
+    * @param path
+    *          path to check
+    * @return boolean result, true if yes - it's jcr:system tree path
+    */
+   private boolean isSystemDescendant(QPath path)
+   {
+      return path.isDescendantOf(Constants.JCR_SYSTEM_PATH) || path.equals(Constants.JCR_SYSTEM_PATH);
+   }
+   
+}


Property changes on: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/JBossCachePersistentDataManager.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain
Name: svn:keywords
   + Id

Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/WorkspacePersistentDataManager.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/WorkspacePersistentDataManager.java	2009-10-23 15:26:35 UTC (rev 363)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/WorkspacePersistentDataManager.java	2009-10-23 15:57:11 UTC (rev 364)
@@ -104,7 +104,7 @@
     *          holder of system workspace data container
     */
    public WorkspacePersistentDataManager(WorkspaceDataContainer dataContainer,
-      SystemDataContainerHolder systemDataContainerHolder)
+      SystemDataContainerHolder<WorkspaceDataContainer> systemDataContainerHolder)
    {
       this.dataContainer = dataContainer;
       this.listeners = new ArrayList<ItemsPersistenceListener>();

Modified: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/SystemDataContainerHolder.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/SystemDataContainerHolder.java	2009-10-23 15:26:35 UTC (rev 363)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/SystemDataContainerHolder.java	2009-10-23 15:57:11 UTC (rev 364)
@@ -22,22 +22,20 @@
 
 /**
  * Created by The eXo Platform SAS.
+ *
+ * System DataContainer holder.
  * 
+ * Used to store Container and provide it as dependency on statup time.
+ * 
  * @author Gennady Azarenkov
  * @version $Id$
  */
-
-/**
- * System DataContainer holder.
- * 
- * Used to store Container and provide it as dependency on statup time.
- */
-public class SystemDataContainerHolder
+public class SystemDataContainerHolder<DC extends WorkspaceDataContainer>
 {
    /**
     * Actual data Container.
     */
-   private WorkspaceDataContainer dataContainer;
+   private DC dataContainer;
 
    /**
     * SystemDataContainerHolder constructor.
@@ -45,7 +43,7 @@
     * @param dataContainer
     *          - data Container instance
     */
-   public SystemDataContainerHolder(WorkspaceDataContainer dataContainer)
+   public SystemDataContainerHolder(DC dataContainer)
    {
       this.dataContainer = dataContainer;
    }
@@ -55,7 +53,7 @@
     * 
     * @return WorkspaceDataContainer instance
     */
-   public WorkspaceDataContainer getContainer()
+   public DC getContainer()
    {
       return dataContainer;
    }

Added: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/ExoJCRCacheLoader.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/ExoJCRCacheLoader.java	                        (rev 0)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/ExoJCRCacheLoader.java	2009-10-23 15:57:11 UTC (rev 364)
@@ -0,0 +1,279 @@
+/*
+ * 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 3 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.storage.jbosscache;
+
+import org.exoplatform.services.jcr.config.RepositoryConfigurationException;
+import org.exoplatform.services.jcr.storage.WorkspaceDataContainer;
+import org.jboss.cache.CacheSPI;
+import org.jboss.cache.Fqn;
+import org.jboss.cache.Modification;
+import org.jboss.cache.RegionManager;
+import org.jboss.cache.config.CacheLoaderConfig.IndividualCacheLoaderConfig;
+import org.jboss.cache.loader.CacheLoader;
+
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Created by The eXo Platform SAS.
+ * 
+ * <br/>Date: 23.10.2009
+ *
+ * @author <a href="mailto:peter.nedonosko at exoplatform.com.ua">Peter Nedonosko</a> 
+ * @version $Id: ExoJCRCacheLoader.java 111 2008-11-11 11:11:11Z pnedonosko $
+ */
+public class ExoJCRCacheLoader implements CacheLoader
+{
+
+   private WorkspaceDataContainer dataContainer;
+   
+   /**
+    * Init the loader DataContainer with given WorkspaceDataContainer instance.
+    *
+    * @param dataContainer WorkspaceDataContainer
+    */
+   public void initDataContainer(WorkspaceDataContainer dataContainer) throws RepositoryConfigurationException
+   {
+      if (this.dataContainer != null) {
+         throw new RepositoryConfigurationException("Cannot set WorkspaceDataContainer twice");
+      }
+      
+      this.dataContainer = dataContainer;
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void commit(Object tx) throws Exception
+   {
+      // TODO Auto-generated method stub
+
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public boolean exists(Fqn name) throws Exception
+   {
+      // TODO Auto-generated method stub
+      return false;
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public Map<Object, Object> get(Fqn name) throws Exception
+   {
+      // TODO Auto-generated method stub
+      return null;
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public Set<?> getChildrenNames(Fqn fqn) throws Exception
+   {
+      // TODO Auto-generated method stub
+      return null;
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public IndividualCacheLoaderConfig getConfig()
+   {
+      // TODO Auto-generated method stub
+      return null;
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void loadEntireState(ObjectOutputStream os) throws Exception
+   {
+      // TODO Auto-generated method stub
+
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void loadState(Fqn subtree, ObjectOutputStream os) throws Exception
+   {
+      // TODO Auto-generated method stub
+
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void prepare(Object tx, List<Modification> modifications, boolean onePhase) throws Exception
+   {
+      // TODO Auto-generated method stub
+
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public Object put(Fqn name, Object key, Object value) throws Exception
+   {
+      // TODO Auto-generated method stub
+      return null;
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void put(Fqn name, Map<Object, Object> attributes) throws Exception
+   {
+      // TODO Auto-generated method stub
+
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void put(List<Modification> modifications) throws Exception
+   {
+      // TODO Auto-generated method stub
+
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public Object remove(Fqn fqn, Object key) throws Exception
+   {
+      // TODO Auto-generated method stub
+      return null;
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void remove(Fqn fqn) throws Exception
+   {
+      // TODO Auto-generated method stub
+
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void removeData(Fqn fqn) throws Exception
+   {
+      // TODO Auto-generated method stub
+
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void rollback(Object tx)
+   {
+      // TODO Auto-generated method stub
+
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void setCache(CacheSPI c)
+   {
+      // TODO Auto-generated method stub
+
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void setConfig(IndividualCacheLoaderConfig config)
+   {
+      // TODO Auto-generated method stub
+
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void setRegionManager(RegionManager manager)
+   {
+      // TODO Auto-generated method stub
+
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void storeEntireState(ObjectInputStream is) throws Exception
+   {
+      // TODO Auto-generated method stub
+
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void storeState(Fqn subtree, ObjectInputStream is) throws Exception
+   {
+      // TODO Auto-generated method stub
+
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void create() throws Exception
+   {
+      // TODO Auto-generated method stub
+
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void destroy()
+   {
+      // TODO Auto-generated method stub
+
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void start() throws Exception
+   {
+      // TODO Auto-generated method stub
+
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void stop()
+   {
+      // TODO Auto-generated method stub
+
+   }
+
+}


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

Added: jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheStorageConnection.java
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheStorageConnection.java	                        (rev 0)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheStorageConnection.java	2009-10-23 15:57:11 UTC (rev 364)
@@ -0,0 +1,273 @@
+/*
+ * 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 3 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.storage.jbosscache;
+
+import org.exoplatform.services.jcr.datamodel.ItemData;
+import org.exoplatform.services.jcr.datamodel.NodeData;
+import org.exoplatform.services.jcr.datamodel.PropertyData;
+import org.exoplatform.services.jcr.datamodel.QPath;
+import org.exoplatform.services.jcr.datamodel.QPathEntry;
+import org.exoplatform.services.jcr.impl.storage.jdbc.DBConstants;
+import org.exoplatform.services.jcr.storage.WorkspaceStorageConnection;
+import org.jboss.cache.Cache;
+import org.jboss.cache.Fqn;
+import org.jboss.cache.Node;
+
+import java.io.Serializable;
+import java.util.List;
+
+import javax.jcr.InvalidItemStateException;
+import javax.jcr.RepositoryException;
+
+/**
+ * Created by The eXo Platform SAS.
+ * 
+ * <br/>Date: 23.10.2009<br/>
+ *
+ * Cache contains several regions:<br/>
+ * Workspace tree. /$repo_name/$ws_name/$ROOT: On each leaf (JBossCache Node) an JCR Item Id stored.<br/>
+ * Items map. /$repo_name/$ws_name/$ITEMS: Key=Id, Value = ItemData.<br/>
+ * References map ??? /$repo_name/$ws_name/$REFS: Key=NodeId, Value = PropertyId.<br/>
+ *
+ * @author <a href="mailto:peter.nedonosko at exoplatform.com.ua">Peter Nedonosko</a> 
+ * @version $Id: JBossCacheStorageConnection.java 111 2008-11-11 11:11:11Z pnedonosko $
+ */
+public class JBossCacheStorageConnection extends DBConstants implements WorkspaceStorageConnection
+{
+
+   //public static final InternalQName NODE = new InternalQName(Constants.NS_DEFAULT_URI, "$node");
+   public static final String ITEM_DATA = "$idata".intern();
+
+   public static final String ITEM_ID = "$id".intern();
+
+   private final Cache<Serializable, Object> cache;
+
+   private final Node<Serializable, Object> treeRoot;
+   
+   private final Node<Serializable, Object> itemsRoot;
+
+   /**
+    * JBossCacheStorageConnection  constructor.
+    *
+    * @param cache Cache<Serializable, Object>
+    */
+   public JBossCacheStorageConnection(Cache<Serializable, Object> cache, Node<Serializable, Object> treeRoot, Node<Serializable, Object> itemsRoot)
+   {
+      this.cache = cache;
+      this.itemsRoot = itemsRoot;
+      this.treeRoot = treeRoot;
+   }
+
+   private Fqn<String> makeNodeFqn(QPath nodePath)
+   {
+      QPathEntry[] path = nodePath.getEntries();
+      String[] fqns = new String[path.length];
+
+      for (int i = 0; i < path.length; i++)
+      {
+         fqns[i] = path[i].getAsString(true);
+      }
+
+      // TODO make Fqn generation clearer 
+      return Fqn.fromRelativeFqn(treeRoot.getFqn(), Fqn.fromElements(fqns));
+   }
+
+   private Fqn<String> makePropertyFqn(QPath propertyPath)
+   {
+      QPathEntry[] path = propertyPath.getEntries();
+      int pathLen = path.length - 1;
+      String[] fqns = new String[pathLen];
+
+      for (int i = 0; i < pathLen; i++)
+      {
+         fqns[i] = path[i].getAsString(true);
+      }
+
+      // TODO make Fqn generation clearer 
+      return Fqn.fromRelativeFqn(treeRoot.getFqn(), Fqn.fromElements(fqns));
+   }
+
+   private Fqn<String> makeIdFqn(String itemId)
+   {
+      // TODO make Fqn generation clearer 
+      return Fqn.fromRelativeFqn(itemsRoot.getFqn(), Fqn.fromString(itemId));
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void add(NodeData data) throws RepositoryException, UnsupportedOperationException, InvalidItemStateException,
+      IllegalStateException
+   {
+      cache.put(makeNodeFqn(data.getQPath()), ITEM_ID, data.getIdentifier());
+      cache.put(makeIdFqn(data.getIdentifier()), ITEM_DATA, data);
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void add(PropertyData data) throws RepositoryException, UnsupportedOperationException,
+      InvalidItemStateException, IllegalStateException
+   {
+
+      cache.put(makePropertyFqn(data.getQPath()), data.getQPath().getEntries()[data.getQPath().getEntries().length - 1]
+         .getAsString(true), data.getIdentifier());
+      cache.put(makeIdFqn(data.getIdentifier()), ITEM_DATA, data);
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void delete(NodeData data) throws RepositoryException, UnsupportedOperationException,
+      InvalidItemStateException, IllegalStateException
+   {
+      // TODO Auto-generated method stub
+
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void delete(PropertyData data) throws RepositoryException, UnsupportedOperationException,
+      InvalidItemStateException, IllegalStateException
+   {
+      // TODO Auto-generated method stub
+
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public List<NodeData> getChildNodesData(NodeData parent) throws RepositoryException, IllegalStateException
+   {
+      // TODO Auto-generated method stub
+      return null;
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public List<PropertyData> getChildPropertiesData(NodeData parent) throws RepositoryException, IllegalStateException
+   {
+      // TODO Auto-generated method stub
+      return null;
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public ItemData getItemData(NodeData parentData, QPathEntry name) throws RepositoryException, IllegalStateException
+   {
+      // TODO Auto-generated method stub
+      return null;
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public ItemData getItemData(String identifier) throws RepositoryException, IllegalStateException
+   {
+      // TODO Auto-generated method stub
+      return null;
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public List<PropertyData> getReferencesData(String nodeIdentifier) throws RepositoryException,
+      IllegalStateException, UnsupportedOperationException
+   {
+      // TODO Auto-generated method stub
+      return null;
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public boolean isOpened()
+   {
+      // TODO Auto-generated method stub
+      return false;
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public List<PropertyData> listChildPropertiesData(NodeData parent) throws RepositoryException, IllegalStateException
+   {
+      // TODO Auto-generated method stub
+      return null;
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void rename(NodeData data) throws RepositoryException, UnsupportedOperationException,
+      InvalidItemStateException, IllegalStateException
+   {
+      // TODO Auto-generated method stub
+
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void rollback() throws IllegalStateException, RepositoryException
+   {
+      // TODO Auto-generated method stub
+
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void update(NodeData data) throws RepositoryException, UnsupportedOperationException,
+      InvalidItemStateException, IllegalStateException
+   {
+      // TODO Auto-generated method stub
+
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void update(PropertyData data) throws RepositoryException, UnsupportedOperationException,
+      InvalidItemStateException, IllegalStateException
+   {
+      // TODO Auto-generated method stub
+
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void close() throws IllegalStateException, RepositoryException
+   {
+      // TODO Auto-generated method stub
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public void commit() throws IllegalStateException, RepositoryException
+   {
+      // TODO Auto-generated method stub
+   }
+
+}


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

Added: 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	                        (rev 0)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/java/org/exoplatform/services/jcr/impl/storage/jbosscache/JBossCacheWorkspaceDataContainer.java	2009-10-23 15:57:11 UTC (rev 364)
@@ -0,0 +1,181 @@
+/*
+ * 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 3 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.storage.jbosscache;
+
+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.storage.WorkspaceDataContainerBase;
+import org.exoplatform.services.jcr.impl.storage.jdbc.JDBCWorkspaceDataContainer;
+import org.exoplatform.services.jcr.storage.WorkspaceDataContainer;
+import org.exoplatform.services.jcr.storage.WorkspaceStorageConnection;
+import org.exoplatform.services.jcr.storage.value.ValueStoragePluginProvider;
+import org.exoplatform.services.log.ExoLogger;
+import org.exoplatform.services.log.Log;
+import org.exoplatform.services.naming.InitialContextInitializer;
+import org.jboss.cache.Cache;
+import org.jboss.cache.CacheFactory;
+import org.jboss.cache.DefaultCacheFactory;
+import org.jboss.cache.Fqn;
+import org.jboss.cache.Node;
+import org.picocontainer.Startable;
+
+import java.io.IOException;
+import java.io.Serializable;
+
+import javax.jcr.RepositoryException;
+import javax.naming.NamingException;
+
+/**
+ * Created by The eXo Platform SAS.
+ * 
+ * <br/>Date: 23.10.2009
+ *
+ * @author <a href="mailto:peter.nedonosko at exoplatform.com.ua">Peter Nedonosko</a> 
+ * @version $Id: JBossWorkspaceDataContainer.java 111 2008-11-11 11:11:11Z pnedonosko $
+ */
+public class JBossCacheWorkspaceDataContainer extends WorkspaceDataContainerBase implements Startable
+{
+
+   public static final String JBOSSCACHE_CONFIG = "jboss-cache-conf";
+
+   public static final String ROOT = "$ROOT".intern();
+
+   public static final String ITEMS = "$ITEMS".intern();
+
+   protected static final Log LOG = ExoLogger.getLogger("jcr.JBossCacheWorkspaceDataContainer");
+
+   protected final String repositoryName;
+
+   protected final String containerName;
+
+   protected final WorkspaceDataContainer persistentContainer;
+
+   private final Cache<Serializable, Object> cache;
+
+   private final Node<Serializable, Object> tree;
+   
+   private final Node<Serializable, Object> items;
+
+   /**
+    * JBossWorkspaceDataContainer  constructor.
+    *
+    */
+   public JBossCacheWorkspaceDataContainer(WorkspaceEntry wsConfig, RepositoryEntry repConfig,
+      InitialContextInitializer contextInit, ValueStoragePluginProvider valueStorageProvider)
+      throws RepositoryConfigurationException, NamingException, RepositoryException, IOException
+   {
+      this.repositoryName = repConfig.getName();
+      this.containerName = wsConfig.getName();
+
+      CacheFactory<Serializable, Object> factory = new DefaultCacheFactory<Serializable, Object>();
+
+      String jbcConfig = wsConfig.getContainer().getParameterValue(JBOSSCACHE_CONFIG);
+      LOG.info("JBossCache configuration used: " + jbcConfig);
+
+      this.cache = factory.createCache(jbcConfig);
+
+      // TODO hardcoded now
+      this.persistentContainer = new JDBCWorkspaceDataContainer(wsConfig, repConfig, contextInit, valueStorageProvider);
+      // TODO add/configure CacheLoader here with this.persistentContainer   
+
+      this.cache.create();
+      this.cache.start();
+
+      Node<Serializable, Object> cacheRoot = cache.getRoot();
+      Node<Serializable, Object> wsRoot = cacheRoot.addChild(Fqn.fromElements(repositoryName, containerName));
+
+      // prepare 
+      this.tree = wsRoot.addChild(Fqn.fromString(ROOT));
+      this.items = wsRoot.addChild(Fqn.fromString(ITEMS));
+   }
+
+   public void start()
+   {
+      if (persistentContainer instanceof Startable)
+      {
+         ((Startable)persistentContainer).start();
+      }
+   }
+
+   public void stop()
+   {
+      if (persistentContainer instanceof Startable)
+      {
+         ((Startable)persistentContainer).stop();
+      }
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public boolean isSame(WorkspaceDataContainer another)
+   {
+      return false;
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public WorkspaceStorageConnection openConnection() throws RepositoryException
+   {
+      return new JBossCacheStorageConnection(cache, tree, items);
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public WorkspaceStorageConnection openConnection(boolean readOnly) throws RepositoryException
+   {
+      return new JBossCacheStorageConnection(cache, tree, items);
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public WorkspaceStorageConnection reuseConnection(WorkspaceStorageConnection original) throws RepositoryException
+   {
+      return original;
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public String getInfo()
+   {
+      return "JBossCache based Workspace data container (prototype v1)";
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public String getName()
+   {
+      return repositoryName + "-" + containerName;
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   public String getStorageVersion()
+   {
+      return "alpha1";
+   }
+
+}


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

Added: jcr/branches/1.12.0-JBC/component/core/src/main/resources/conf/portal/exojcr-jboss-cache-conf.xml
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/main/resources/conf/portal/exojcr-jboss-cache-conf.xml	                        (rev 0)
+++ jcr/branches/1.12.0-JBC/component/core/src/main/resources/conf/portal/exojcr-jboss-cache-conf.xml	2009-10-23 15:57:11 UTC (rev 364)
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jbosscache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xmlns="urn:jboss:jbosscache-core:config:3.1">
+
+	<!-- Configure the TransactionManager -->
+	<transaction
+		transactionManagerLookupClass="org.jboss.cache.transaction.GenericTransactionManagerLookup" />
+
+   <clustering mode="replication">
+      
+      <jgroupsConfig>
+         <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"
+              oob_thread_pool.min_threads="1" oob_thread_pool.queue_enabled="true" oob_thread_pool.queue_max_size="10"
+              oob_thread_pool.rejection_policy="Run" thread_naming_pattern="pl" thread_pool.enabled="true"
+              thread_pool.keep_alive_time="30000" thread_pool.max_threads="25" thread_pool.min_threads="1"
+              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" />
+         
+         <!-- TCP bind_addr="192.168.0.15" 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" /-->
+         
+         <MERGE2 max_interval="30000" min_interval="10000"/>
+         <FD_SOCK/>
+         <FD max_tries="5" shun="true" timeout="10000"/>
+         <VERIFY_SUSPECT timeout="1500"/>
+         <pbcast.NAKACK discard_delivered_msgs="true" gc_lag="0" retransmit_timeout="300,600,1200,2400,4800"
+                        use_mcast_xmit="false"/>
+         <UNICAST timeout="300,600,1200,2400,3600"/>
+         <pbcast.STABLE desired_avg_gossip="50000" max_bytes="400000" stability_delay="1000"/>
+         <pbcast.GMS join_timeout="5000" print_local_addr="true" shun="false" view_ack_collection_timeout="5000"
+                     view_bundling="true"/>
+         <FRAG2 frag_size="60000"/>
+         <pbcast.STREAMING_STATE_TRANSFER/>
+         <pbcast.FLUSH timeout="0"/>
+
+      </jgroupsConfig>
+
+      <sync />
+      <!-- Alternatively, to use async replication, comment out the element above and uncomment the element below.  -->
+      <!-- <async /> -->
+
+   </clustering>
+	<loaders passivation="false" shared="true">
+		<loader class="org.jboss.cache.loader.FileCacheLoader" async="false"
+			fetchPersistentState="true" ignoreModifications="false"
+			purgeOnStartup="false">
+			<properties>
+				location=/tmp/test-jboss-cache/proxy
+            </properties>
+		</loader>
+	</loaders>
+</jbosscache>


Property changes on: jcr/branches/1.12.0-JBC/component/core/src/main/resources/conf/portal/exojcr-jboss-cache-conf.xml
___________________________________________________________________
Name: svn:mime-type
   + text/plain
Name: svn:keywords
   + Id

Modified: jcr/branches/1.12.0-JBC/component/core/src/test/resources/conf/standalone/test-configuration-sjdbc.xml
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/test/resources/conf/standalone/test-configuration-sjdbc.xml	2009-10-23 15:26:35 UTC (rev 363)
+++ jcr/branches/1.12.0-JBC/component/core/src/test/resources/conf/standalone/test-configuration-sjdbc.xml	2009-10-23 15:57:11 UTC (rev 364)
@@ -1,3 +1,23 @@
+<!--
+
+    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.
+
+-->
 <?xml version="1.0" encoding="ISO-8859-1"?>
 <configuration
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

Modified: jcr/branches/1.12.0-JBC/component/core/src/test/resources/conf/standalone/test-configuration.xml
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/test/resources/conf/standalone/test-configuration.xml	2009-10-23 15:26:35 UTC (rev 363)
+++ jcr/branches/1.12.0-JBC/component/core/src/test/resources/conf/standalone/test-configuration.xml	2009-10-23 15:57:11 UTC (rev 364)
@@ -1,3 +1,23 @@
+<!--
+
+    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.
+
+-->
 <?xml version="1.0" encoding="ISO-8859-1"?>
 <configuration
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
@@ -152,13 +172,13 @@
         <description>JCR configuration file</description>
         <value>jar:/conf/standalone/test-jcr-config.xml</value>
       </value-param>
-      <properties-param>
+      <!-- properties-param>
         <name>working-conf</name>
         <description>working-conf</description>
         <property name="source-name" value="jdbcjcr"/>
         <property name="dialect" value="hsqldb"/>
         <property name="persister-class-name" value="org.exoplatform.services.jcr.impl.config.JDBCConfigurationPersister"/>
-      </properties-param>
+      </properties-param -->
     </init-params>
   </component>
   
@@ -535,7 +555,4 @@
       </init-params>
     </component-plugin>
   </external-component-plugins>
-  
-  <remove-configuration>org.exoplatform.services.scheduler.JobSchedulerService</remove-configuration>
-  <!--<import>jar:/conf/database-configuration.hsql.xml</import> -->
 </configuration>

Modified: jcr/branches/1.12.0-JBC/component/core/src/test/resources/conf/standalone/test-jcr-config.xml
===================================================================
--- jcr/branches/1.12.0-JBC/component/core/src/test/resources/conf/standalone/test-jcr-config.xml	2009-10-23 15:26:35 UTC (rev 363)
+++ jcr/branches/1.12.0-JBC/component/core/src/test/resources/conf/standalone/test-jcr-config.xml	2009-10-23 15:57:11 UTC (rev 364)
@@ -1,4 +1,3 @@
-
 <!--
 
     Copyright (C) 2009 eXo Platform SAS.
@@ -18,7 +17,8 @@
     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
     02110-1301 USA, or see the FSF site: http://www.fsf.org.
 
---><repository-service default-repository="db1">
+-->
+<repository-service default-repository="db1">
    <repositories>
       <repository name="db1" system-workspace="ws" default-workspace="ws">
          <security-domain>exo-domain</security-domain>
@@ -29,8 +29,9 @@
          <workspaces>
             <workspace name="ws">
                <!-- for system storage -->
-               <container class="org.exoplatform.services.jcr.impl.storage.jdbc.JDBCWorkspaceDataContainer">
+               <container class="org.exoplatform.services.jcr.impl.storage.jdbc.JBossCacheWorkspaceDataContainer">
                   <properties>
+                     <property name="jboss-cache-conf" value="/conf/portal/exojcr-jboss-cache-conf.xml" />
                      <property name="source-name" value="jdbcjcr" />
                      <property name="dialect" value="hsqldb" />
                      <property name="multi-db" value="true" />
@@ -58,21 +59,6 @@
                      <property name="root-nodetype" value="nt:unstructured" />
                   </properties>
                </initializer>
-               <!-- initializer class="org.exoplatform.services.jcr.impl.core.RestoreWorkspaceInitializer">
-                  <properties>
-                     <property name="restore-path" value="./sv_export_root.xml" />
-                     <property name="restore-path" value="./src/test/resources/import-export/restore_db1_ws1.xml" />
-                  </properties>
-               </initializer
--->
-               <cache enabled="true" class="org.exoplatform.services.jcr.impl.dataflow.persistent.LinkedWorkspaceStorageCacheImpl">
-                  <properties>
-                     <property name="max-size" value="2k" />
-                     <property name="live-time" value="20m" />
-                     <property name="statistic-period" value="30" />
-                     <property name="statistic-log" value="false" />
-                  </properties>
-               </cache>
                <query-handler class="org.exoplatform.services.jcr.impl.core.query.lucene.SearchIndex">
                   <properties>
                      <property name="index-dir" value="target/temp/index/db1/ws" />

Modified: jcr/branches/1.12.0-JBC/pom.xml
===================================================================
--- jcr/branches/1.12.0-JBC/pom.xml	2009-10-23 15:26:35 UTC (rev 363)
+++ jcr/branches/1.12.0-JBC/pom.xml	2009-10-23 15:57:11 UTC (rev 364)
@@ -393,6 +393,12 @@
             <version>1.5</version>
          </dependency>
 
+         <dependency>
+           <groupId>org.jboss.cache</groupId>
+           <artifactId>jbosscache-core</artifactId>
+           <version>3.1.0.GA</version>
+         </dependency>
+      
       </dependencies>
    </dependencyManagement>
 



More information about the exo-jcr-commits mailing list