Author: davsclaus
Date: Mon Aug 23 08:57:37 2010
New Revision: 988034
URL: http://svn.apache.org/viewvc?rev=988034&view=rev
Log:
CAMEL-1895: file locks is stored on completion instead of Exchange.
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/FileLockExclusiveReadLockStrategy.java
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileProcessStrategyFactory.java
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/MarkerFileExclusiveReadLockStrategy.java
camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumePollEnrichFileTest.java
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/FileLockExclusiveReadLockStrategy.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/FileLockExclusiveReadLockStrategy.java?rev=988034&r1=988033&r2=988034&view=diff
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/FileLockExclusiveReadLockStrategy.java
(original)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/FileLockExclusiveReadLockStrategy.java
Mon Aug 23 08:57:37 2010
@@ -28,7 +28,6 @@ import org.apache.camel.component.file.G
import org.apache.camel.component.file.GenericFileEndpoint;
import org.apache.camel.component.file.GenericFileExclusiveReadLockStrategy;
import org.apache.camel.component.file.GenericFileOperations;
-import org.apache.camel.util.ExchangeHelper;
import org.apache.camel.util.IOHelper;
import org.apache.camel.util.StopWatch;
import org.apache.commons.logging.Log;
@@ -42,6 +41,8 @@ import org.apache.commons.logging.LogFac
public class FileLockExclusiveReadLockStrategy implements
GenericFileExclusiveReadLockStrategy<File> {
private static final transient Log LOG =
LogFactory.getLog(FileLockExclusiveReadLockStrategy.class);
private long timeout;
+ private FileLock lock;
+ private String lockFileName;
public void prepareOnStartup(GenericFileOperations<File> operations,
GenericFileEndpoint<File> endpoint) {
// noop
@@ -73,7 +74,6 @@ public class FileLockExclusiveReadLockSt
}
// get the lock using either try lock or not depending on if
we are using timeout or not
- FileLock lock = null;
try {
lock = timeout > 0 ? channel.tryLock() : channel.lock();
} catch (IllegalStateException ex) {
@@ -83,11 +83,7 @@ public class FileLockExclusiveReadLockSt
if (LOG.isTraceEnabled()) {
LOG.trace("Acquired exclusive read lock: " + lock + "
to file: " + target);
}
-
- // store lock so we can release it later
- exchange.setProperty("CamelFileLock", lock);
- exchange.setProperty("CamelFileLockName",
target.getName());
-
+ lockFileName = target.getName();
exclusive = true;
} else {
boolean interrupted = sleep();
@@ -119,14 +115,14 @@ public class FileLockExclusiveReadLockSt
public void releaseExclusiveReadLock(GenericFileOperations<File>
operations,
GenericFile<File> file, Exchange
exchange) throws Exception {
- FileLock lock = ExchangeHelper.getMandatoryProperty(exchange,
"CamelFileLock", FileLock.class);
- String lockFileName = ExchangeHelper.getMandatoryProperty(exchange,
"CamelFileLockName", String.class);
- Channel channel = lock.channel();
- try {
- lock.release();
- } finally {
- // must close channel first
- IOHelper.close(channel, "while acquiring exclusive read lock for
file: " + lockFileName, LOG);
+ if (lock != null) {
+ Channel channel = lock.channel();
+ try {
+ lock.release();
+ } finally {
+ // must close channel first
+ IOHelper.close(channel, "while acquiring exclusive read lock
for file: " + lockFileName, LOG);
+ }
}
}
@@ -152,7 +148,7 @@ public class FileLockExclusiveReadLockSt
/**
* Sets an optional timeout period.
* <p/>
- * If the readlock could not be granted within the timeperiod then the
wait is stopped and the
+ * If the readlock could not be granted within the time period then the
wait is stopped and the
* acquireReadLock returns <tt>false</tt>.
*
* @param timeout period in millis
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileProcessStrategyFactory.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileProcessStrategyFactory.java?rev=988034&r1=988033&r2=988034&view=diff
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileProcessStrategyFactory.java
(original)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/GenericFileProcessStrategyFactory.java
Mon Aug 23 08:57:37 2010
@@ -16,7 +16,6 @@
*/
package org.apache.camel.component.file.strategy;
-import java.io.File;
import java.util.Map;
import org.apache.camel.CamelContext;
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/MarkerFileExclusiveReadLockStrategy.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/MarkerFileExclusiveReadLockStrategy.java?rev=988034&r1=988033&r2=988034&view=diff
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/MarkerFileExclusiveReadLockStrategy.java
(original)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/component/file/strategy/MarkerFileExclusiveReadLockStrategy.java
Mon Aug 23 08:57:37 2010
@@ -24,7 +24,6 @@ import org.apache.camel.component.file.G
import org.apache.camel.component.file.GenericFileEndpoint;
import org.apache.camel.component.file.GenericFileExclusiveReadLockStrategy;
import org.apache.camel.component.file.GenericFileOperations;
-import org.apache.camel.util.ExchangeHelper;
import org.apache.camel.util.FileUtil;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -35,6 +34,8 @@ import org.apache.commons.logging.LogFac
*/
public class MarkerFileExclusiveReadLockStrategy implements
GenericFileExclusiveReadLockStrategy<File> {
private static final transient Log LOG =
LogFactory.getLog(MarkerFileExclusiveReadLockStrategy.class);
+ private File lock;
+ private String lockFileName;
public void prepareOnStartup(GenericFileOperations<File> operations,
GenericFileEndpoint<File> endpoint) {
String dir = endpoint.getConfiguration().getDirectory();
@@ -49,18 +50,17 @@ public class MarkerFileExclusiveReadLock
public boolean acquireExclusiveReadLock(GenericFileOperations<File>
operations,
GenericFile<File> file, Exchange
exchange) throws Exception {
-
- String lockFileName = file.getAbsoluteFilePath() +
FileComponent.DEFAULT_LOCK_FILE_POSTFIX;
+ lockFileName = file.getAbsoluteFilePath() +
FileComponent.DEFAULT_LOCK_FILE_POSTFIX;
if (LOG.isTraceEnabled()) {
LOG.trace("Locking the file: " + file + " using the lock file
name: " + lockFileName);
}
// create a plain file as marker filer for locking (do not use
FileLock)
- File lock = new File(lockFileName);
+ lock = new File(lockFileName);
boolean acquired = lock.createNewFile();
- if (acquired) {
- exchange.setProperty("CamelFileLock", lock);
- exchange.setProperty("CamelFileLockName", lockFileName);
+ if (!acquired) {
+ lock = null;
+
}
return acquired;
@@ -68,17 +68,15 @@ public class MarkerFileExclusiveReadLock
public void releaseExclusiveReadLock(GenericFileOperations<File>
operations,
GenericFile<File> file, Exchange
exchange) throws Exception {
+ if (lock != null) {
+ if (LOG.isTraceEnabled()) {
+ LOG.trace("Unlocking file: " + lockFileName);
+ }
- File lock = ExchangeHelper.getMandatoryProperty(exchange,
"CamelFileLock", File.class);
- String lockFileName = ExchangeHelper.getMandatoryProperty(exchange,
"CamelFileLockName", String.class);
-
- if (LOG.isTraceEnabled()) {
- LOG.trace("Unlocking file: " + lockFileName);
- }
-
- boolean deleted = FileUtil.deleteFile(lock);
- if (LOG.isTraceEnabled()) {
- LOG.trace("Lock file: " + lockFileName + " was deleted: " +
deleted);
+ boolean deleted = FileUtil.deleteFile(lock);
+ if (LOG.isTraceEnabled()) {
+ LOG.trace("Lock file: " + lockFileName + " was deleted: " +
deleted);
+ }
}
}
Modified:
camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumePollEnrichFileTest.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumePollEnrichFileTest.java?rev=988034&r1=988033&r2=988034&view=diff
==============================================================================
---
camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumePollEnrichFileTest.java
(original)
+++
camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumePollEnrichFileTest.java
Mon Aug 23 08:57:37 2010
@@ -59,9 +59,9 @@ public class FileConsumePollEnrichFileTe
return new RouteBuilder() {
@Override
public void configure() throws Exception {
- from("file://target/enrich?move=.done&readLock=none")
+ from("file://target/enrich?move=.done")
.to("mock:start")
-
.pollEnrich("file://target/enrichdata?move=.done&readLock=none")
+ .pollEnrich("file://target/enrichdata?move=.done")
.to("mock:result");
}
};