Author: tolusha
Date: 2010-10-29 07:45:18 -0400 (Fri, 29 Oct 2010)
New Revision: 3368
Added:
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/access/TestPermissions.java
Modified:
jcr/trunk/exo.jcr.component.core/pom.xml
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/core/security/JCRRuntimePermissions.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NamespaceDataPersister.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/ScratchWorkspaceInitializer.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionDataManager.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/nodetype/registration/JCRNodeTypeDataPersister.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/version/VersionHistoryImpl.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/version/VersionImpl.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/version/VersionHistoryDataHelper.java
jcr/trunk/exo.jcr.component.core/src/test/resources/conf/standalone/cluster/test-configuration.xml
jcr/trunk/exo.jcr.component.core/src/test/resources/conf/standalone/cluster/test-jcr-config.xml
jcr/trunk/exo.jcr.component.core/src/test/resources/conf/standalone/test-configuration.xml
jcr/trunk/exo.jcr.component.core/src/test/resources/conf/standalone/test-jcr-config.xml
jcr/trunk/exo.jcr.component.core/src/test/resources/test.policy
Log:
JCR-1485: Unknown error and strange behavior when mary edits a webcontent
Modified: jcr/trunk/exo.jcr.component.core/pom.xml
===================================================================
--- jcr/trunk/exo.jcr.component.core/pom.xml 2010-10-29 11:35:39 UTC (rev 3367)
+++ jcr/trunk/exo.jcr.component.core/pom.xml 2010-10-29 11:45:18 UTC (rev 3368)
@@ -727,7 +727,6 @@
<exclude>org/exoplatform/services/jcr/**/impl/**/TestDBCleanerService.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/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/core/security/JCRRuntimePermissions.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/core/security/JCRRuntimePermissions.java 2010-10-29
11:35:39 UTC (rev 3367)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/core/security/JCRRuntimePermissions.java 2010-10-29
11:45:18 UTC (rev 3368)
@@ -27,6 +27,8 @@
public static final RuntimePermission CREATE_SYSTEM_SESSION_PERMISSION = new
RuntimePermission("createSystemSession");
+ public static final RuntimePermission INVOKE_INTERNAL_API_PERMISSION = new
RuntimePermission("invokeInternalAPI");
+
public static final RuntimePermission MANAGE_REPOSITORY_PERMISSION = new
RuntimePermission("manageRepository");
}
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NamespaceDataPersister.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NamespaceDataPersister.java 2010-10-29
11:35:39 UTC (rev 3367)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NamespaceDataPersister.java 2010-10-29
11:45:18 UTC (rev 3368)
@@ -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/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java 2010-10-29
11:35:39 UTC (rev 3367)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/NodeImpl.java 2010-10-29
11:45:18 UTC (rev 3368)
@@ -395,6 +395,12 @@
public void cancelMerge(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: cancel merge operation
" + getPath() + " for: "
+ + session.getUserID() + " item owner " + getACL().getOwner());
+ }
checkValid();
@@ -445,6 +451,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))
{
@@ -491,7 +504,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;
@@ -505,6 +518,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(
@@ -670,6 +690,13 @@
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());
VersionImpl base = (VersionImpl)getBaseVersion();
@@ -747,7 +774,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)
{
@@ -1552,7 +1580,7 @@
new InternalQName[]{Constants.NT_BASE}, null, false);
return;
}
-
+
if (parent == null)
{
parent = (NodeData)dataManager.getItemData(getParentIdentifier());
@@ -1685,6 +1713,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 (session.hasPendingChanges())
{
throw new InvalidItemStateException("Session has pending changes ");
@@ -1917,6 +1952,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());
@@ -1967,6 +2009,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: checkin operation "
+ getPath() + " for: "
+ + session.getUserID() + " item owner " + getACL().getOwner());
+ }
+
if (session.hasPendingChanges())
{
throw new InvalidItemStateException("Session has pending changes
");
@@ -2520,7 +2569,7 @@
try
{
return (VersionHistoryImpl)dataManager.getItemByIdentifier(new
String(vhProp.getValues().get(0)
- .getAsByteArray()), pool);
+ .getAsByteArray()), pool, false);
}
catch (IOException e)
{
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/ScratchWorkspaceInitializer.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/ScratchWorkspaceInitializer.java 2010-10-29
11:35:39 UTC (rev 3367)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/ScratchWorkspaceInitializer.java 2010-10-29
11:45:18 UTC (rev 3368)
@@ -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/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionDataManager.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionDataManager.java 2010-10-29
11:35:39 UTC (rev 3367)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/SessionDataManager.java 2010-10-29
11:45:18 UTC (rev 3368)
@@ -22,6 +22,7 @@
import org.exoplatform.services.jcr.access.AccessManager;
import org.exoplatform.services.jcr.access.PermissionType;
import org.exoplatform.services.jcr.core.nodetype.ItemDefinitionData;
+import org.exoplatform.services.jcr.core.security.JCRRuntimePermissions;
import org.exoplatform.services.jcr.dataflow.DataManager;
import org.exoplatform.services.jcr.dataflow.ItemDataConsumer;
import org.exoplatform.services.jcr.dataflow.ItemState;
@@ -334,6 +335,35 @@
public ItemImpl getItem(NodeData parent, QPathEntry name, boolean pool, ItemType
itemType)
throws RepositoryException
{
+ return getItem(parent, name, pool, itemType, true);
+ }
+
+ /**
+ * For internal use, required privileges. 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
+ {
+ // Need privileges
+ SecurityManager security = System.getSecurityManager();
+ if (security != null)
+ {
+ security.checkPermission(JCRRuntimePermissions.INVOKE_INTERNAL_API_PERMISSION);
+ }
+
long start = System.currentTimeMillis();
if (log.isDebugEnabled())
{
@@ -343,7 +373,7 @@
ItemImpl item = null;
try
{
- return item = readItem(getItemData(parent, name, itemType), pool);
+ return item = readItem(getItemData(parent, name, itemType), parent, pool,
apiRead);
}
finally
{
@@ -542,7 +572,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
@@ -592,6 +622,30 @@
*/
public ItemImpl getItemByIdentifier(String identifier, boolean pool) throws
RepositoryException
{
+ return getItemByIdentifier(identifier, pool, true);
+ }
+
+ /**
+ * For internal use, required privileges. 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
+ {
+ // Need privileges
+ SecurityManager security = System.getSecurityManager();
+ if (security != null)
+ {
+ security.checkPermission(JCRRuntimePermissions.INVOKE_INTERNAL_API_PERMISSION);
+ }
+
long start = System.currentTimeMillis();
if (log.isDebugEnabled())
{
@@ -601,7 +655,7 @@
ItemImpl item = null;
try
{
- return item = readItem(getItemData(identifier), pool);
+ return item = readItem(getItemData(identifier), null, pool, apiRead);
}
finally
{
@@ -765,7 +819,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);
@@ -1139,12 +1193,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>();
@@ -1169,7 +1228,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()
@@ -1202,7 +1262,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)
@@ -1322,7 +1382,7 @@
vhnode.accept(cvremover);
// remove VH
- delete(vhnode, ancestorToSave);
+ delete(vhnode, ancestorToSave, true);
}
/**
@@ -1636,6 +1696,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/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/nodetype/registration/JCRNodeTypeDataPersister.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/nodetype/registration/JCRNodeTypeDataPersister.java 2010-10-29
11:35:39 UTC (rev 3367)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/nodetype/registration/JCRNodeTypeDataPersister.java 2010-10-29
11:45:18 UTC (rev 3368)
@@ -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/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/version/VersionHistoryImpl.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/version/VersionHistoryImpl.java 2010-10-29
11:35:39 UTC (rev 3367)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/version/VersionHistoryImpl.java 2010-10-29
11:45:18 UTC (rev 3368)
@@ -191,7 +191,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 "
@@ -214,7 +214,7 @@
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)
{
@@ -377,7 +377,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
@@ -415,7 +415,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
@@ -611,7 +611,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/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/version/VersionImpl.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/version/VersionImpl.java 2010-10-29
11:35:39 UTC (rev 3367)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/core/version/VersionImpl.java 2010-10-29
11:45:18 UTC (rev 3368)
@@ -161,7 +161,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;
@@ -446,7 +446,7 @@
checkValid();
VersionHistoryImpl vhistory =
-
(VersionHistoryImpl)dataManager.getItemByIdentifier(nodeData().getParentIdentifier(),
true);
+
(VersionHistoryImpl)dataManager.getItemByIdentifier(nodeData().getParentIdentifier(),
true, false);
if (vhistory == null)
{
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/version/VersionHistoryDataHelper.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/version/VersionHistoryDataHelper.java 2010-10-29
11:35:39 UTC (rev 3367)
+++
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/version/VersionHistoryDataHelper.java 2010-10-29
11:45:18 UTC (rev 3368)
@@ -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/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/access/TestPermissions.java
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/access/TestPermissions.java
(rev 0)
+++
jcr/trunk/exo.jcr.component.core/src/test/java/org/exoplatform/services/jcr/impl/access/TestPermissions.java 2010-10-29
11:45:18 UTC (rev 3368)
@@ -0,0 +1,260 @@
+/*
+ * 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;
+
+/**
+ * Test is run on special repository db2.<br>
+ * System workspace 'ws' has permissions configuration: <br>
+ * <br>
+ * *:/platform/administrators read;*:/platform/administrators add_node;
+ * *:/platform/administrators set_property;*:/platform/administrators remove
+ * <br><br>
+ * Workspace 'ws1' has permissions configuration:<br>
+ * <br>
+ * any read;any add_node;any set_property;any remove
+ *
+ * @author <a href="anatoliy.bazko(a)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/trunk/exo.jcr.component.core/src/test/resources/conf/standalone/cluster/test-configuration.xml
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/test/resources/conf/standalone/cluster/test-configuration.xml 2010-10-29
11:35:39 UTC (rev 3367)
+++
jcr/trunk/exo.jcr.component.core/src/test/resources/conf/standalone/cluster/test-configuration.xml 2010-10-29
11:45:18 UTC (rev 3368)
@@ -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/trunk/exo.jcr.component.core/src/test/resources/conf/standalone/cluster/test-jcr-config.xml
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/test/resources/conf/standalone/cluster/test-jcr-config.xml 2010-10-29
11:35:39 UTC (rev 3367)
+++
jcr/trunk/exo.jcr.component.core/src/test/resources/conf/standalone/cluster/test-jcr-config.xml 2010-10-29
11:45:18 UTC (rev 3368)
@@ -328,6 +328,153 @@
</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="false" />
+ <property name="jbosscache-cluster-name"
value="JCR-cluster-data" />
+ <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" />
+ <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="false" />
+ <property name="jbosscache-cluster-name"
value="JCR-cluster-indexer" />
+ <property name="jbosscache-shareable"
value="${jbosscache-shareable}" />
+ </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="false" />
+ <property name="jbosscache-cluster-name"
value="JCR-cluster-locks" />
+ <property name="jbosscache-cl-cache.jdbc.table.name"
value="jcrlocks" />
+ <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_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" />
+ <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="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="false" />
+ <property name="jbosscache-cluster-name"
value="JCR-cluster-data" />
+ <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" />
+ <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="false" />
+ <property name="jbosscache-cluster-name"
value="JCR-cluster-indexer" />
+ <property name="jbosscache-shareable"
value="${jbosscache-shareable}" />
+ </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="false" />
+ <property name="jbosscache-cluster-name"
value="JCR-cluster-locks" />
+ <property name="jbosscache-cl-cache.jdbc.table.name"
value="jcrlocks" />
+ <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_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" />
+ <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/trunk/exo.jcr.component.core/src/test/resources/conf/standalone/test-configuration.xml
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/test/resources/conf/standalone/test-configuration.xml 2010-10-29
11:35:39 UTC (rev 3367)
+++
jcr/trunk/exo.jcr.component.core/src/test/resources/conf/standalone/test-configuration.xml 2010-10-29
11:45:18 UTC (rev 3368)
@@ -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/trunk/exo.jcr.component.core/src/test/resources/conf/standalone/test-jcr-config.xml
===================================================================
---
jcr/trunk/exo.jcr.component.core/src/test/resources/conf/standalone/test-jcr-config.xml 2010-10-29
11:35:39 UTC (rev 3367)
+++
jcr/trunk/exo.jcr.component.core/src/test/resources/conf/standalone/test-jcr-config.xml 2010-10-29
11:45:18 UTC (rev 3368)
@@ -207,94 +207,204 @@
</workspace>
<workspace name="ws3">
- <!-- for system storage -->
- <container
- class="org.exoplatform.services.jcr.impl.storage.jdbc.optimisation.CQJDBCWorkspaceDataContainer">
- <properties>
- <property name="source-name" value="jdbcjcr3" />
- <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/ws3" />
- </properties>
- <value-storages>
- <!--
- This storage is used to check whether properties are removed
- correctly from each value-storage
- (TestRemoveFromValueStorage.java)
- -->
- <value-storage id="ws3_big"
- class="org.exoplatform.services.jcr.impl.storage.value.fs.TreeFileValueStorage">
- <properties>
- <property name="path" value="target/temp/values/ws3_big"
/>
- </properties>
- <filters>
- <filter property-type="Binary" min-value-size="1024K"
/>
- </filters>
- </value-storage>
- <value-storage id="ws3"
- class="org.exoplatform.services.jcr.impl.storage.value.fs.CASableTreeFileValueStorage">
- <properties>
- <property name="path" value="target/temp/values/ws3"
/>
- <property name="digest-algo" value="MD5" />
- <property name="vcas-type"
- value="org.exoplatform.services.jcr.impl.storage.value.cas.JDBCValueContentAddressStorageImpl"
/>
- <property name="jdbc-source-name" value="jdbcjcr" />
- </properties>
- <filters>
- <filter property-type="Binary" />
- </filters>
- </value-storage>
- </value-storages>
- </container>
- <initializer
- class="org.exoplatform.services.jcr.impl.core.ScratchWorkspaceInitializer">
- <properties>
- <property name="root-nodetype" value="nt:unstructured"
/>
- </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/db1/ws3" />
- <property name="synonymprovider-class"
- value="org.exoplatform.services.jcr.impl.core.query.lucene.PropertiesSynonymProvider"
/>
- <property name="synonymprovider-config-path"
value="../../synonyms.properties" />
- <property name="support-highlighting" value="true" />
- <property name="indexing-configuration-path"
value="../../indexing-configuration.xml" />
- <property name="query-class"
- value="org.exoplatform.services.jcr.impl.core.query.QueryImpl" />
- <property name="spellchecker-class"
- value="org.exoplatform.services.jcr.impl.core.query.lucene.spell.LuceneSpellChecker$FiveSecondsRefreshInterval"
/>
- </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_db1_ws3" />
- <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_db1_ws3_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="jdbcjcr3" />
- <property name="jbosscache-shareable"
value="${jbosscache-shareable}" />
- </properties>
- </lock-manager>
+ <!-- for system storage -->
+ <container
class="org.exoplatform.services.jcr.impl.storage.jdbc.optimisation.CQJDBCWorkspaceDataContainer">
+ <properties>
+ <property name="source-name" value="jdbcjcr3"
/>
+ <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/ws3" />
+ </properties>
+ <value-storages>
+ <!--
+ This storage is used to check whether properties are removed
+ correctly from each value-storage
+ (TestRemoveFromValueStorage.java)
+ -->
+ <value-storage id="ws3_big"
class="org.exoplatform.services.jcr.impl.storage.value.fs.TreeFileValueStorage">
+ <properties>
+ <property name="path"
value="target/temp/values/ws3_big" />
+ </properties>
+ <filters>
+ <filter property-type="Binary"
min-value-size="1024K" />
+ </filters>
+ </value-storage>
+ <value-storage id="ws3"
class="org.exoplatform.services.jcr.impl.storage.value.fs.CASableTreeFileValueStorage">
+ <properties>
+ <property name="path"
value="target/temp/values/ws3" />
+ <property name="digest-algo"
value="MD5" />
+ <property name="vcas-type"
value="org.exoplatform.services.jcr.impl.storage.value.cas.JDBCValueContentAddressStorageImpl"
/>
+ <property name="jdbc-source-name"
value="jdbcjcr" />
+ </properties>
+ <filters>
+ <filter property-type="Binary" />
+ </filters>
+ </value-storage>
+ </value-storages>
+ </container>
+ <initializer
class="org.exoplatform.services.jcr.impl.core.ScratchWorkspaceInitializer">
+ <properties>
+ <property name="root-nodetype"
value="nt:unstructured" />
+ </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/db1/ws3" />
+ <property name="synonymprovider-class"
value="org.exoplatform.services.jcr.impl.core.query.lucene.PropertiesSynonymProvider"
/>
+ <property name="synonymprovider-config-path"
value="../../synonyms.properties" />
+ <property name="support-highlighting"
value="true" />
+ <property name="indexing-configuration-path"
value="../../indexing-configuration.xml" />
+ <property name="query-class"
value="org.exoplatform.services.jcr.impl.core.query.QueryImpl" />
+ <property name="spellchecker-class"
value="org.exoplatform.services.jcr.impl.core.query.lucene.spell.LuceneSpellChecker$FiveSecondsRefreshInterval"
/>
+ </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_db1_ws3" />
+ <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_db1_ws3_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="jdbcjcr3" />
+ <property name="jbosscache-shareable"
value="${jbosscache-shareable}" />
+ </properties>
+ </lock-manager>
+ </workspace>
+ </workspaces>
+ </repository>
- </workspace>
+ <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>
<!-- access-control>optional</access-control -->
Modified: jcr/trunk/exo.jcr.component.core/src/test/resources/test.policy
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/test/resources/test.policy 2010-10-29 11:35:39
UTC (rev 3367)
+++ jcr/trunk/exo.jcr.component.core/src/test/resources/test.policy 2010-10-29 11:45:18
UTC (rev 3368)
@@ -9,4 +9,6 @@
grant codeBase "@TEST_CLASSES@-"{
permission java.lang.RuntimePermission "createSystemSession";
permission java.lang.RuntimePermission "manageRepository";
+ permission java.lang.RuntimePermission "invokeInternalAPI";
};
+