X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.slc.detached%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fdetached%2Fdrivers%2FFileDriver.java;h=fafa3ebf69506b58df812521734d44bc0a37e8e1;hb=93f3596116744a2c0588f93438c1c9f76b64fb50;hp=cc9d1392246c22565f91658e69effc92dd6f0dbd;hpb=cf1adb6cbf016fe861e7b6952776081a0339c4d3;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 cc9d13922..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); @@ -28,20 +27,33 @@ public class FileDriver implements DetachedDriver, DetachedClient, private File processedAnswersDir; public synchronized DetachedRequest receiveRequest() throws Exception { - return (DetachedRequest) receiveFile(requestsDir, + DetachedRequest request = (DetachedRequest) receiveFile(requestsDir, processedRequestsDir); + if (request != null) + log.debug("Received detached request #" + request.getUuid() + + " for ref '" + request.getRef() + "', path=" + + request.getPath()); + return request; } public void sendAnswer(DetachedAnswer answer) throws Exception { sendFile(answersDir, answer); + log.debug("Sent detached answer #" + answer.getUuid()); } public DetachedAnswer receiveAnswer() throws Exception { - return (DetachedAnswer) receiveFile(answersDir, processedAnswersDir); + DetachedAnswer answer = (DetachedAnswer) receiveFile(answersDir, + processedAnswersDir); + if (answer != null) + log.debug("Received detached answer #" + answer.getUuid()); + return answer; } public void sendRequest(DetachedRequest request) throws Exception { sendFile(requestsDir, request); + log.debug("Sent detached request #" + request.getUuid() + + " for ref '" + request.getRef() + "', path=" + + request.getPath()); } protected void sendFile(File dir, DetachedCommunication detCom) @@ -55,17 +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 @@ -100,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 @@ -116,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(); - } - }