X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=org.argeo.slc.detached%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fdetached%2Fdrivers%2FFileDriver.java;fp=org.argeo.slc.detached%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fdetached%2Fdrivers%2FFileDriver.java;h=fafa3ebf69506b58df812521734d44bc0a37e8e1;hb=63799a559f90483285001a6807ea2f1df120bf37;hp=a4dfc892e4ad6018a7efcd392b9ba2566343dd36;hpb=e95a183611a40be7aca3233bb19b89bdc5043338;p=gpl%2Fargeo-slc.git diff --git a/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/drivers/FileDriver.java b/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/drivers/FileDriver.java index a4dfc892e..fafa3ebf6 100644 --- a/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/drivers/FileDriver.java +++ b/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/drivers/FileDriver.java @@ -9,15 +9,14 @@ import java.io.ObjectOutputStream; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.argeo.slc.detached.DetachedAnswer; import org.argeo.slc.detached.DetachedClient; import org.argeo.slc.detached.DetachedCommunication; -import org.argeo.slc.detached.DetachedDriver; import org.argeo.slc.detached.DetachedException; -import org.argeo.slc.detached.DetachedAnswer; import org.argeo.slc.detached.DetachedRequest; import org.springframework.beans.factory.InitializingBean; -public class FileDriver implements DetachedDriver, DetachedClient, +public class FileDriver extends AbstractDriver implements DetachedClient, InitializingBean { private final static Log log = LogFactory.getLog(FileDriver.class); @@ -30,9 +29,10 @@ public class FileDriver implements DetachedDriver, DetachedClient, public synchronized DetachedRequest receiveRequest() throws Exception { DetachedRequest request = (DetachedRequest) receiveFile(requestsDir, processedRequestsDir); - log.debug("Received detached request #" + request.getUuid() - + " for ref '" + request.getRef() + "', path=" - + request.getPath()); + if (request != null) + log.debug("Received detached request #" + request.getUuid() + + " for ref '" + request.getRef() + "', path=" + + request.getPath()); return request; } @@ -44,7 +44,8 @@ public class FileDriver implements DetachedDriver, DetachedClient, public DetachedAnswer receiveAnswer() throws Exception { DetachedAnswer answer = (DetachedAnswer) receiveFile(answersDir, processedAnswersDir); - log.debug("Received detached answer #" + answer.getUuid()); + if (answer != null) + log.debug("Received detached answer #" + answer.getUuid()); return answer; } @@ -66,20 +67,28 @@ public class FileDriver implements DetachedDriver, DetachedClient, lockFile.delete(); } - protected DetachedCommunication receiveFile(File dir, File processedDir) - throws Exception { + protected synchronized DetachedCommunication receiveFile(File dir, + File processedDir) throws Exception { File file = null; - while (file == null) { + while (file == null && isActive()) { if (!dir.exists()) throw new DetachedException("Dir " + dir + " does not exist."); File[] files = dir.listFiles(); if (files.length > 0) file = files[0]; - else - Thread.sleep(1000); + else { + try { + wait(100); + } catch (InterruptedException e) { + // silent + } + } } + if (!isActive()) + return null; + File lockFile = nameLockFile(file); while (lockFile.exists()) // TODO: implements time out @@ -114,7 +123,15 @@ public class FileDriver implements DetachedDriver, DetachedClient, this.baseDir = baseDir; } - public void init() { + private void createIfNotExist(File dir) { + if (!dir.exists()) { + log.warn("Dir " + dir.getAbsolutePath() + + " does not exist. Creating it..."); + dir.mkdirs(); + } + } + + public void afterPropertiesSet() throws Exception { this.requestsDir = new File(baseDir.getAbsolutePath() + File.separator + "requests"); this.answersDir = new File(baseDir.getAbsolutePath() + File.separator @@ -130,16 +147,4 @@ public class FileDriver implements DetachedDriver, DetachedClient, createIfNotExist(processedAnswersDir); } - private void createIfNotExist(File dir) { - if (!dir.exists()) { - log.warn("Dir " + requestsDir.getAbsolutePath() - + " does not exist. Creating it..."); - dir.mkdirs(); - } - } - - public void afterPropertiesSet() throws Exception { - init(); - } - }