[exo-jcr-commits] exo-jcr SVN: r4481 - in jcr/trunk/exo.jcr.component.core/src: main/java/org/exoplatform/services/jcr/impl/storage/value/fs and 2 other directories.
do-not-reply at jboss.org
do-not-reply at jboss.org
Tue Jun 7 02:15:09 EDT 2011
Author: tolusha
Date: 2011-06-07 02:15:08 -0400 (Tue, 07 Jun 2011)
New Revision: 4481
Modified:
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/CacheableWorkspaceDataManager.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/FileDigestOutputStream.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/FileValueStorage.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/SimpleFileIOChannel.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/TreeFile.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/TreeFileIOChannel.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/CASableWriteValue.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/DeleteValues.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/ValueFileIOHelper.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/ValueFileOperation.java
jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/WriteValue.java
jcr/trunk/exo.jcr.component.core/src/test/resources/tsm-excludes.properties
Log:
EXOJCR-1365: reduce privileged blocks
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/CacheableWorkspaceDataManager.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/CacheableWorkspaceDataManager.java 2011-06-06 11:52:05 UTC (rev 4480)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/dataflow/persistent/CacheableWorkspaceDataManager.java 2011-06-07 06:15:08 UTC (rev 4481)
@@ -480,7 +480,7 @@
* {@inheritDoc}
*/
@Override
- public int getChildNodesCount(NodeData parent) throws RepositoryException
+ public int getChildNodesCount(final NodeData parent) throws RepositoryException
{
if (cache.isEnabled())
{
@@ -490,8 +490,13 @@
return childCount;
}
}
-
- return super.getChildNodesCount(parent);
+ return executeAction(new PrivilegedExceptionAction<Integer>()
+ {
+ public Integer run() throws RepositoryException
+ {
+ return CacheableWorkspaceDataManager.super.getChildNodesCount(parent);
+ }
+ });
}
/**
@@ -606,7 +611,13 @@
}
else
{
- return super.getItemData(parentData, name, itemType);
+ return executeAction(new PrivilegedExceptionAction<ItemData>()
+ {
+ public ItemData run() throws RepositoryException
+ {
+ return CacheableWorkspaceDataManager.super.getItemData(parentData, name, itemType);
+ }
+ });
}
}
@@ -663,7 +674,13 @@
}
else
{
- return super.getItemData(identifier);
+ return executeAction(new PrivilegedExceptionAction<ItemData>()
+ {
+ public ItemData run() throws RepositoryException
+ {
+ return CacheableWorkspaceDataManager.super.getItemData(identifier);
+ }
+ });
}
}
@@ -999,12 +1016,18 @@
}
}
- protected List<NodeData> getChildNodesDataByPattern(NodeData parentData, List<QPathEntryFilter> patternFilters)
+ protected List<NodeData> getChildNodesDataByPattern(final NodeData parentData, final List<QPathEntryFilter> patternFilters)
throws RepositoryException
{
if (!cache.isEnabled())
{
- return super.getChildNodesData(parentData, patternFilters);
+ return executeAction(new PrivilegedExceptionAction<List<NodeData>>()
+ {
+ public List<NodeData> run() throws RepositoryException
+ {
+ return CacheableWorkspaceDataManager.super.getChildNodesData(parentData, patternFilters);
+ }
+ });
}
if (!cache.isPatternSupported())
@@ -1020,9 +1043,9 @@
return childNodesList;
}
- Map<String, NodeData> childNodesMap = new HashMap<String, NodeData>();
+ final Map<String, NodeData> childNodesMap = new HashMap<String, NodeData>();
- Set<QPathEntryFilter> uncachedPatterns = new HashSet<QPathEntryFilter>();
+ final Set<QPathEntryFilter> uncachedPatterns = new HashSet<QPathEntryFilter>();
for (int i = 0; i < patternFilters.size(); i++)
{
if (patternFilters.get(i).isExactName())
@@ -1116,42 +1139,50 @@
// execute all patterns and put result in cache
if (!uncachedPatterns.isEmpty())
{
- List<NodeData> persistedItemList =
- super.getChildNodesData(parentData, new ArrayList<QPathEntryFilter>(uncachedPatterns));
-
- if (persistedItemList.size() > 0)
+ executeAction(new PrivilegedExceptionAction<Void>()
{
- NodeData parent = (NodeData)getItemData(parentData.getIdentifier());
- if (parent != null)
+ public Void run() throws RepositoryException
{
- // filter nodes list for each exact name
- patternIterator = uncachedPatterns.iterator();
- while (patternIterator.hasNext())
+ List<NodeData> persistedItemList =
+ CacheableWorkspaceDataManager.super.getChildNodesData(parentData,
+ new ArrayList<QPathEntryFilter>(uncachedPatterns));
+
+ if (persistedItemList.size() > 0)
{
- QPathEntryFilter pattern = patternIterator.next();
- List<NodeData> persistedNodeData = (List<NodeData>)pattern.accept(persistedItemList);
- if (pattern.isExactName())
+ NodeData parent = (NodeData)getItemData(parentData.getIdentifier());
+ if (parent != null)
{
- if (persistedNodeData.isEmpty())
+ // filter nodes list for each exact name
+ Iterator<QPathEntryFilter> patternIterator = uncachedPatterns.iterator();
+ while (patternIterator.hasNext())
{
- cache.put(new NullNodeData(parentData, pattern.getQPathEntry()));
+ QPathEntryFilter pattern = patternIterator.next();
+ List<NodeData> persistedNodeData = (List<NodeData>)pattern.accept(persistedItemList);
+ if (pattern.isExactName())
+ {
+ if (persistedNodeData.isEmpty())
+ {
+ cache.put(new NullNodeData(parentData, pattern.getQPathEntry()));
+ }
+ else
+ {
+ cache.put(persistedNodeData.get(0));
+ }
+ }
+ else
+ {
+ cache.addChildNodes(parent, pattern, persistedNodeData);
+ }
+ for (NodeData node : persistedItemList)
+ {
+ childNodesMap.put(node.getIdentifier(), node);
+ }
}
- else
- {
- cache.put(persistedNodeData.get(0));
- }
}
- else
- {
- cache.addChildNodes(parent, pattern, persistedNodeData);
- }
- for (NodeData node : persistedItemList)
- {
- childNodesMap.put(node.getIdentifier(), node);
- }
}
+ return null;
}
- }
+ });
}
}
finally
@@ -1286,12 +1317,18 @@
}
}
- protected List<PropertyData> getChildPropertiesDataByPattern(NodeData nodeData, List<QPathEntryFilter> patternFilters)
+ protected List<PropertyData> getChildPropertiesDataByPattern(final NodeData nodeData, final List<QPathEntryFilter> patternFilters)
throws RepositoryException
{
if (!cache.isEnabled())
{
- return super.getChildPropertiesData(nodeData, patternFilters);
+ return executeAction(new PrivilegedExceptionAction<List<PropertyData>>()
+ {
+ public List<PropertyData> run() throws RepositoryException
+ {
+ return CacheableWorkspaceDataManager.super.getChildPropertiesData(nodeData, patternFilters);
+ }
+ });
}
if (!cache.isPatternSupported())
@@ -1306,9 +1343,9 @@
return childPropsList;
}
- Map<String, PropertyData> childPropsMap = new HashMap<String, PropertyData>();
+ final Map<String, PropertyData> childPropsMap = new HashMap<String, PropertyData>();
- Set<QPathEntryFilter> uncachedPatterns = new HashSet<QPathEntryFilter>();
+ final Set<QPathEntryFilter> uncachedPatterns = new HashSet<QPathEntryFilter>();
for (int i = 0; i < patternFilters.size(); i++)
{
if (patternFilters.get(i).isExactName())
@@ -1405,43 +1442,52 @@
// execute all patterns and put result in cache
if (!uncachedPatterns.isEmpty())
{
- List<PropertyData> persistedItemList =
- super.getChildPropertiesData(nodeData, new ArrayList<QPathEntryFilter>(uncachedPatterns));
-
- if (persistedItemList.size() > 0)
+ executeAction(new PrivilegedExceptionAction<Void>()
{
- NodeData parent = (NodeData)getItemData(nodeData.getIdentifier());
- if (parent != null)
+ public Void run() throws RepositoryException
{
- // filter properties list for each exact name
- patternIterator = uncachedPatterns.iterator();
- while (patternIterator.hasNext())
+ List<PropertyData> persistedItemList =
+ CacheableWorkspaceDataManager.super.getChildPropertiesData(nodeData,
+ new ArrayList<QPathEntryFilter>(uncachedPatterns));
+
+ if (persistedItemList.size() > 0)
{
- QPathEntryFilter pattern = patternIterator.next();
- List<PropertyData> persistedPropData = (List<PropertyData>)pattern.accept(persistedItemList);
- if (pattern.isExactName())
+ NodeData parent = (NodeData)getItemData(nodeData.getIdentifier());
+ if (parent != null)
{
- if (persistedPropData.isEmpty())
+ // filter properties list for each exact name
+ Iterator<QPathEntryFilter> patternIterator = uncachedPatterns.iterator();
+ while (patternIterator.hasNext())
{
- cache.put(new NullPropertyData(parent, pattern.getQPathEntry()));
+ QPathEntryFilter pattern = patternIterator.next();
+ List<PropertyData> persistedPropData =
+ (List<PropertyData>)pattern.accept(persistedItemList);
+ if (pattern.isExactName())
+ {
+ if (persistedPropData.isEmpty())
+ {
+ cache.put(new NullPropertyData(parent, pattern.getQPathEntry()));
+ }
+ else
+ {
+ cache.put(persistedPropData.get(0));
+ }
+ }
+ else
+ {
+ cache.addChildProperties(parent, pattern, persistedPropData);
+ }
+
+ for (PropertyData node : persistedItemList)
+ {
+ childPropsMap.put(node.getIdentifier(), node);
+ }
}
- else
- {
- cache.put(persistedPropData.get(0));
- }
}
- else
- {
- cache.addChildProperties(parent, pattern, persistedPropData);
- }
-
- for (PropertyData node : persistedItemList)
- {
- childPropsMap.put(node.getIdentifier(), node);
- }
}
+ return null;
}
- }
+ });
}
}
finally
@@ -1531,7 +1577,7 @@
* @throws RepositoryException
* Repository error
*/
- protected List<PropertyData> listChildPropertiesData(NodeData nodeData, boolean forcePersistentRead)
+ protected List<PropertyData> listChildPropertiesData(final NodeData nodeData, boolean forcePersistentRead)
throws RepositoryException
{
@@ -1559,18 +1605,25 @@
return propertiesList;
}
}
- propertiesList = super.listChildPropertiesData(nodeData);
- // TODO propertiesList.size() > 0 for SDB
- if (propertiesList.size() > 0 && cache.isEnabled())
+ return executeAction(new PrivilegedExceptionAction<List<PropertyData>>()
{
- NodeData parentData = (NodeData)getItemData(nodeData.getIdentifier());
+ public List<PropertyData> run() throws RepositoryException
+ {
+ List<PropertyData> propertiesList =
+ CacheableWorkspaceDataManager.super.listChildPropertiesData(nodeData);
+ // TODO propertiesList.size() > 0 for SDB
+ if (propertiesList.size() > 0 && cache.isEnabled())
+ {
+ NodeData parentData = (NodeData)getItemData(nodeData.getIdentifier());
- if (parentData != null)
- {
- cache.addChildPropertiesList(parentData, propertiesList);
+ if (parentData != null)
+ {
+ cache.addChildPropertiesList(parentData, propertiesList);
+ }
+ }
+ return propertiesList;
}
- }
- return propertiesList;
+ });
}
finally
{
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/FileDigestOutputStream.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/FileDigestOutputStream.java 2011-06-06 11:52:05 UTC (rev 4480)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/FileDigestOutputStream.java 2011-06-07 06:15:08 UTC (rev 4481)
@@ -18,9 +18,8 @@
*/
package org.exoplatform.services.jcr.impl.storage.value.fs;
-import org.exoplatform.commons.utils.PrivilegedFileHelper;
-
import java.io.File;
+import java.io.FileOutputStream;
import java.io.IOException;
import java.security.DigestOutputStream;
import java.security.MessageDigest;
@@ -44,7 +43,7 @@
FileDigestOutputStream(File file, MessageDigest digest) throws IOException
{
- super(PrivilegedFileHelper.fileOutputStream(file), digest);
+ super(new FileOutputStream(file), digest);
this.file = file;
}
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/FileValueStorage.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/FileValueStorage.java 2011-06-06 11:52:05 UTC (rev 4480)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/FileValueStorage.java 2011-06-07 06:15:08 UTC (rev 4481)
@@ -18,7 +18,6 @@
*/
package org.exoplatform.services.jcr.impl.storage.value.fs;
-import org.exoplatform.commons.utils.PrivilegedFileHelper;
import org.exoplatform.services.jcr.config.RepositoryConfigurationException;
import org.exoplatform.services.jcr.impl.storage.value.ValueDataResourceHolder;
import org.exoplatform.services.jcr.impl.util.io.FileCleaner;
@@ -46,7 +45,7 @@
public final static String PATH = "path";
/**
- * Temporary directory name under storage root dir.
+ * Temporarory directopry name under stoprage root dir.
*/
public static final String TEMP_DIR_NAME = "temp";
@@ -58,6 +57,7 @@
/**
* FileValueStorage constructor.
+ *
*/
public FileValueStorage(FileCleaner cleaner)
{
@@ -67,7 +67,6 @@
/**
* {@inheritDoc}
*/
- @Override
public void init(Properties props, ValueDataResourceHolder resources) throws IOException,
RepositoryConfigurationException
{
@@ -78,7 +77,6 @@
/**
* {@inheritDoc}
*/
- @Override
public void checkConsistency(WorkspaceStorageConnection dataConnection)
{
@@ -107,23 +105,22 @@
{
this.rootDir = new File(rootDirPath);
- if (!PrivilegedFileHelper.exists(rootDir))
+ if (!rootDir.exists())
{
- if (PrivilegedFileHelper.mkdirs(rootDir))
+ if (rootDir.mkdirs())
{
- log.info("Directory created: " + PrivilegedFileHelper.getAbsolutePath(rootDir));
+ log.info("Directory created: " + rootDir.getAbsolutePath());
// create internal temp dir
File tempDir = new File(rootDir, TEMP_DIR_NAME);
- PrivilegedFileHelper.mkdirs(tempDir);
+ tempDir.mkdirs();
- if (PrivilegedFileHelper.exists(tempDir) && PrivilegedFileHelper.isDirectory(tempDir))
+ if (tempDir.exists() && tempDir.isDirectory())
{
// care about storage temp dir cleanup
- for (File tmpf : PrivilegedFileHelper.listFiles(tempDir))
- if (!PrivilegedFileHelper.delete(tmpf))
- log.warn("Storage temporary directory contains un-deletable file "
- + PrivilegedFileHelper.getAbsolutePath(tmpf)
+ for (File tmpf : tempDir.listFiles())
+ if (!tmpf.delete())
+ log.warn("Storage temporary directory contains un-deletable file " + tmpf.getAbsolutePath()
+ ". It's recommended to leave this directory for JCR External Values Storage private use.");
}
else
@@ -132,12 +129,12 @@
}
else
{
- log.warn("Directory IS NOT created: " + PrivilegedFileHelper.getAbsolutePath(rootDir));
+ log.warn("Directory IS NOT created: " + rootDir.getAbsolutePath());
}
}
else
{
- if (!PrivilegedFileHelper.isDirectory(rootDir))
+ if (!rootDir.isDirectory())
{
throw new RepositoryConfigurationException("File exists but is not a directory " + rootDirPath);
}
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/SimpleFileIOChannel.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/SimpleFileIOChannel.java 2011-06-06 11:52:05 UTC (rev 4480)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/SimpleFileIOChannel.java 2011-06-07 06:15:08 UTC (rev 4481)
@@ -18,7 +18,6 @@
*/
package org.exoplatform.services.jcr.impl.storage.value.fs;
-import org.exoplatform.commons.utils.PrivilegedFileHelper;
import org.exoplatform.services.jcr.impl.storage.value.ValueDataResourceHolder;
import org.exoplatform.services.jcr.impl.util.io.FileCleaner;
@@ -72,6 +71,6 @@
@Override
protected File[] getFiles(String propertyId) throws IOException
{
- return PrivilegedFileHelper.listFiles(rootDir, new PropertyIDFilter(propertyId));
+ return rootDir.listFiles(new PropertyIDFilter(propertyId));
}
}
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/TreeFile.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/TreeFile.java 2011-06-06 11:52:05 UTC (rev 4480)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/TreeFile.java 2011-06-07 06:15:08 UTC (rev 4481)
@@ -18,14 +18,11 @@
*/
package org.exoplatform.services.jcr.impl.storage.value.fs;
-import org.exoplatform.commons.utils.PrivilegedFileHelper;
-import org.exoplatform.commons.utils.SecurityHelper;
import org.exoplatform.services.jcr.impl.util.io.FileCleaner;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
import java.io.File;
-import java.security.PrivilegedAction;
/**
* Created by The eXo Platform SAS
@@ -57,16 +54,7 @@
@Override
public boolean delete()
{
-
- PrivilegedAction<Boolean> action = new PrivilegedAction<Boolean>()
- {
- public Boolean run()
- {
- return TreeFile.super.delete();
- }
- };
- boolean res = SecurityHelper.doPrivilegedAction(action);
-
+ boolean res = super.delete();
if (res)
deleteParent(new File(getParent()));
@@ -76,28 +64,27 @@
protected boolean deleteParent(File fp)
{
boolean res = false;
- String fpPath = PrivilegedFileHelper.getAbsolutePath(fp);
- String rootPath = PrivilegedFileHelper.getAbsolutePath(rootDir);
+ String fpPath = fp.getAbsolutePath();
+ String rootPath = rootDir.getAbsolutePath();
if (fpPath.startsWith(rootPath) && fpPath.length() > rootPath.length())
if (fp.isDirectory())
{
- String[] ls = PrivilegedFileHelper.list(fp);;
+ String[] ls = fp.list();
if (ls != null && ls.length <= 0)
{
- if (res = PrivilegedFileHelper.delete(fp))
+ if (res = fp.delete())
{
res = deleteParent(new File(fp.getParent()));
}
else
{
- fLog.warn("Parent directory can not be deleted now. " + PrivilegedFileHelper.getAbsolutePath(fp));
- cleaner.addFile(new TreeFile(PrivilegedFileHelper.getAbsolutePath(fp), cleaner, rootDir));
+ fLog.warn("Parent directory can not be deleted now. " + fp.getAbsolutePath());
+ cleaner.addFile(new TreeFile(fp.getAbsolutePath(), cleaner, rootDir));
}
}
}
else
- fLog.warn("Parent can not be a file but found " + PrivilegedFileHelper.getAbsolutePath(fp));
+ fLog.warn("Parent can not be a file but found " + fp.getAbsolutePath());
return res;
}
-
}
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/TreeFileIOChannel.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/TreeFileIOChannel.java 2011-06-06 11:52:05 UTC (rev 4480)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/TreeFileIOChannel.java 2011-06-07 06:15:08 UTC (rev 4481)
@@ -18,7 +18,6 @@
*/
package org.exoplatform.services.jcr.impl.storage.value.fs;
-import org.exoplatform.commons.utils.PrivilegedFileHelper;
import org.exoplatform.services.jcr.impl.storage.value.ValueDataResourceHolder;
import org.exoplatform.services.jcr.impl.util.io.FileCleaner;
@@ -53,26 +52,21 @@
@Override
protected File getFile(final String propertyId, final int orderNumber) throws IOException
{
-
final TreeFile tfile =
- new TreeFile(PrivilegedFileHelper.getAbsolutePath(rootDir) + makeFilePath(propertyId, orderNumber), cleaner,
- rootDir);
-
- PrivilegedFileHelper.mkdirs(tfile.getParentFile());
-
+ new TreeFile(rootDir.getAbsolutePath() + makeFilePath(propertyId, orderNumber), cleaner, rootDir);
+ mkdirs(tfile.getParentFile()); // make dirs on path
return tfile;
}
@Override
protected File[] getFiles(final String propertyId) throws IOException
{
- final File dir = new File(PrivilegedFileHelper.getAbsolutePath(rootDir) + buildPath(propertyId));
- String[] fileNames = PrivilegedFileHelper.list(dir);
+ final File dir = new File(rootDir.getAbsolutePath() + buildPath(propertyId));
+ String[] fileNames = dir.list();
File[] files = new File[fileNames.length];
for (int i = 0; i < fileNames.length; i++)
{
- files[i] =
- new TreeFile(PrivilegedFileHelper.getAbsolutePath(dir) + File.separator + fileNames[i], cleaner, rootDir);
+ files[i] = new TreeFile(dir.getAbsolutePath() + File.separator + fileNames[i], cleaner, rootDir);
}
return files;
}
@@ -164,14 +158,13 @@
try
{
mkdirsLock.acquire();
- return PrivilegedFileHelper.mkdirs(dir);
+ return dir.mkdirs();
}
catch (InterruptedException e)
{
// chLog.error("mkdirs error on " + dir.getAbsolutePath() + ". " + e, e);
// return false;
- throw new IllegalStateException("mkdirs error on " + PrivilegedFileHelper.getAbsolutePath(dir) + " due to "
- + e, e);
+ throw new IllegalStateException("mkdirs error on " + dir.getAbsolutePath() + " due to " + e, e);
}
finally
{
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/CASableWriteValue.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/CASableWriteValue.java 2011-06-06 11:52:05 UTC (rev 4480)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/CASableWriteValue.java 2011-06-07 06:15:08 UTC (rev 4481)
@@ -18,7 +18,6 @@
*/
package org.exoplatform.services.jcr.impl.storage.value.fs.operations;
-import org.exoplatform.commons.utils.PrivilegedFileHelper;
import org.exoplatform.services.jcr.datamodel.ValueData;
import org.exoplatform.services.jcr.impl.dataflow.persistent.StreamPersistedValueData;
import org.exoplatform.services.jcr.impl.storage.value.ValueDataResourceHolder;
@@ -161,27 +160,26 @@
}
catch (RecordAlreadyExistsException e)
{
- if (tempFile != null && PrivilegedFileHelper.exists(tempFile) && !PrivilegedFileHelper.delete(tempFile))
+ if (tempFile != null && tempFile.exists() && !tempFile.delete())
{
- LOG.warn("Can't delete CAS temp file. Added to file cleaner. "
- + PrivilegedFileHelper.getAbsolutePath(tempFile));
+ LOG.warn("Can't delete CAS temp file. Added to file cleaner. " + tempFile.getAbsolutePath());
cleaner.addFile(tempFile);
}
throw new RecordAlreadyExistsException("Write error: " + e, e);
}
- if (!PrivilegedFileHelper.exists(vcasFile))
+ if (!vcasFile.exists())
{
// it's new CAS Value, we have to move temp to vcas location
// use RENAME only, don't copy - as copy will means that destination already exists etc.
// make sure parent dir exists
- PrivilegedFileHelper.mkdirs(vcasFile.getParentFile());
+ vcasFile.getParentFile().mkdirs();
// rename propetynamed file to hashnamed one
- if (!PrivilegedFileHelper.renameTo(tempFile, vcasFile))
+ if (!tempFile.renameTo(vcasFile))
{
- throw new VCASException("File " + PrivilegedFileHelper.getAbsolutePath(tempFile)
- + " can't be renamed to VCAS-named " + PrivilegedFileHelper.getAbsolutePath(vcasFile));
+ throw new VCASException("File " + tempFile.getAbsolutePath() + " can't be renamed to VCAS-named "
+ + vcasFile.getAbsolutePath());
}
} // else - CASed Value already exists
@@ -195,7 +193,7 @@
finally
{
// remove temp file
- PrivilegedFileHelper.delete(tempFile); // should be ok without file cleaner
+ tempFile.delete(); // should be ok without file cleaner
fileLock.unlock();
}
@@ -211,7 +209,7 @@
try
{
// delete temp file - it's new file add
- PrivilegedFileHelper.delete(tempFile); // should be ok without file cleaner
+ tempFile.delete(); // should be ok without file cleaner
}
finally
{
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/DeleteValues.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/DeleteValues.java 2011-06-06 11:52:05 UTC (rev 4480)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/DeleteValues.java 2011-06-07 06:15:08 UTC (rev 4481)
@@ -18,7 +18,6 @@
*/
package org.exoplatform.services.jcr.impl.storage.value.fs.operations;
-import org.exoplatform.commons.utils.PrivilegedFileHelper;
import org.exoplatform.services.jcr.impl.storage.value.ValueDataResourceHolder;
import org.exoplatform.services.jcr.impl.util.io.FileCleaner;
@@ -101,7 +100,7 @@
{
for (File f : files)
{
- if (!PrivilegedFileHelper.delete(f))
+ if (!f.delete())
// TODO possible place of error: FileNotFoundException when we delete/update existing
// Value and then add/update again.
// After the time the Cleaner will delete the file which is mapped to the Value.
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/ValueFileIOHelper.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/ValueFileIOHelper.java 2011-06-06 11:52:05 UTC (rev 4480)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/ValueFileIOHelper.java 2011-06-07 06:15:08 UTC (rev 4481)
@@ -18,7 +18,6 @@
*/
package org.exoplatform.services.jcr.impl.storage.value.fs.operations;
-import org.exoplatform.commons.utils.PrivilegedFileHelper;
import org.exoplatform.services.jcr.datamodel.ValueData;
import org.exoplatform.services.jcr.impl.dataflow.persistent.ByteArrayPersistedValueData;
import org.exoplatform.services.jcr.impl.dataflow.persistent.FilePersistedValueData;
@@ -73,17 +72,18 @@
* @throws IOException
* if error
*/
- protected ValueData readValue(final File file, final int orderNum, final int maxBufferSize) throws IOException
+ protected ValueData readValue(File file, int orderNum, int maxBufferSize) throws IOException
{
- long fileSize = PrivilegedFileHelper.length(file);
+ long fileSize = file.length();
+
if (fileSize > maxBufferSize)
{
return new FilePersistedValueData(orderNum, file);
}
else
{
- FileInputStream is = PrivilegedFileHelper.fileInputStream(file);
+ FileInputStream is = new FileInputStream(file);
try
{
int buffSize = (int)fileSize;
@@ -137,9 +137,9 @@
* @throws IOException
* if error occurs
*/
- protected void writeByteArrayValue(final File file, final ValueData value) throws IOException
+ protected void writeByteArrayValue(File file, ValueData value) throws IOException
{
- OutputStream out = PrivilegedFileHelper.fileOutputStream(file);
+ OutputStream out = new FileOutputStream(file);
try
{
out.write(value.getAsByteArray());
@@ -160,9 +160,8 @@
* @throws IOException
* if error occurs
*/
- protected void writeStreamedValue(final File file, final ValueData value) throws IOException
+ protected void writeStreamedValue(File file, ValueData value) throws IOException
{
- // do what you want
// stream Value
if (value instanceof StreamPersistedValueData)
{
@@ -171,7 +170,7 @@
if (streamed.isPersisted())
{
// already persisted in another Value, copy it to this Value
- copyClose(streamed.getAsStream(), PrivilegedFileHelper.fileOutputStream(file));
+ copyClose(streamed.getAsStream(), new FileOutputStream(file));
}
else
{
@@ -180,23 +179,23 @@
if ((tempFile = streamed.getTempFile()) != null)
{
// it's spooled Value, try move its file to VS
- if (!PrivilegedFileHelper.renameTo(tempFile, file))
+ if (!tempFile.renameTo(file))
{
// not succeeded - copy bytes, temp file will be deleted by transient ValueData
if (LOG.isDebugEnabled())
{
- LOG.debug("Value spool file move (rename) to Values Storage is not succeeded. "
- + "Trying bytes copy. Spool file: " + PrivilegedFileHelper.getAbsolutePath(tempFile)
- + ". Destination: " + PrivilegedFileHelper.getAbsolutePath(file));
+ LOG
+ .debug("Value spool file move (rename) to Values Storage is not succeeded. Trying bytes copy. Spool file: "
+ + tempFile.getAbsolutePath() + ". Destination: " + file.getAbsolutePath());
}
- copyClose(PrivilegedFileHelper.fileInputStream(tempFile), PrivilegedFileHelper.fileOutputStream(file));
+ copyClose(new FileInputStream(tempFile), new FileOutputStream(file));
}
}
else
{
// not spooled, use client InputStream
- copyClose(streamed.getStream(), PrivilegedFileHelper.fileOutputStream(file));
+ copyClose(streamed.getStream(), new FileOutputStream(file));
}
// link this Value to file in VS
@@ -206,7 +205,7 @@
else
{
// copy from Value stream to the file, e.g. from FilePersistedValueData to this Value
- copyClose(value.getAsStream(), PrivilegedFileHelper.fileOutputStream(file));
+ copyClose(value.getAsStream(), new FileOutputStream(file));
}
}
@@ -244,7 +243,7 @@
in = streamed.getStream();
if (in == null)
{
- in = PrivilegedFileHelper.fileInputStream(streamed.getTempFile());
+ in = new FileInputStream(streamed.getTempFile());
}
}
}
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/ValueFileOperation.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/ValueFileOperation.java 2011-06-06 11:52:05 UTC (rev 4480)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/ValueFileOperation.java 2011-06-07 06:15:08 UTC (rev 4481)
@@ -18,8 +18,6 @@
*/
package org.exoplatform.services.jcr.impl.storage.value.fs.operations;
-import org.exoplatform.commons.utils.PrivilegedFileHelper;
-import org.exoplatform.commons.utils.SecurityHelper;
import org.exoplatform.services.jcr.impl.storage.value.ValueDataResourceHolder;
import org.exoplatform.services.jcr.impl.storage.value.ValueOperation;
import org.exoplatform.services.jcr.impl.storage.value.fs.FileLockException;
@@ -32,8 +30,6 @@
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
/**
* Created by The eXo Platform SAS.
@@ -63,6 +59,26 @@
protected static final Log LOG = ExoLogger.getLogger("exo.jcr.component.core.ValueFileOperation");
/**
+ * The local internet address
+ */
+ private static String LOCAL_ADDRESS;
+ static
+ {
+ // TODO this info may be is not necessary
+ try
+ {
+ // get the inet address
+ InetAddress local = InetAddress.getLocalHost();
+ LOCAL_ADDRESS = local.getHostAddress() + " (" + local.getHostName() + ")";
+ }
+ catch (UnknownHostException e)
+ {
+ LOG.warn("Cannot read host address " + e);
+ LOCAL_ADDRESS = "no address, " + e;
+ }
+ }
+
+ /**
* File cleaner.
*/
protected final FileCleaner cleaner;
@@ -128,7 +144,7 @@
// lock file in temp directory
lockFile = new File(tempDir, targetFile.getName() + LOCK_FILE_EXTENSION);
- FileOutputStream lout = PrivilegedFileHelper.fileOutputStream(lockFile, true);
+ FileOutputStream lout = new FileOutputStream(lockFile, true);
lout.write(operationInfo.getBytes()); // TODO write info
lout.getChannel().lock(); // wait for unlock (on Windows will wait for this JVM too)
@@ -158,13 +174,13 @@
if (lockFileStream != null)
lockFileStream.close();
- if (!PrivilegedFileHelper.delete(lockFile))
+ if (!lockFile.delete())
{ // TODO don't use FileCleaner, delete should be enough
- LOG.warn("Cannot delete lock file " + PrivilegedFileHelper.getAbsolutePath(lockFile)
- + ". Add to the FileCleaner");
+ LOG.warn("Cannot delete lock file " + lockFile.getAbsolutePath() + ". Add to the FileCleaner");
cleaner.addFile(lockFile);
}
}
+
}
/**
@@ -202,11 +218,11 @@
// lock in JVM (wait for unlock if required)
try
{
- return resources.aquire(PrivilegedFileHelper.getAbsolutePath(file), new ValueFileLockHolder(file));
+ return resources.aquire(file.getAbsolutePath(), new ValueFileLockHolder(file));
}
catch (InterruptedException e)
{
- throw new FileLockException("Lock error on " + PrivilegedFileHelper.getAbsolutePath(file), e);
+ throw new FileLockException("Lock error on " + file.getAbsolutePath(), e);
}
}
@@ -219,7 +235,7 @@
*/
public boolean unlock() throws IOException
{
- return resources.release(PrivilegedFileHelper.getAbsolutePath(file));
+ return resources.release(file.getAbsolutePath());
}
}
@@ -241,48 +257,7 @@
this.tempDir = tempDir;
- // TODO this info may be is not neccesary
- String localAddr;
- try
- {
- // get the inet address
- InetAddress local = null;
- PrivilegedExceptionAction<InetAddress> action = new PrivilegedExceptionAction<InetAddress>()
- {
- public InetAddress run() throws Exception
- {
- return InetAddress.getLocalHost();
- }
- };
- try
- {
- local = SecurityHelper.doPrivilegedExceptionAction(action);
- }
- catch (PrivilegedActionException pae)
- {
- Throwable cause = pae.getCause();
- if (cause instanceof UnknownHostException)
- {
- throw (UnknownHostException)cause;
- }
- else if (cause instanceof RuntimeException)
- {
- throw (RuntimeException)cause;
- }
- else
- {
- throw new RuntimeException(cause);
- }
- }
-
- localAddr = local.getHostAddress() + " (" + local.getHostName() + ")";
- }
- catch (UnknownHostException e)
- {
- LOG.warn("Cannot read host address " + e);
- localAddr = "no address, " + e;
- }
- operationInfo = System.currentTimeMillis() + " " + localAddr;
+ operationInfo = System.currentTimeMillis() + " " + LOCAL_ADDRESS;
}
/**
Modified: jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/WriteValue.java
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/WriteValue.java 2011-06-06 11:52:05 UTC (rev 4480)
+++ jcr/trunk/exo.jcr.component.core/src/main/java/org/exoplatform/services/jcr/impl/storage/value/fs/operations/WriteValue.java 2011-06-07 06:15:08 UTC (rev 4481)
@@ -18,7 +18,6 @@
*/
package org.exoplatform.services.jcr.impl.storage.value.fs.operations;
-import org.exoplatform.commons.utils.PrivilegedFileHelper;
import org.exoplatform.services.jcr.datamodel.ValueData;
import org.exoplatform.services.jcr.impl.storage.value.ValueDataResourceHolder;
import org.exoplatform.services.jcr.impl.util.io.FileCleaner;
@@ -99,7 +98,7 @@
try
{
// be sure the destination dir exists (case for Tree-style storage)
- PrivilegedFileHelper.mkdirs(file.getParentFile());
+ file.getParentFile().mkdirs();
// write value to the file
writeValue(file, value);
Modified: jcr/trunk/exo.jcr.component.core/src/test/resources/tsm-excludes.properties
===================================================================
--- jcr/trunk/exo.jcr.component.core/src/test/resources/tsm-excludes.properties 2011-06-06 11:52:05 UTC (rev 4480)
+++ jcr/trunk/exo.jcr.component.core/src/test/resources/tsm-excludes.properties 2011-06-07 06:15:08 UTC (rev 4481)
@@ -5,4 +5,25 @@
org.exoplatform.services.jcr.api.xa.TestXATransaction.testSimpleGlobalTransaction=begin,commit
org.exoplatform.services.jcr.api.xa.TestXATransaction.test2GlobalTransactions=begin,commit,suspend,resume
org.exoplatform.services.jcr.api.xa.TestXATransaction.test2GlobalTransactions2=begin,commit,suspend,resume,rollback
-org.exoplatform.services.jcr.api.xa.TestXATransaction.testLockInTransactions=begin,commit
\ No newline at end of file
+org.exoplatform.services.jcr.api.xa.TestXATransaction.testLockInTransactions=begin,commit
+org.exoplatform.services.jcr.impl.storage.value.fs.CASableFileIOChannelTestBase.write=write,commit
+org.exoplatform.services.jcr.impl.storage.value.fs.CASableFileIOChannelTestBase.writeRead=write,commit,read
+org.exoplatform.services.jcr.impl.storage.value.fs.CASableFileIOChannelTestBase.writeDelete=write,commit,delete
+org.exoplatform.services.jcr.impl.storage.value.fs.CASableFileIOChannelTestBase.writeSameMultivalued=write,commit
+org.exoplatform.services.jcr.impl.storage.value.fs.CASableFileIOChannelTestBase.writeUniqueMultivalued=write,commit
+org.exoplatform.services.jcr.impl.storage.value.fs.CASableFileIOChannelTestBase.writeSameProperties=write,commit
+org.exoplatform.services.jcr.impl.storage.value.fs.CASableFileIOChannelTestBase.writeUniqueProperties=write,commit
+org.exoplatform.services.jcr.impl.storage.value.fs.CASableFileIOChannelTestBase.deleteSameProperty=write,commit,delete
+org.exoplatform.services.jcr.impl.storage.value.fs.CASableFileIOChannelTestBase.deleteUniqueProperty=write,commit,delete
+org.exoplatform.services.jcr.impl.storage.value.fs.CASableFileIOChannelTestBase.addDeleteSharedMultivalued=write,commit,delete
+org.exoplatform.services.jcr.impl.storage.value.fs.CASableFileIOChannelTestBase.writeExisting=write,commit
+org.exoplatform.services.jcr.impl.storage.value.fs.TestFileIOChannel.testDelete=write,commit,delete
+org.exoplatform.services.jcr.impl.storage.value.fs.TestFileIOChannel.testRead=read,delete,commit
+org.exoplatform.services.jcr.impl.storage.value.fs.TestFileIOChannel.testWriteAdd=write,commit,delete
+org.exoplatform.services.jcr.impl.storage.value.fs.TestFileIOChannel.testWriteUpdate=writeUpdate
+org.exoplatform.services.jcr.impl.storage.value.fs.TestFileIOChannel.testConcurrentRead=write,commit,delete
+org.exoplatform.services.jcr.impl.storage.value.fs.TestFileIOChannel.testDeleteLockedFile=write,commit
+org.exoplatform.services.jcr.impl.storage.value.fs.TestFileValueIO.testReadByteArrayValueData=testReadValue
+org.exoplatform.services.jcr.impl.storage.value.fs.TestFileValueIO.testReadFileValueData=testReadValue
+org.exoplatform.services.jcr.impl.storage.value.fs.TestFileValueIO.testWriteFileValueData=testWriteValue,testReadValue
+org.exoplatform.services.jcr.impl.storage.value.fs.TestRemoveFromValueStorage.testRemoveValue=read,getFile
\ No newline at end of file
More information about the exo-jcr-commits
mailing list