00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030  
00031 package org.objectweb.proactive.core.filetransfer;
00032 
00033 import java.io.IOException;
00034 import java.util.Vector;
00035 
00036 import org.apache.log4j.Logger;
00037 import org.objectweb.proactive.ActiveObjectCreationException;
00038 import org.objectweb.proactive.ProActive;
00039 import org.objectweb.proactive.core.node.Node;
00040 import org.objectweb.proactive.core.node.NodeException;
00041 import org.objectweb.proactive.core.util.log.Loggers;
00042 import org.objectweb.proactive.core.util.log.ProActiveLogger;
00043 
00044 
00052 public class FileTransferEngine {
00053     
00054     protected static Logger logger = ProActiveLogger.getLogger(Loggers.FILETRANSFER);
00055     static FileTransferEngine singletonFTE = getFileTransferEngine();
00056     public Vector<FileTransferService> ftsPool;
00057 
00058     public FileTransferEngine() {
00059     }
00060 
00061     public void init() {
00062         ftsPool = new Vector<FileTransferService>();
00063     }
00064 
00065     public FileTransferService getFTS()
00066         throws ActiveObjectCreationException, NodeException {
00067         if (!ftsPool.isEmpty()) {
00068             return ftsPool.remove(0);
00069         }
00070 
00071         FileTransferService localFTS = (FileTransferService) ProActive.newActive(FileTransferService.class.getName(),
00072                 null);
00073         setImmediateServices(localFTS);
00074 
00075         return localFTS;
00076     }
00077 
00078     
00079     public FileTransferService getFTS(Node node)
00080         throws ActiveObjectCreationException, NodeException {
00081         FileTransferService remoteFTS = (FileTransferService) ProActive.newActive(FileTransferService.class.getName(),
00082                 null, node);
00083 
00084         setImmediateServices(remoteFTS);
00085         return remoteFTS;
00086     }
00087 
00088     public FileTransferService getFTS(String srcNodeURL)
00089         throws ActiveObjectCreationException, NodeException {
00090         FileTransferService remoteFTS = (FileTransferService) ProActive.newActive(FileTransferService.class.getName(),
00091                 null, srcNodeURL);
00092 
00093         setImmediateServices(remoteFTS);
00094         return remoteFTS;
00095     }
00096 
00097     private void setImmediateServices(FileTransferService fts) {
00098         try {
00099             ProActive.setImmediateService(fts, "requestFileTransfer",
00100                 new Class[] { FileTransferRequest.class });
00101             ProActive.setImmediateService(fts, "getFileTransferRequestStatus",
00102                 new Class[] { FileTransferRequest.class });
00103         } catch (IOException e1) {
00104             logger.error(
00105                 "Unable to activate immediate service on method: FileTransferService.requestFileTransfer(...)");
00106             e1.printStackTrace();
00107         }
00108     }
00109 
00110     public void putFTS(FileTransferService fts) {
00111         ftsPool.add(fts);
00112     }
00113 
00114     
00115     static synchronized public FileTransferEngine getFileTransferEngine() {
00116         if (singletonFTE == null) {
00117             try {
00118                 singletonFTE = (FileTransferEngine) ProActive.newActive(FileTransferEngine.class.getName(),
00119                         null);
00120             } catch (Exception e) {
00121                 e.printStackTrace();
00122             }
00123             singletonFTE.init();
00124         }
00125         return singletonFTE;
00126     }
00127 
00128     public synchronized static FileTransferEngine getFileTransferEngine(
00129         Node node) {
00130         try {
00131             return (FileTransferEngine) ProActive.lookupActive(FileTransferEngine.class.getName(),
00132                 node.getNodeInformation().getURL());
00133         } catch (Exception e) {
00134             e.printStackTrace();
00135         }
00136         return null;
00137     }
00138 }