[exo-jcr-commits] exo-jcr SVN: r3372 - in jcr/branches/1.12.x/exo.jcr.component.core: src/main/java/org/exoplatform/services/jcr/impl/core and 7 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Mon Nov 1 06:50:31 EDT 2010


Author: tolusha
Date: 2010-11-01 06:50:31 -0400 (Mon, 01 Nov 2010)
New Revision: 3372

Added:
   jcr/branches/1.12.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/access/TestPermissions.java
Modified:
   jcr/branches/1.12.x/exo.jcr.component.core/pom.xml
   jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NamespaceDataPersister.java
   jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java
   jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/ScratchWorkspaceInitializer.java
   jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionDataManager.java
   jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/nodetype/registration/JCRNodeTypeDataPersister.java
   jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/version/VersionHistoryImpl.java
   jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/version/VersionImpl.java
   jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/version/VersionHistoryDataHelper.java
   jcr/branches/1.12.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/util/ConfigurationHelper.java
   jcr/branches/1.12.x/exo.jcr.component.core/src/test/resources/conf/standalone/cluster/test-configuration.xml
   jcr/branches/1.12.x/exo.jcr.component.core/src/test/resources/conf/standalone/cluster/test-jcr-config.xml
   jcr/branches/1.12.x/exo.jcr.component.core/src/test/resources/conf/standalone/test-configuration-sjdbc.xml
   jcr/branches/1.12.x/exo.jcr.component.core/src/test/resources/conf/standalone/test-configuration.xml
   jcr/branches/1.12.x/exo.jcr.component.core/src/test/resources/conf/standalone/test-jcr-config-sjdbc.xml
   jcr/branches/1.12.x/exo.jcr.component.core/src/test/resources/conf/standalone/test-jcr-config.xml
Log:
JCR-1491: Use can perform versionable operation checkin/checkout/restore etc event he hasn't permission to system workspace

Modified: jcr/branches/1.12.x/exo.jcr.component.core/pom.xml
===================================================================
--- jcr/branches/1.12.x/exo.jcr.component.core/pom.xml	2010-11-01 10:04:33 UTC (rev 3371)
+++ jcr/branches/1.12.x/exo.jcr.component.core/pom.xml	2010-11-01 10:50:31 UTC (rev 3372)
@@ -677,7 +677,6 @@
                         <exclude>org/exoplatform/services/jcr/**/impl/**/TestRepositoryManagement.java</exclude>
                         <exclude>org/exoplatform/services/jcr/**/impl/**/TestSaveConfiguration.java</exclude>
                         <exclude>org/exoplatform/services/jcr/**/impl/**/ValueStoragePluginTest.java</exclude>
-                        <exclude>org/exoplatform/services/jcr/**/impl/**/TestWorkspaceRestore.java</exclude>
                         <exclude>org/exoplatform/services/jcr/**/impl/**/TestSessionCleaner.java</exclude>
                         <exclude>org/exoplatform/services/jcr/**/impl/**/Base*.java</exclude>
                         <exclude>org/exoplatform/services/jcr/**/impl/**/TestJCRSerializationStream.java</exclude>

Modified: jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NamespaceDataPersister.java
===================================================================
--- jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NamespaceDataPersister.java	2010-11-01 10:04:33 UTC (rev 3371)
+++ jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NamespaceDataPersister.java	2010-11-01 10:50:31 UTC (rev 3372)
@@ -352,12 +352,13 @@
 
       if (addACL)
       {
-         AccessControlList acl = new AccessControlList();
          InternalQName[] mixins = new InternalQName[]{Constants.EXO_OWNEABLE, Constants.EXO_PRIVILEGEABLE};
 
          exoNamespaces =
             TransientNodeData.createNodeData(nsSystem, Constants.EXO_NAMESPACES, Constants.NT_UNSTRUCTURED, mixins);
 
+         AccessControlList acl = exoNamespaces.getACL();
+
          TransientPropertyData primaryType =
             TransientPropertyData.createPropertyData(exoNamespaces, Constants.JCR_PRIMARYTYPE, PropertyType.NAME,
                false, new TransientValueData(exoNamespaces.getPrimaryTypeName()));

Modified: jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java
===================================================================
--- jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java	2010-11-01 10:04:33 UTC (rev 3371)
+++ jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java	2010-11-01 10:50:31 UTC (rev 3372)
@@ -354,6 +354,13 @@
       UnsupportedRepositoryOperationException, RepositoryException
    {
 
+      if (!session.getAccessManager().hasPermission(getACL(),
+         new String[]{PermissionType.ADD_NODE, PermissionType.SET_PROPERTY}, session.getUserState().getIdentity()))
+      {
+         throw new AccessDeniedException("Access denied: cancel merge operation " + getPath() + " for: "
+            + session.getUserID() + " item owner " + getACL().getOwner());
+      }
+
       checkValid();
 
       PlainChangesLog changesLog = new PlainChangesLogImpl(session.getId());
@@ -404,6 +411,13 @@
 
       checkValid();
 
+      if (!session.getAccessManager().hasPermission(getACL(),
+         new String[]{PermissionType.ADD_NODE, PermissionType.SET_PROPERTY}, session.getUserState().getIdentity()))
+      {
+         throw new AccessDeniedException("Access denied: checkin operation " + getPath() + " for: "
+            + session.getUserID() + " item owner " + getACL().getOwner());
+      }
+
       if (!this.isNodeType(Constants.MIX_VERSIONABLE))
          throw new UnsupportedRepositoryOperationException(
             "Node.checkin() is not supported for not mix:versionable node ");
@@ -441,7 +455,7 @@
 
       dataManager.getTransactManager().save(changesLog);
 
-      VersionImpl version = (VersionImpl)dataManager.getItemByIdentifier(verIdentifier, true);
+      VersionImpl version = (VersionImpl)dataManager.getItemByIdentifier(verIdentifier, true, false);
 
       session.getActionHandler().postCheckin(this);
       return version;
@@ -455,6 +469,13 @@
 
       checkValid();
 
+      if (!session.getAccessManager().hasPermission(getACL(), new String[]{PermissionType.SET_PROPERTY},
+         session.getUserState().getIdentity()))
+      {
+         throw new AccessDeniedException("Access denied: checkout operation " + getPath() + " for: "
+            + session.getUserID() + " item owner " + getACL().getOwner());
+      }
+
       if (!this.isNodeType(Constants.MIX_VERSIONABLE))
          throw new UnsupportedRepositoryOperationException(
             "Node.checkout() is not supported for not mix:versionable node ");
@@ -612,6 +633,12 @@
    public void doneMerge(Version version) throws VersionException, InvalidItemStateException,
       UnsupportedRepositoryOperationException, RepositoryException
    {
+      if (!session.getAccessManager().hasPermission(getACL(),
+         new String[]{PermissionType.ADD_NODE, PermissionType.SET_PROPERTY}, session.getUserState().getIdentity()))
+      {
+         throw new AccessDeniedException("Access denied: done merge operation " + getPath() + " for: "
+            + session.getUserID() + " item owner " + getACL().getOwner());
+      }
 
       PlainChangesLog changesLog = new PlainChangesLogImpl(session.getId());
 
@@ -686,7 +713,8 @@
             ItemType.PROPERTY);
       try
       {
-         return (Version)session.getNodeByUUID(ValueDataConvertor.readString(bvProp.getValues().get(0)));
+         return (Version)dataManager.getItemByIdentifier(ValueDataConvertor.readString(bvProp.getValues().get(0)),
+            true, false);
       }
       catch (IOException e)
       {
@@ -1415,6 +1443,7 @@
    /**
     * {@inheritDoc}
     */
+   @Override
    public void loadData(ItemData data, NodeData parent) throws RepositoryException, InvalidItemStateException,
       ConstraintViolationException
    {
@@ -1492,6 +1521,7 @@
    /**
     * {@inheritDoc}
     */
+   @Override
    public ItemDefinitionData getItemDefinitionData()
    {
       return definition;
@@ -1579,8 +1609,17 @@
 
       checkValid();
 
+      if (!session.getAccessManager().hasPermission(getACL(),
+         new String[]{PermissionType.ADD_NODE, PermissionType.SET_PROPERTY}, session.getUserState().getIdentity()))
+      {
+         throw new AccessDeniedException("Access denied: merge operation " + getPath() + " for: "
+            + session.getUserID() + " item owner " + getACL().getOwner());
+      }
+
       if (session.hasPendingChanges())
+      {
          throw new InvalidItemStateException("Session has pending changes ");
+      }
 
       Map<String, String> failed = new HashMap<String, String>();
 
@@ -1799,6 +1838,13 @@
 
       checkValid();
 
+      if (!session.getAccessManager().hasPermission(getACL(),
+         new String[]{PermissionType.ADD_NODE, PermissionType.SET_PROPERTY}, session.getUserState().getIdentity()))
+      {
+         throw new AccessDeniedException("Access denied: restore operation " + getPath() + " for: "
+            + session.getUserID() + " item owner " + getACL().getOwner());
+      }
+
       if (!this.isNodeType(Constants.MIX_VERSIONABLE))
          throw new UnsupportedRepositoryOperationException("Node is not versionable " + getPath());
 
@@ -1839,6 +1885,13 @@
          // restore at relPath
          checkValid();
 
+         if (!session.getAccessManager().hasPermission(getACL(),
+            new String[]{PermissionType.ADD_NODE, PermissionType.SET_PROPERTY}, session.getUserState().getIdentity()))
+         {
+            throw new AccessDeniedException("Access denied: restore operation " + getPath() + " for: "
+               + session.getUserID() + " item owner " + getACL().getOwner());
+         }
+
          if (session.hasPendingChanges())
             throw new InvalidItemStateException("Session has pending changes ");
 
@@ -2337,7 +2390,7 @@
       try
       {
          return (VersionHistoryImpl)dataManager.getItemByIdentifier(new String(vhProp.getValues().get(0)
-            .getAsByteArray()), pool);
+            .getAsByteArray()), pool, false);
       }
       catch (IOException e)
       {
@@ -3033,7 +3086,7 @@
             // check read conditions 
             if (canRead(item))
             {
-               next = (ItemImpl)session.getTransientNodesManager().readItem(item, nodeData(), true, false);
+               next = session.getTransientNodesManager().readItem(item, nodeData(), true, false);
             }
             else
             {

Modified: jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/ScratchWorkspaceInitializer.java
===================================================================
--- jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/ScratchWorkspaceInitializer.java	2010-11-01 10:04:33 UTC (rev 3371)
+++ jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/ScratchWorkspaceInitializer.java	2010-11-01 10:50:31 UTC (rev 3372)
@@ -139,9 +139,6 @@
             : Constants.NT_UNSTRUCTURED;
 
       this.dataManager = dataManager;
-      // this.nsPersister = nsPersister;
-      // this.ntRegistry = ntRegistry;
-
    }
 
    public NodeData initWorkspace() throws RepositoryException
@@ -273,13 +270,14 @@
 
       if (addACL)
       {
-         AccessControlList acl = new AccessControlList();
          InternalQName[] mixins = new InternalQName[]{Constants.EXO_OWNEABLE, Constants.EXO_PRIVILEGEABLE};
 
          jcrSystem =
             TransientNodeData.createNodeData(root, Constants.JCR_SYSTEM, Constants.NT_UNSTRUCTURED, mixins,
                Constants.SYSTEM_UUID);
 
+         AccessControlList acl = jcrSystem.getACL();
+
          TransientPropertyData primaryType =
             TransientPropertyData.createPropertyData(jcrSystem, Constants.JCR_PRIMARYTYPE, PropertyType.NAME, false,
                new TransientValueData(jcrSystem.getPrimaryTypeName()));
@@ -340,15 +338,6 @@
 
       dataManager.save(new TransactionChangesLog(changesLog));
 
-      //nsPersister.initStorage(jcrSystem, addACL, NamespaceRegistryImpl.DEF_NAMESPACES);
-      // nodeTypes save
-      // changesLog = new PlainChangesLogImpl();
-      // changesLog.addAll(ntPersister.initNodetypesRoot(jcrSystem,
-      // addACL).getAllStates());
-      // changesLog.addAll(ntPersister.initStorage(nodeTypeDataManager.getAllNodeTypes()).getAllStates());
-      // ntPersister.saveChanges(changesLog);
-
-      // nodeTypeDataManager.initDefaultNodeTypes(addACL);
       return jcrSystem;
    }
 

Modified: jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionDataManager.java
===================================================================
--- jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionDataManager.java	2010-11-01 10:04:33 UTC (rev 3371)
+++ jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionDataManager.java	2010-11-01 10:50:31 UTC (rev 3372)
@@ -300,6 +300,28 @@
    public ItemImpl getItem(NodeData parent, QPathEntry name, boolean pool, ItemType itemType)
       throws RepositoryException
    {
+      return getItem(parent, name, pool, itemType, true);
+   }
+
+   /**
+    * For internal use. Return Item by parent NodeDada and the name of searched item.
+    * 
+    * @param parent
+    *          - parent of the searched item
+    * @param name
+    *          - item name
+    * @param itemType
+    *          - item type
+    * @param pool
+    *          - indicates does the item fall in pool
+    * @param apiRead 
+    *          - if true will call postRead Action and check permissions              
+    * @return existed item or null if not found
+    * @throws RepositoryException
+    */
+   public ItemImpl getItem(NodeData parent, QPathEntry name, boolean pool, ItemType itemType, boolean apiRead)
+      throws RepositoryException
+   {
       long start = System.currentTimeMillis();
       if (log.isDebugEnabled())
       {
@@ -309,7 +331,7 @@
       ItemImpl item = null;
       try
       {
-         return item = readItem(getItemData(parent, name, itemType), pool);
+         return item = readItem(getItemData(parent, name, itemType), parent, pool, apiRead);
       }
       finally
       {
@@ -433,7 +455,7 @@
     * @param pool boolean, if true will reload pooled ItemImpl
     * @param apiRead boolean, if true will call postRead Action and check permissions 
     * @return ItemImpl
-    * @throws RepositoryException if errro occurs
+    * @throws RepositoryException if error occurs
     */
    protected ItemImpl readItem(ItemData itemData, NodeData parent, boolean pool, boolean apiRead)
       throws RepositoryException
@@ -483,6 +505,23 @@
     */
    public ItemImpl getItemByIdentifier(String identifier, boolean pool) throws RepositoryException
    {
+      return getItemByIdentifier(identifier, pool, true);
+   }
+
+   /**
+    * For internal use. Return item by identifier in this transient storage then in workspace container.
+    * 
+    * @param identifier
+    *          - identifier of searched item
+    * @param pool
+    *          - indicates does the item fall in pool
+    * @param apiRead 
+    *          - if true will call postRead Action and check permissions          
+    * @return existed item data or null if not found
+    * @throws RepositoryException
+    */
+   public ItemImpl getItemByIdentifier(String identifier, boolean pool, boolean apiRead) throws RepositoryException
+   {
       long start = System.currentTimeMillis();
       if (log.isDebugEnabled())
       {
@@ -492,7 +531,7 @@
       ItemImpl item = null;
       try
       {
-         return item = readItem(getItemData(identifier), pool);
+         return item = readItem(getItemData(identifier), null, pool, apiRead);
       }
       finally
       {
@@ -656,7 +695,7 @@
             if (accessManager.hasPermission(parent.getACL(), new String[]{PermissionType.READ}, session.getUserState()
                .getIdentity()))
             {
-               PropertyImpl item = (PropertyImpl)readItem(data, null, true, false);
+               PropertyImpl item = (PropertyImpl)readItem(data, parent, true, false);
 
                refs.add(item);
                session.getActionHandler().postRead(item);
@@ -1027,12 +1066,17 @@
     */
    public void delete(ItemData itemData) throws RepositoryException
    {
-      delete(itemData, itemData.getQPath());
+      delete(itemData, itemData.getQPath(), false);
    }
 
    public void delete(ItemData itemData, QPath ancestorToSave) throws RepositoryException
    {
+      delete(itemData, ancestorToSave, false);
+   }
 
+   protected void delete(ItemData itemData, QPath ancestorToSave, boolean isInternall) throws RepositoryException
+   {
+
       List<? extends ItemData> list = mergeList(itemData, transactionableManager, true, MERGE_ITEMS);
 
       List<ItemState> deletes = new ArrayList<ItemState>();
@@ -1057,7 +1101,8 @@
          {
             rootAdded = true;
          }
-         deletes.add(new ItemState(data, ItemState.DELETED, fireEvent, ancestorToSave, false));
+
+         deletes.add(new ItemState(data, ItemState.DELETED, fireEvent, ancestorToSave, isInternall));
          // if subnode contains JCR_VERSIONHISTORY property
          // we should remove version storage manually
          if (checkRemoveChildVersionStorages && !data.isNode()
@@ -1090,7 +1135,7 @@
       // 4 add item itself if not added
       if (!rootAdded)
       {
-         deletes.add(new ItemState(itemData, ItemState.DELETED, fireEvent, ancestorToSave, false));
+         deletes.add(new ItemState(itemData, ItemState.DELETED, fireEvent, ancestorToSave, isInternall));
 
          ItemImpl pooled = itemsPool.remove(itemData.getIdentifier());
          if (pooled != null)
@@ -1210,7 +1255,7 @@
       vhnode.accept(cvremover);
 
       // remove VH
-      delete(vhnode, ancestorToSave);
+      delete(vhnode, ancestorToSave, true);
    }
 
    /**
@@ -1524,6 +1569,17 @@
                      + parent.getACL().getOwner());
                }
             }
+            else if (changedItem.isMixinChanged())
+            {
+               if (!accessManager.hasPermission(parent.getACL(), new String[]{PermissionType.ADD_NODE,
+                  PermissionType.SET_PROPERTY}, session.getUserState().getIdentity()))
+               {
+                  throw new AccessDeniedException("Access denied: ADD_NODE or SET_PROPERTY"
+                     + changedItem.getData().getQPath().getAsString() + " for: " + session.getUserID() + " item owner "
+                     + parent.getACL().getOwner());
+               }
+            }
+
          }
          else if (changedItem.isAdded() || changedItem.isUpdated())
          {

Modified: jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/nodetype/registration/JCRNodeTypeDataPersister.java
===================================================================
--- jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/nodetype/registration/JCRNodeTypeDataPersister.java	2010-11-01 10:04:33 UTC (rev 3371)
+++ jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/nodetype/registration/JCRNodeTypeDataPersister.java	2010-11-01 10:50:31 UTC (rev 3372)
@@ -155,13 +155,14 @@
 
       if (addACL)
       {
-         AccessControlList acl = new AccessControlList();
          InternalQName[] mixins = new InternalQName[]{Constants.EXO_OWNEABLE, Constants.EXO_PRIVILEGEABLE};
 
          jcrNodetypes =
             TransientNodeData.createNodeData(nsSystem, Constants.JCR_NODETYPES, Constants.NT_UNSTRUCTURED, mixins,
                Constants.NODETYPESROOT_UUID);
 
+         AccessControlList acl = jcrNodetypes.getACL();
+
          TransientPropertyData primaryType =
             TransientPropertyData.createPropertyData(jcrNodetypes, Constants.JCR_PRIMARYTYPE, PropertyType.NAME, false,
                new TransientValueData(jcrNodetypes.getPrimaryTypeName()));

Modified: jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/version/VersionHistoryImpl.java
===================================================================
--- jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/version/VersionHistoryImpl.java	2010-11-01 10:04:33 UTC (rev 3371)
+++ jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/version/VersionHistoryImpl.java	2010-11-01 10:50:31 UTC (rev 3372)
@@ -186,7 +186,7 @@
       JCRName jcrVersionName = locationFactory.parseJCRName(versionName);
       VersionImpl version =
          (VersionImpl)dataManager.getItem(nodeData(), new QPathEntry(jcrVersionName.getInternalName(), 1), pool,
-            ItemType.NODE);
+            ItemType.NODE, false);
       if (version == null)
          throw new VersionException("There are no version with name '" + versionName + "' in the version history "
             + getPath());
@@ -205,7 +205,7 @@
       if (versionData == null)
          throw new RepositoryException("There are no label '" + label + "' in the version history " + getPath());
 
-      VersionImpl version = (VersionImpl)dataManager.getItemByIdentifier(versionData.getIdentifier(), true);
+      VersionImpl version = (VersionImpl)dataManager.getItemByIdentifier(versionData.getIdentifier(), true, false);
 
       if (version == null)
          throw new VersionException("There are no version with label '" + label + "' in the version history "
@@ -357,7 +357,7 @@
          for (ValueData pvalue : predecessorsData.getValues())
          {
             String pidentifier = new String(pvalue.getAsByteArray());
-            VersionImpl predecessor = (VersionImpl)dataManager.getItemByIdentifier(pidentifier, false);
+            VersionImpl predecessor = (VersionImpl)dataManager.getItemByIdentifier(pidentifier, false, false);
             // actually predecessor is V2's successor
             if (predecessor != null)
             {// V2's successor
@@ -395,7 +395,7 @@
             for (ValueData svalue : successorsData.getValues())
             {
                String sidentifier = new String(svalue.getAsByteArray());
-               VersionImpl successor = (VersionImpl)dataManager.getItemByIdentifier(sidentifier, false);
+               VersionImpl successor = (VersionImpl)dataManager.getItemByIdentifier(sidentifier, false, false);
                if (successor != null)
                {
                   // case of VH graph merge
@@ -586,7 +586,7 @@
          {
             throw new RepositoryException(e);
          }
-         VersionImpl predecessor = (VersionImpl)dataManager.getItemByIdentifier(new String(pib), false);
+         VersionImpl predecessor = (VersionImpl)dataManager.getItemByIdentifier(new String(pib), false, false);
          predecessor.addSuccessor(versionData.getIdentifier(), changesLog);
          
          predecessorsNew.add(new TransientValueData(pib));

Modified: jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/version/VersionImpl.java
===================================================================
--- jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/version/VersionImpl.java	2010-11-01 10:04:33 UTC (rev 3371)
+++ jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/version/VersionImpl.java	2010-11-01 10:50:31 UTC (rev 3372)
@@ -157,7 +157,7 @@
          for (int i = 0; i < predecessorsValues.size(); i++)
          {
             String videntifier = new String(predecessorsValues.get(i).getAsByteArray());
-            VersionImpl version = (VersionImpl)dataManager.getItemByIdentifier(videntifier, false);
+            VersionImpl version = (VersionImpl)dataManager.getItemByIdentifier(videntifier, false, false);
             if (version != null)
             {
                predecessors[i] = version;
@@ -438,7 +438,7 @@
       checkValid();
 
       VersionHistoryImpl vhistory =
-         (VersionHistoryImpl)dataManager.getItemByIdentifier(nodeData().getParentIdentifier(), true);
+         (VersionHistoryImpl)dataManager.getItemByIdentifier(nodeData().getParentIdentifier(), true, false);
 
       if (vhistory == null)
       {

Modified: jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/version/VersionHistoryDataHelper.java
===================================================================
--- jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/version/VersionHistoryDataHelper.java	2010-11-01 10:04:33 UTC (rev 3371)
+++ jcr/branches/1.12.x/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/version/VersionHistoryDataHelper.java	2010-11-01 10:50:31 UTC (rev 3372)
@@ -335,19 +335,19 @@
 
       // update all
       QPath vpath = versionable.getQPath();
-      changes.add(new ItemState(versionHistory, ItemState.ADDED, true, vpath));
-      changes.add(new ItemState(vhPrimaryType, ItemState.ADDED, true, vpath));
-      changes.add(new ItemState(vhUuid, ItemState.ADDED, true, vpath));
-      changes.add(new ItemState(vhVersionableUuid, ItemState.ADDED, true, vpath));
+      changes.add(new ItemState(versionHistory, ItemState.ADDED, true, vpath, true));
+      changes.add(new ItemState(vhPrimaryType, ItemState.ADDED, true, vpath, true));
+      changes.add(new ItemState(vhUuid, ItemState.ADDED, true, vpath, true));
+      changes.add(new ItemState(vhVersionableUuid, ItemState.ADDED, true, vpath, true));
 
-      changes.add(new ItemState(vhVersionLabels, ItemState.ADDED, true, vpath));
-      changes.add(new ItemState(vlPrimaryType, ItemState.ADDED, true, vpath));
+      changes.add(new ItemState(vhVersionLabels, ItemState.ADDED, true, vpath, true));
+      changes.add(new ItemState(vlPrimaryType, ItemState.ADDED, true, vpath, true));
 
-      changes.add(new ItemState(rootVersionData, ItemState.ADDED, true, vpath));
-      changes.add(new ItemState(rvPrimaryType, ItemState.ADDED, true, vpath));
-      changes.add(new ItemState(rvMixinTypes, ItemState.ADDED, true, vpath));
-      changes.add(new ItemState(rvUuid, ItemState.ADDED, true, vpath));
-      changes.add(new ItemState(rvCreated, ItemState.ADDED, true, vpath));
+      changes.add(new ItemState(rootVersionData, ItemState.ADDED, true, vpath, true));
+      changes.add(new ItemState(rvPrimaryType, ItemState.ADDED, true, vpath, true));
+      changes.add(new ItemState(rvMixinTypes, ItemState.ADDED, true, vpath, true));
+      changes.add(new ItemState(rvUuid, ItemState.ADDED, true, vpath, true));
+      changes.add(new ItemState(rvCreated, ItemState.ADDED, true, vpath, true));
 
       changes.add(ItemState.createAddedState(vh));
       changes.add(ItemState.createAddedState(bv));

Added: jcr/branches/1.12.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/access/TestPermissions.java
===================================================================
--- jcr/branches/1.12.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/access/TestPermissions.java	                        (rev 0)
+++ jcr/branches/1.12.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/access/TestPermissions.java	2010-11-01 10:50:31 UTC (rev 3372)
@@ -0,0 +1,250 @@
+/*
+ * Copyright (C) 2010 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.access;
+
+import org.exoplatform.services.jcr.BaseStandaloneTest;
+import org.exoplatform.services.jcr.access.PermissionType;
+import org.exoplatform.services.jcr.access.SystemIdentity;
+import org.exoplatform.services.jcr.core.CredentialsImpl;
+import org.exoplatform.services.jcr.impl.core.NodeImpl;
+import org.exoplatform.services.jcr.impl.core.SessionImpl;
+
+import javax.jcr.AccessDeniedException;
+import javax.jcr.Credentials;
+import javax.jcr.Node;
+import javax.jcr.Repository;
+import javax.jcr.version.Version;
+
+/**
+ * @author <a href="anatoliy.bazko at exoplatform.org">Anatoliy Bazko</a>
+ * @version $Id: TestRemoveSysteNode.java 111 2010-11-11 11:11:11Z tolusha $
+ */
+public class TestPermissions extends BaseStandaloneTest
+{
+
+   protected SessionImpl sessionMaryWS;
+
+   protected SessionImpl sessionMaryWS1;
+
+   protected SessionImpl sessionWS;
+
+   protected SessionImpl sessionWS1;
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   protected String getRepositoryName()
+   {
+      return null;
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   public void setUp() throws Exception
+   {
+      super.setUp();
+
+      Repository repository = repositoryService.getRepository("db2");
+      Credentials credentials = new CredentialsImpl("admin", "admin".toCharArray());
+      sessionWS = (SessionImpl)repository.login(credentials, "ws");
+      sessionWS1 = (SessionImpl)repository.login(credentials, "ws1");
+
+      repository = repositoryService.getRepository("db2");
+      credentials = new CredentialsImpl("mary", "exo".toCharArray());
+      sessionMaryWS = (SessionImpl)repository.login(credentials, "ws");
+      sessionMaryWS1 = (SessionImpl)repository.login(credentials, "ws1");
+
+      // add node with only read permission for mary
+      NodeImpl node = (NodeImpl)sessionWS1.getRootNode().addNode("MARY-ReadOnly");
+      node.addMixin("exo:privilegeable");
+      node.addMixin("exo:owneable");
+      node.setPermission("mary", new String[]{PermissionType.READ});
+      node.setPermission("admin", PermissionType.ALL);
+      node.removePermission(SystemIdentity.ANY);
+      node.addNode("test");
+      sessionWS1.save();
+
+      sessionWS1.getRootNode().addNode("MARY-ReadWrite");
+      sessionWS1.save();
+   }
+
+   @Override
+   public void tearDown() throws Exception
+   {
+      sessionMaryWS.logout();
+      sessionMaryWS1.logout();
+      sessionWS.logout();
+      sessionWS1.logout();
+
+      super.tearDown();
+   }
+
+   /**
+    * Test if Mary can read root node of system workspace.
+    */
+   public void testGetRootNodeWSFailed() throws Exception
+   {
+      try
+      {
+         sessionMaryWS.getRootNode();
+
+         fail("Exception should be thrown.");
+      }
+      catch (AccessDeniedException e)
+      {
+      }
+   }
+
+   /**
+    * Test if Mary can perform versions operations in workspace where she has all right
+    * and in same time she has not rights in system workspace. 
+    */
+   public void testCheckinCheckoutWS1Success() throws Exception
+   {
+      NodeImpl node = (NodeImpl)sessionMaryWS1.getRootNode().getNode("MARY-ReadWrite");
+      node.addMixin("mix:versionable");
+      sessionMaryWS1.save();
+
+      node.checkin();
+      node.checkout();
+
+      Version version = node.getVersionHistory().getVersion("1");
+      version.getPredecessors();
+      version.getSuccessors();
+      version.getContainingHistory();
+
+      node.restore("1", true);
+
+      node.remove();
+      sessionMaryWS1.save();
+   }
+
+   /**
+    * Test if Mary can add mixin on node with only read permission.
+    */
+   public void testAddMixinWS1Failed() throws Exception
+   {
+      NodeImpl node = (NodeImpl)sessionMaryWS1.getRootNode().getNode("MARY-ReadOnly").getNode("test");
+
+      try
+      {
+         node.addMixin("mix:versionable");
+         sessionMaryWS1.save();
+
+         fail("Exception should be thrown.");
+      }
+      catch (AccessDeniedException e)
+      {
+      }
+   }
+
+   /**
+    * Test if Mary can remove mixin on node with only read permission.
+    */
+   public void testRemoveMixinWS1Failed() throws Exception
+   {
+      NodeImpl node = (NodeImpl)sessionWS1.getRootNode().getNode("MARY-ReadOnly").getNode("test");
+      node.addMixin("mix:versionable");
+      sessionWS1.save();
+
+      node = (NodeImpl)sessionMaryWS1.getRootNode().getNode("MARY-ReadOnly").getNode("test");
+
+      try
+      {
+         node.removeMixin("mix:versionable");
+         sessionMaryWS1.save();
+
+         fail("Exception should be thrown.");
+      }
+      catch (AccessDeniedException e)
+      {
+      }
+   }
+
+   /**
+    * Test if Mary can checkin on node with only read permission.
+    */
+   public void testCheckinWS1Failed() throws Exception
+   {
+      Node node = sessionWS1.getRootNode().getNode("MARY-ReadOnly").getNode("test");
+      node.addMixin("mix:versionable");
+      sessionWS1.save();
+
+      node = sessionMaryWS1.getRootNode().getNode("MARY-ReadOnly").getNode("test");
+
+      try
+      {
+         node.checkin();
+         fail("Exception should be thrown.");
+      }
+      catch (AccessDeniedException e)
+      {
+      }
+   }
+
+   /**
+    * Test if Mary can checkout on node with only read permission.
+    */
+   public void testCheckoutWS1Failed() throws Exception
+   {
+      Node node = sessionWS1.getRootNode().getNode("MARY-ReadOnly").getNode("test");
+      node.addMixin("mix:versionable");
+      sessionWS1.save();
+
+      node.checkin();
+
+      node = sessionMaryWS1.getRootNode().getNode("MARY-ReadOnly").getNode("test");
+
+      try
+      {
+         node.checkout();
+         fail("Exception should be thrown.");
+      }
+      catch (AccessDeniedException e)
+      {
+      }
+   }
+
+   /**
+    * Test if Mary can restore on node with only read permission.
+    */
+   public void testRestoreWS1Failed() throws Exception
+   {
+      Node node = sessionWS1.getRootNode().getNode("MARY-ReadOnly").getNode("test");
+      node.addMixin("mix:versionable");
+      sessionWS1.save();
+
+      node.checkin();
+      node.checkout();
+
+      node = sessionMaryWS1.getRootNode().getNode("MARY-ReadOnly").getNode("test");
+
+      try
+      {
+         node.restore("1", true);
+         fail("Exception should be thrown.");
+      }
+      catch (AccessDeniedException e)
+      {
+      }
+   }
+}

Modified: jcr/branches/1.12.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/util/ConfigurationHelper.java
===================================================================
--- jcr/branches/1.12.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/util/ConfigurationHelper.java	2010-11-01 10:04:33 UTC (rev 3371)
+++ jcr/branches/1.12.x/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/util/ConfigurationHelper.java	2010-11-01 10:50:31 UTC (rev 3372)
@@ -118,13 +118,9 @@
       params.add(new SimpleParameterEntry("multi-db", isMultiDb ? "true" : "false"));
       params.add(new SimpleParameterEntry("update-storage", "true"));
       params.add(new SimpleParameterEntry("max-buffer-size", "204800"));
+      params.add(new SimpleParameterEntry(JDBCWorkspaceDataContainer.DB_DIALECT, entry.getParameterValue(
+         JDBCWorkspaceDataContainer.DB_DIALECT, "auto")));
 
-      if (entry.getParameterValue(JDBCWorkspaceDataContainer.DB_DIALECT) != null)
-      {
-         params.add(new SimpleParameterEntry(JDBCWorkspaceDataContainer.DB_DIALECT, entry
-            .getParameterValue(JDBCWorkspaceDataContainer.DB_DIALECT)));
-      }
-
       String oldSwap = entry.getParameterValue("swap-directory");
       String newSwap = oldSwap.substring(0, oldSwap.lastIndexOf('/')) + '/' + wsName;
 

Modified: jcr/branches/1.12.x/exo.jcr.component.core/src/test/resources/conf/standalone/cluster/test-configuration.xml
===================================================================
--- jcr/branches/1.12.x/exo.jcr.component.core/src/test/resources/conf/standalone/cluster/test-configuration.xml	2010-11-01 10:04:33 UTC (rev 3371)
+++ jcr/branches/1.12.x/exo.jcr.component.core/src/test/resources/conf/standalone/cluster/test-configuration.xml	2010-11-01 10:50:31 UTC (rev 3372)
@@ -369,6 +369,60 @@
       <init-params>
         <value-param>
           <name>bind-name</name>
+          <value>jdbcjcrdb2</value>
+        </value-param>
+        <value-param>
+          <name>class-name</name>
+          <value>javax.sql.DataSource</value>
+        </value-param>
+        <value-param>
+          <name>factory</name>
+          <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
+        </value-param>
+        <properties-param>
+          <name>ref-addresses</name>
+          <description>ref-addresses</description>
+          <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
+          <property name="url" value="jdbc:hsqldb:file:target/temp/data/portaldb2"/>
+          <property name="username" value="sa"/>
+          <property name="password" value=""/>
+        </properties-param>
+      </init-params>
+    </component-plugin>
+    <component-plugin>
+      <name>bind.datasource</name>
+      <set-method>addPlugin</set-method>
+      <type>org.exoplatform.services.naming.BindReferencePlugin</type>
+      <init-params>
+        <value-param>
+          <name>bind-name</name>
+          <value>jdbcjcr1db2</value>
+        </value-param>
+        <value-param>
+          <name>class-name</name>
+          <value>javax.sql.DataSource</value>
+        </value-param>
+        <value-param>
+          <name>factory</name>
+          <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
+        </value-param>
+        <properties-param>
+          <name>ref-addresses</name>
+          <description>ref-addresses</description>
+          <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
+          <property name="url" value="jdbc:hsqldb:file:target/temp/data/jcrdb2"/>
+          <property name="username" value="sa"/>
+          <property name="password" value=""/>
+        </properties-param>
+      </init-params>
+    </component-plugin>
+    <component-plugin>
+      <name>bind.datasource</name>
+      <set-method>addPlugin</set-method>
+      <type>org.exoplatform.services.naming.BindReferencePlugin</type>
+      <init-params>
+        <value-param>
+          <name>bind-name</name>
           <value>jdbcjcrtck</value>
         </value-param>
         <value-param>

Modified: jcr/branches/1.12.x/exo.jcr.component.core/src/test/resources/conf/standalone/cluster/test-jcr-config.xml
===================================================================
--- jcr/branches/1.12.x/exo.jcr.component.core/src/test/resources/conf/standalone/cluster/test-jcr-config.xml	2010-11-01 10:04:33 UTC (rev 3371)
+++ jcr/branches/1.12.x/exo.jcr.component.core/src/test/resources/conf/standalone/cluster/test-jcr-config.xml	2010-11-01 10:50:31 UTC (rev 3372)
@@ -311,8 +311,145 @@
                   </properties>
                </lock-manager>
             </workspace>
+         </workspaces>
+      </repository>
 
+      <repository name="db2" system-workspace="ws" default-workspace="ws">
+         <security-domain>exo-domain</security-domain>
+         <!-- access-control>optional</access-control -->
+         <!-- access-control>disable</access-control -->
+         <session-max-age>1h</session-max-age>
+         <authentication-policy>org.exoplatform.services.jcr.impl.core.access.JAASAuthenticator</authentication-policy>
+         <workspaces>
+            <workspace name="ws">
+               <!-- for system storage -->
+               <container class="org.exoplatform.services.jcr.impl.storage.jdbc.optimisation.CQJDBCWorkspaceDataContainer">
+                  <properties>
+                     <property name="source-name" value="jdbcjcrdb2" />
+                     <property name="multi-db" value="true" />
+                     <property name="update-storage" value="false" />
+                     <property name="max-buffer-size" value="200k" />
+                     <property name="swap-directory" value="target/temp/swap/wsdb2" />
+                  </properties>
+                  <value-storages>
+                     <value-storage id="ws"
+                        class="org.exoplatform.services.jcr.impl.storage.value.fs.TreeFileValueStorage">
+                        <properties>
+                           <property name="path" value="target/temp/values/wsdb2" />
+                        </properties>
+                        <filters>
+                           <filter property-type="Binary" min-value-size="100K" />
+                        </filters>
+                     </value-storage>
+                  </value-storages>
+               </container>
+               <initializer class="org.exoplatform.services.jcr.impl.core.ScratchWorkspaceInitializer">
+                  <properties>
+                     <property name="root-nodetype" value="nt:unstructured" />
+                     <property name="root-permissions" value="*:/platform/administrators read;*:/platform/administrators add_node;*:/platform/administrators set_property;*:/platform/administrators remove" />
+                  </properties>
+               </initializer>
+               <cache enabled="true" class="org.exoplatform.services.jcr.impl.dataflow.persistent.jbosscache.JBossCacheWorkspaceStorageCache">
+                  <properties>
+                     <property name="jbosscache-configuration" value="test-jbosscache-data.xml" />
+                     <property name="jgroups-configuration" value="udp-mux.xml" />
+                     <property name="jgroups-multiplexer-stack" value="true" />
+                     <property name="jbosscache-cluster-name" value="JCR-cluster-db2-ws" />
+                  </properties>
+               </cache>
+               <query-handler class="org.exoplatform.services.jcr.impl.core.query.lucene.SearchIndex">
+                  <properties>
+                     <property name="index-dir" value="target/temp/index/db2/ws" />
+                     <property name="changesfilter-class" value="org.exoplatform.services.jcr.impl.core.query.jbosscache.JBossCacheIndexChangesFilter" />
+                     <property name="jbosscache-configuration" value="test-jbosscache-indexer.xml" />
+                     <property name="jgroups-configuration" value="udp-mux.xml" />
+                     <property name="jgroups-multiplexer-stack" value="true" />
+                     <property name="jbosscache-cluster-name" value="JCR-cluster-indexer-db2-ws" />
+                  </properties>
+               </query-handler>
+               <lock-manager class="org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManagerImpl">
+                  <properties>
+                     <property name="time-out" value="15m" />
+                     <property name="jbosscache-configuration" value="test-jbosscache-lock.xml" />
+                     <property name="jgroups-configuration" value="udp-mux.xml" />
+                     <property name="jgroups-multiplexer-stack" value="true" />
+                     <property name="jbosscache-cluster-name" value="JCR-cluster-locks-db2-ws" />
+                     <property name="jbosscache-cl-cache.jdbc.table.name" value="jcrlocks_db2tck_ws" />
+                     <property name="jbosscache-cl-cache.jdbc.table.create" value="true" />
+                     <property name="jbosscache-cl-cache.jdbc.table.drop" value="false" />
+                     <property name="jbosscache-cl-cache.jdbc.table.primarykey" value="jcrlocks_db2tck_ws_pk" />
+                     <property name="jbosscache-cl-cache.jdbc.fqn.column" value="fqn" />
+                     <property name="jbosscache-cl-cache.jdbc.node.column" value="node" />
+                     <property name="jbosscache-cl-cache.jdbc.parent.column" value="parent" />
+                     <property name="jbosscache-cl-cache.jdbc.datasource" value="jdbcjcr" />
+                  </properties>
+               </lock-manager>
+            </workspace>
 
+            <workspace name="ws1">
+               <container class="org.exoplatform.services.jcr.impl.storage.jdbc.optimisation.CQJDBCWorkspaceDataContainer">
+                  <properties>
+                     <property name="source-name" value="jdbcjcr1db2" />
+                     <property name="multi-db" value="true" />
+                     <property name="update-storage" value="false" />
+                     <property name="max-buffer-size" value="200k" />
+                     <property name="swap-directory" value="target/temp/swap/ws1db2" />
+                  </properties>
+                  <value-storages>
+                     <value-storage id="ws1"
+                        class="org.exoplatform.services.jcr.impl.storage.value.fs.TreeFileValueStorage">
+                        <properties>
+                           <property name="path" value="target/temp/values/ws1db2" />
+                        </properties>
+                        <filters>
+                           <filter property-type="Binary" min-value-size="100K" />
+                        </filters>
+                     </value-storage>
+                  </value-storages>
+               </container>
+               <initializer class="org.exoplatform.services.jcr.impl.core.ScratchWorkspaceInitializer">
+                  <properties>
+                     <property name="root-nodetype" value="nt:unstructured" />
+                     <property name="root-permissions" value="any read;any add_node;any set_property;any remove" />
+                  </properties>
+               </initializer>
+               <cache enabled="true"
+                  class="org.exoplatform.services.jcr.impl.dataflow.persistent.jbosscache.JBossCacheWorkspaceStorageCache">
+                  <properties>
+                     <property name="jbosscache-configuration" value="test-jbosscache-data.xml" />
+                     <property name="jgroups-configuration" value="udp-mux.xml" />
+                     <property name="jgroups-multiplexer-stack" value="true" />
+                     <property name="jbosscache-cluster-name" value="JCR-cluster-db2-ws1" />
+                  </properties>
+               </cache>
+               <query-handler class="org.exoplatform.services.jcr.impl.core.query.lucene.SearchIndex">
+                  <properties>
+                     <property name="index-dir" value="target/temp/index/db2/ws1" />
+                     <property name="changesfilter-class" value="org.exoplatform.services.jcr.impl.core.query.jbosscache.JBossCacheIndexChangesFilter" />
+                     <property name="jbosscache-configuration" value="test-jbosscache-indexer.xml" />
+                     <property name="jgroups-configuration" value="udp-mux.xml" />
+                     <property name="jgroups-multiplexer-stack" value="true" />
+                     <property name="jbosscache-cluster-name" value="JCR-cluster-indexer-db2-ws1" />
+                  </properties>
+               </query-handler>
+               <lock-manager class="org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManagerImpl">
+                  <properties>
+                     <property name="time-out" value="15m" />
+                     <property name="jbosscache-configuration" value="test-jbosscache-lock.xml" />
+                     <property name="jgroups-configuration" value="udp-mux.xml" />
+                     <property name="jgroups-multiplexer-stack" value="true" />
+                     <property name="jbosscache-cluster-name" value="JCR-cluster-locks-db2-ws1" />
+                     <property name="jbosscache-cl-cache.jdbc.table.name" value="jcrlocks_db2_ws1" />
+                     <property name="jbosscache-cl-cache.jdbc.table.create" value="true" />
+                     <property name="jbosscache-cl-cache.jdbc.table.drop" value="false" />
+                     <property name="jbosscache-cl-cache.jdbc.table.primarykey" value="jcrlocks_db2_ws1_pk" />
+                     <property name="jbosscache-cl-cache.jdbc.fqn.column" value="fqn" />
+                     <property name="jbosscache-cl-cache.jdbc.node.column" value="node" />
+                     <property name="jbosscache-cl-cache.jdbc.parent.column" value="parent" />
+                     <property name="jbosscache-cl-cache.jdbc.datasource" value="jdbcjcr" />
+                  </properties>
+               </lock-manager>
+            </workspace>
          </workspaces>
       </repository>
 

Modified: jcr/branches/1.12.x/exo.jcr.component.core/src/test/resources/conf/standalone/test-configuration-sjdbc.xml
===================================================================
--- jcr/branches/1.12.x/exo.jcr.component.core/src/test/resources/conf/standalone/test-configuration-sjdbc.xml	2010-11-01 10:04:33 UTC (rev 3371)
+++ jcr/branches/1.12.x/exo.jcr.component.core/src/test/resources/conf/standalone/test-configuration-sjdbc.xml	2010-11-01 10:50:31 UTC (rev 3372)
@@ -289,6 +289,33 @@
       <init-params>
         <value-param>
           <name>bind-name</name>
+          <value>jdbcjcrdb2</value>
+        </value-param>
+        <value-param>
+          <name>class-name</name>
+          <value>javax.sql.DataSource</value>
+        </value-param>
+        <value-param>
+          <name>factory</name>
+          <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
+        </value-param>
+        <properties-param>
+          <name>ref-addresses</name>
+          <description>ref-addresses</description>
+          <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
+          <property name="url" value="jdbc:hsqldb:file:target/temp/data/portaldb2"/>
+          <property name="username" value="sa"/>
+          <property name="password" value=""/>
+        </properties-param>
+      </init-params>
+    </component-plugin>
+    <component-plugin>
+      <name>bind.datasource</name>
+      <set-method>addPlugin</set-method>
+      <type>org.exoplatform.services.naming.BindReferencePlugin</type>
+      <init-params>
+        <value-param>
+          <name>bind-name</name>
           <value>jdbcjcrtck</value>
         </value-param>
         <value-param>

Modified: jcr/branches/1.12.x/exo.jcr.component.core/src/test/resources/conf/standalone/test-configuration.xml
===================================================================
--- jcr/branches/1.12.x/exo.jcr.component.core/src/test/resources/conf/standalone/test-configuration.xml	2010-11-01 10:04:33 UTC (rev 3371)
+++ jcr/branches/1.12.x/exo.jcr.component.core/src/test/resources/conf/standalone/test-configuration.xml	2010-11-01 10:50:31 UTC (rev 3372)
@@ -255,7 +255,7 @@
         </properties-param>
       </init-params>
     </component-plugin>
-	<component-plugin>
+    <component-plugin>
       <name>bind.datasource</name>
       <set-method>addPlugin</set-method>
       <type>org.exoplatform.services.naming.BindReferencePlugin</type>
@@ -336,7 +336,7 @@
         </properties-param>
       </init-params>
     </component-plugin>
-	<component-plugin>
+    <component-plugin>
       <name>bind.datasource</name>
       <set-method>addPlugin</set-method>
       <type>org.exoplatform.services.naming.BindReferencePlugin</type>
@@ -370,6 +370,60 @@
       <init-params>
         <value-param>
           <name>bind-name</name>
+          <value>jdbcjcrdb2</value>
+        </value-param>
+        <value-param>
+          <name>class-name</name>
+          <value>javax.sql.DataSource</value>
+        </value-param>
+        <value-param>
+          <name>factory</name>
+          <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
+        </value-param>
+        <properties-param>
+          <name>ref-addresses</name>
+          <description>ref-addresses</description>
+          <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
+          <property name="url" value="jdbc:hsqldb:file:target/temp/data/portaldb2"/>
+          <property name="username" value="sa"/>
+          <property name="password" value=""/>
+        </properties-param>
+      </init-params>
+    </component-plugin>
+    <component-plugin>
+      <name>bind.datasource</name>
+      <set-method>addPlugin</set-method>
+      <type>org.exoplatform.services.naming.BindReferencePlugin</type>
+      <init-params>
+        <value-param>
+          <name>bind-name</name>
+          <value>jdbcjcr1db2</value>
+        </value-param>
+        <value-param>
+          <name>class-name</name>
+          <value>javax.sql.DataSource</value>
+        </value-param>
+        <value-param>
+          <name>factory</name>
+          <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
+        </value-param>
+        <properties-param>
+          <name>ref-addresses</name>
+          <description>ref-addresses</description>
+          <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
+          <property name="url" value="jdbc:hsqldb:file:target/temp/data/jcrdb2"/>
+          <property name="username" value="sa"/>
+          <property name="password" value=""/>
+        </properties-param>
+      </init-params>
+    </component-plugin>
+    <component-plugin>
+      <name>bind.datasource</name>
+      <set-method>addPlugin</set-method>
+      <type>org.exoplatform.services.naming.BindReferencePlugin</type>
+      <init-params>
+        <value-param>
+          <name>bind-name</name>
           <value>jdbcjcrtck</value>
         </value-param>
         <value-param>

Modified: jcr/branches/1.12.x/exo.jcr.component.core/src/test/resources/conf/standalone/test-jcr-config-sjdbc.xml
===================================================================
--- jcr/branches/1.12.x/exo.jcr.component.core/src/test/resources/conf/standalone/test-jcr-config-sjdbc.xml	2010-11-01 10:04:33 UTC (rev 3371)
+++ jcr/branches/1.12.x/exo.jcr.component.core/src/test/resources/conf/standalone/test-jcr-config-sjdbc.xml	2010-11-01 10:50:31 UTC (rev 3372)
@@ -287,6 +287,126 @@
          </workspaces>
       </repository>
 
+      <repository name="db2" system-workspace="ws" default-workspace="ws">
+         <security-domain>exo-domain</security-domain>
+         <!-- access-control>optional</access-control -->
+         <!-- access-control>disable</access-control -->
+         <session-max-age>1h</session-max-age>
+         <authentication-policy>org.exoplatform.services.jcr.impl.core.access.JAASAuthenticator</authentication-policy>
+         <workspaces>
+            <workspace name="ws">
+               <!-- for system storage -->
+               <container class="org.exoplatform.services.jcr.impl.storage.jdbc.optimisation.CQJDBCWorkspaceDataContainer">
+                  <properties>
+                     <property name="source-name" value="jdbcjcrdb2" />
+                     <property name="dialect" value="auto" />
+                     <property name="multi-db" value="false" />
+                     <property name="update-storage" value="false" />
+                     <property name="max-buffer-size" value="200k" />
+                     <property name="swap-directory" value="target/temp/swap/wsdb2" />
+                  </properties>
+                  <value-storages>
+                     <value-storage id="ws" class="org.exoplatform.services.jcr.impl.storage.value.fs.TreeFileValueStorage">
+                        <properties>
+                           <property name="path" value="target/temp/values/wsdb2" />
+                        </properties>
+                        <filters>
+                           <filter property-type="Binary" min-value-size="100K" />
+                        </filters>
+                     </value-storage>
+                  </value-storages>
+               </container>
+               <initializer class="org.exoplatform.services.jcr.impl.core.ScratchWorkspaceInitializer">
+                  <properties>
+                     <property name="root-nodetype" value="nt:unstructured" />
+                     <property name="root-permissions" value="*:/platform/administrators read;*:/platform/administrators add_node;*:/platform/administrators set_property;*:/platform/administrators remove" />
+                  </properties>
+               </initializer>
+               <cache enabled="true" class="org.exoplatform.services.jcr.impl.dataflow.persistent.jbosscache.JBossCacheWorkspaceStorageCache">
+                  <properties>
+                     <property name="jbosscache-configuration" value="conf/standalone/test-jbosscache-config.xml" />
+                     <property name="jbosscache-shareable" value="${jbosscache-shareable}" />
+                  </properties>
+               </cache>
+               <query-handler class="org.exoplatform.services.jcr.impl.core.query.lucene.SearchIndex">
+                  <properties>
+                     <property name="index-dir" value="target/temp/index/db2/ws" />
+                  </properties>
+               </query-handler>
+               <lock-manager class="org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManagerImpl">
+                  <properties>
+                     <property name="time-out" value="15m" />
+                     <property name="jbosscache-configuration" value="conf/standalone/test-jbosscache-lock.xml" />
+                     <property name="jbosscache-cl-cache.jdbc.table.name" value="jcrlocks_db2_ws" />
+                     <property name="jbosscache-cl-cache.jdbc.table.create" value="true" />
+                     <property name="jbosscache-cl-cache.jdbc.table.drop" value="false" />
+                     <property name="jbosscache-cl-cache.jdbc.table.primarykey" value="jcrlocks_db2_ws_pk" />
+                     <property name="jbosscache-cl-cache.jdbc.fqn.column" value="fqn" />
+                     <property name="jbosscache-cl-cache.jdbc.node.column" value="node" />
+                     <property name="jbosscache-cl-cache.jdbc.parent.column" value="parent" />
+                     <property name="jbosscache-cl-cache.jdbc.datasource" value="jdbcjcrdb2" />
+                     <property name="jbosscache-shareable" value="${jbosscache-shareable}" />
+                  </properties>
+               </lock-manager>               
+            </workspace>
+
+            <workspace name="ws1">
+               <container class="org.exoplatform.services.jcr.impl.storage.jdbc.optimisation.CQJDBCWorkspaceDataContainer">
+                  <properties>
+                     <property name="source-name" value="jdbcjcrdb2" />
+                     <property name="dialect" value="auto" />
+                     <property name="multi-db" value="false" />
+                     <property name="update-storage" value="false" />
+                     <property name="max-buffer-size" value="200k" />
+                     <property name="swap-directory" value="target/temp/swap/ws1db2" />
+                  </properties>
+                  <value-storages>
+                     <value-storage id="ws1" class="org.exoplatform.services.jcr.impl.storage.value.fs.TreeFileValueStorage">
+                        <properties>
+                           <property name="path" value="target/temp/values/ws1db2" />
+                        </properties>
+                        <filters>
+                           <filter property-type="Binary" min-value-size="100K" />
+                        </filters>
+                     </value-storage>
+                  </value-storages>
+               </container>
+               <initializer class="org.exoplatform.services.jcr.impl.core.ScratchWorkspaceInitializer">
+                  <properties>
+                     <property name="root-nodetype" value="nt:unstructured" />
+                     <property name="root-permissions" value="any read;any add_node;any set_property;any remove" />
+                  </properties>
+               </initializer>
+               <cache enabled="true" class="org.exoplatform.services.jcr.impl.dataflow.persistent.jbosscache.JBossCacheWorkspaceStorageCache">
+                  <properties>
+                     <property name="jbosscache-configuration" value="conf/standalone/test-jbosscache-config.xml" />
+                     <property name="jbosscache-shareable" value="${jbosscache-shareable}" />
+                  </properties>
+               </cache>
+               <query-handler class="org.exoplatform.services.jcr.impl.core.query.lucene.SearchIndex">
+                  <properties>
+                     <property name="index-dir" value="target/temp/index/db2/ws1" />
+                  </properties>
+               </query-handler>
+               <lock-manager class="org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManagerImpl">
+                  <properties>
+                     <property name="time-out" value="15m" />
+                     <property name="jbosscache-configuration" value="conf/standalone/test-jbosscache-lock.xml" />
+                     <property name="jbosscache-cl-cache.jdbc.table.name" value="jcrlocks_db2_ws1" />
+                     <property name="jbosscache-cl-cache.jdbc.table.create" value="true" />
+                     <property name="jbosscache-cl-cache.jdbc.table.drop" value="false" />
+                     <property name="jbosscache-cl-cache.jdbc.table.primarykey" value="jcrlocks_db2_ws1_pk" />
+                     <property name="jbosscache-cl-cache.jdbc.fqn.column" value="fqn" />
+                     <property name="jbosscache-cl-cache.jdbc.node.column" value="node" />
+                     <property name="jbosscache-cl-cache.jdbc.parent.column" value="parent" />
+                     <property name="jbosscache-cl-cache.jdbc.datasource" value="jdbcjcrdb2" />
+                     <property name="jbosscache-shareable" value="${jbosscache-shareable}" />
+                  </properties>
+               </lock-manager> 
+            </workspace>
+         </workspaces>
+      </repository>
+
       <repository name="db1tck" system-workspace="ws" default-workspace="ws">
          <security-domain>exo-domain</security-domain>
          <!-- access-control>optional</access-control -->

Modified: jcr/branches/1.12.x/exo.jcr.component.core/src/test/resources/conf/standalone/test-jcr-config.xml
===================================================================
--- jcr/branches/1.12.x/exo.jcr.component.core/src/test/resources/conf/standalone/test-jcr-config.xml	2010-11-01 10:04:33 UTC (rev 3371)
+++ jcr/branches/1.12.x/exo.jcr.component.core/src/test/resources/conf/standalone/test-jcr-config.xml	2010-11-01 10:50:31 UTC (rev 3372)
@@ -286,6 +286,127 @@
 				</workspace>
          </workspaces>
       </repository>
+
+       <repository name="db2" system-workspace="ws" default-workspace="ws">
+          <security-domain>exo-domain</security-domain>
+          <!-- access-control>optional</access-control -->
+          <!-- access-control>disable</access-control -->
+          <session-max-age>1h</session-max-age>
+          <authentication-policy>org.exoplatform.services.jcr.impl.core.access.JAASAuthenticator</authentication-policy>
+          <workspaces>
+             <workspace name="ws">
+                <!-- for system storage -->
+                <container class="org.exoplatform.services.jcr.impl.storage.jdbc.optimisation.CQJDBCWorkspaceDataContainer">
+                   <properties>
+                      <property name="source-name" value="jdbcjcrdb2" />
+                      <property name="dialect" value="auto" />
+                      <property name="multi-db" value="true" />
+                      <property name="update-storage" value="false" />
+                      <property name="max-buffer-size" value="200k" />
+                      <property name="swap-directory" value="target/temp/swap/wsdb2" />
+                   </properties>
+                   <value-storages>
+                      <value-storage id="ws" class="org.exoplatform.services.jcr.impl.storage.value.fs.TreeFileValueStorage">
+                         <properties>
+                            <property name="path" value="target/temp/values/wsdb2" />
+                         </properties>
+                         <filters>
+                            <filter property-type="Binary" min-value-size="100K" />
+                         </filters>
+                      </value-storage>
+                   </value-storages>
+                </container>
+                <initializer class="org.exoplatform.services.jcr.impl.core.ScratchWorkspaceInitializer">
+                   <properties>
+                      <property name="root-nodetype" value="nt:unstructured" />
+                      <property name="root-permissions" value="*:/platform/administrators read;*:/platform/administrators add_node;*:/platform/administrators set_property;*:/platform/administrators remove" />
+                   </properties>
+                </initializer>
+                <cache enabled="true" class="org.exoplatform.services.jcr.impl.dataflow.persistent.jbosscache.JBossCacheWorkspaceStorageCache">
+                   <properties>
+                      <property name="jbosscache-configuration" value="conf/standalone/test-jbosscache-config.xml" />
+                      <property name="jbosscache-shareable" value="${jbosscache-shareable}" />
+                   </properties>
+                </cache>
+                <query-handler class="org.exoplatform.services.jcr.impl.core.query.lucene.SearchIndex">
+                   <properties>
+                      <property name="index-dir" value="target/temp/index/db2/ws" />
+                   </properties>
+                </query-handler>
+                <lock-manager class="org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManagerImpl">
+                   <properties>
+                      <property name="time-out" value="15m" />
+                      <property name="jbosscache-configuration" value="conf/standalone/test-jbosscache-lock.xml" />
+                      <property name="jbosscache-cl-cache.jdbc.table.name" value="jcrlocks_db2_ws" />
+                      <property name="jbosscache-cl-cache.jdbc.table.create" value="true" />
+                      <property name="jbosscache-cl-cache.jdbc.table.drop" value="false" />
+                      <property name="jbosscache-cl-cache.jdbc.table.primarykey" value="jcrlocks_db2_ws_pk" />
+                      <property name="jbosscache-cl-cache.jdbc.fqn.column" value="fqn" />
+                      <property name="jbosscache-cl-cache.jdbc.node.column" value="node" />
+                      <property name="jbosscache-cl-cache.jdbc.parent.column" value="parent" />
+                      <property name="jbosscache-cl-cache.jdbc.datasource" value="jdbcjcrdb2" />
+                      <property name="jbosscache-shareable" value="${jbosscache-shareable}" />
+                   </properties>
+                </lock-manager>               
+             </workspace>
+ 
+             <workspace name="ws1">
+                <container class="org.exoplatform.services.jcr.impl.storage.jdbc.optimisation.CQJDBCWorkspaceDataContainer">
+                   <properties>
+                      <property name="source-name" value="jdbcjcr1db2" />
+                      <property name="dialect" value="auto" />
+                      <property name="multi-db" value="true" />
+                      <property name="update-storage" value="false" />
+                      <property name="max-buffer-size" value="200k" />
+                      <property name="swap-directory" value="target/temp/swap/ws1db2" />
+                   </properties>
+                   <value-storages>
+                      <value-storage id="ws1" class="org.exoplatform.services.jcr.impl.storage.value.fs.TreeFileValueStorage">
+                         <properties>
+                            <property name="path" value="target/temp/values/ws1db2" />
+                         </properties>
+                         <filters>
+                            <filter property-type="Binary" min-value-size="100K" />
+                         </filters>
+                      </value-storage>
+                   </value-storages>
+                </container>
+                <initializer class="org.exoplatform.services.jcr.impl.core.ScratchWorkspaceInitializer">
+                   <properties>
+                      <property name="root-nodetype" value="nt:unstructured" />
+                      <property name="root-permissions" value="any read;any add_node;any set_property;any remove" />
+                   </properties>
+                </initializer>
+                <cache enabled="true" class="org.exoplatform.services.jcr.impl.dataflow.persistent.jbosscache.JBossCacheWorkspaceStorageCache">
+                   <properties>
+                      <property name="jbosscache-configuration" value="conf/standalone/test-jbosscache-config.xml" />
+                      <property name="jbosscache-shareable" value="${jbosscache-shareable}" />
+                   </properties>
+                </cache>
+                <query-handler class="org.exoplatform.services.jcr.impl.core.query.lucene.SearchIndex">
+                   <properties>
+                      <property name="index-dir" value="target/temp/index/db2/ws1" />
+                   </properties>
+                </query-handler>
+                <lock-manager class="org.exoplatform.services.jcr.impl.core.lock.jbosscache.CacheableLockManagerImpl">
+                   <properties>
+                      <property name="time-out" value="15m" />
+                      <property name="jbosscache-configuration" value="conf/standalone/test-jbosscache-lock.xml" />
+                      <property name="jbosscache-cl-cache.jdbc.table.name" value="jcrlocks_db2_ws1" />
+                      <property name="jbosscache-cl-cache.jdbc.table.create" value="true" />
+                      <property name="jbosscache-cl-cache.jdbc.table.drop" value="false" />
+                      <property name="jbosscache-cl-cache.jdbc.table.primarykey" value="jcrlocks_db2_ws1_pk" />
+                      <property name="jbosscache-cl-cache.jdbc.fqn.column" value="fqn" />
+                      <property name="jbosscache-cl-cache.jdbc.node.column" value="node" />
+                      <property name="jbosscache-cl-cache.jdbc.parent.column" value="parent" />
+                      <property name="jbosscache-cl-cache.jdbc.datasource" value="jdbcjcr1db2" />
+                      <property name="jbosscache-shareable" value="${jbosscache-shareable}" />
+                   </properties>
+                </lock-manager> 
+             </workspace>
+           </workspaces>
+        </repository>
+
 
       <repository name="db1tck" system-workspace="ws" default-workspace="ws">
          <security-domain>exo-domain</security-domain>



More information about the exo-jcr-commits mailing list