Return-Path: Delivered-To: apmail-ws-commons-dev-archive@locus.apache.org Received: (qmail 41248 invoked from network); 3 Mar 2008 22:28:44 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 3 Mar 2008 22:28:44 -0000 Received: (qmail 36943 invoked by uid 500); 3 Mar 2008 22:28:36 -0000 Delivered-To: apmail-ws-commons-dev-archive@ws.apache.org Received: (qmail 36918 invoked by uid 500); 3 Mar 2008 22:28:36 -0000 Mailing-List: contact commons-dev-help@ws.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: commons-dev@ws.apache.org Delivered-To: mailing list commons-dev@ws.apache.org Received: (qmail 36878 invoked by uid 99); 3 Mar 2008 22:28:36 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 03 Mar 2008 14:28:36 -0800 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 03 Mar 2008 22:28:06 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 14E6D1A9832; Mon, 3 Mar 2008 14:28:16 -0800 (PST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r633305 - in /webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments: ./ impl/ lifecycle/ lifecycle/impl/ Date: Mon, 03 Mar 2008 22:28:12 -0000 To: commons-dev@ws.apache.org From: nthaker@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20080303222816.14E6D1A9832@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: nthaker Date: Mon Mar 3 14:28:09 2008 New Revision: 633305 URL: http://svn.apache.org/viewvc?rev=633305&view=rev Log: WSCOMMONS-306 Added: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/lifecycle/ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/lifecycle/LifecycleManager.java webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/lifecycle/LifecycleManagerFactory.java webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/lifecycle/impl/ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/lifecycle/impl/FileAccessor.java webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/lifecycle/impl/LifecycleEventDefinitions.java webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/lifecycle/impl/LifecycleEventHandler.java webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/lifecycle/impl/LifecycleManagerImpl.java Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/Attachments.java webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/impl/PartOnFile.java Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/Attachments.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/Attachments.java?rev=633305&r1=633304&r2=633305&view=diff ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/Attachments.java (original) +++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/Attachments.java Mon Mar 3 14:28:09 2008 @@ -20,6 +20,7 @@ package org.apache.axiom.attachments; import org.apache.axiom.attachments.impl.PartFactory; +import org.apache.axiom.attachments.lifecycle.LifecycleManagerFactory; import org.apache.axiom.om.OMException; import org.apache.axiom.om.impl.MTOMConstants; import org.apache.axiom.om.util.UUIDGenerator; @@ -108,9 +109,18 @@ private String attachmentRepoDir; private int fileStorageThreshold; - + + private static LifecycleManagerFactory lmf = new LifecycleManagerFactory(); + protected static Log log = LogFactory.getLog(Attachments.class); - + + public static LifecycleManagerFactory getLifcycleManagerFactory() { + return lmf; + } + + public static void setlifeCycleManagerFactory(LifecycleManagerFactory lifeCycleManagerFactory) { + lmf = lifeCycleManagerFactory; + } /** * Moves the pointer to the beginning of the first MIME part. Reads till first MIME boundary is Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/impl/PartOnFile.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/impl/PartOnFile.java?rev=633305&r1=633304&r2=633305&view=diff ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/impl/PartOnFile.java (original) +++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/impl/PartOnFile.java Mon Mar 3 14:28:09 2008 @@ -18,18 +18,17 @@ */ package org.apache.axiom.attachments.impl; -import org.apache.axiom.attachments.CachedFileDataSource; -import org.apache.axiom.om.util.UUIDGenerator; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.Hashtable; import javax.activation.DataHandler; import javax.mail.MessagingException; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.util.Hashtable; +import org.apache.axiom.attachments.lifecycle.LifecycleManager; +import org.apache.axiom.attachments.lifecycle.LifecycleManagerFactory; +import org.apache.axiom.attachments.lifecycle.impl.FileAccessor; /** * PartOnFile stores that attachment in a file. @@ -41,7 +40,7 @@ */ public class PartOnFile extends AbstractPart { - File backingFile; + FileAccessor fileAccessor; /** @@ -53,76 +52,44 @@ */ PartOnFile(Hashtable headers, InputStream is1, InputStream is2, String attachmentDir) throws IOException { super(headers); - backingFile = createFile(attachmentDir); - + LifecycleManager lm = LifecycleManagerFactory.getLifeCycleManager(); + fileAccessor = lm.create(attachmentDir); // Now write the data to the backing file - FileOutputStream fos = new FileOutputStream(backingFile); + OutputStream fos = fileAccessor.getOutputStream(); BufferUtils.inputStream2OutputStream(is1, fos); BufferUtils.inputStream2OutputStream(is2, fos); fos.flush(); fos.close(); - } - - /** - * Create a unique file in the designated directory - * @param attachmentDir - * @return File - * @throws IOException - */ - private static File createFile(String attachmentDir) throws IOException { - File file = null; - File dir = null; - if (attachmentDir != null) { - dir = new File(attachmentDir); - if (!dir.exists()) { - dir.mkdirs(); - } - } - if (!dir.isDirectory()) { - throw new IllegalArgumentException("Given Axis2 Attachment File Cache Location " - + dir + " should be a directory."); - } - // Generate unique id. The UUID generator is used so that we can limit - // synchronization with the java random number generator. - String id = UUIDGenerator.getUUID(); - //Replace colons with underscores - id = id.replaceAll(":", "_"); - - String fileString = "Axis2" + id + ".att"; - file = new File(dir, fileString); - return file; } - + /* (non-Javadoc) * @see org.apache.axiom.attachments.impl.AbstractPart#getDataHandler() */ public DataHandler getDataHandler() throws MessagingException { - CachedFileDataSource dataSource = new CachedFileDataSource(backingFile); - dataSource.setContentType(getContentType()); - return new DataHandler(dataSource); + return fileAccessor.getDataHandler(getContentType()); } /* (non-Javadoc) * @see org.apache.axiom.attachments.impl.AbstractPart#getFileName() */ public String getFileName() throws MessagingException { - return backingFile.getAbsolutePath(); + return fileAccessor.getFileName(); } /* (non-Javadoc) * @see org.apache.axiom.attachments.impl.AbstractPart#getInputStream() */ public InputStream getInputStream() throws IOException, MessagingException { - return new FileInputStream(backingFile); + return fileAccessor.getInputStream(); } /* (non-Javadoc) * @see org.apache.axiom.attachments.impl.AbstractPart#getSize() */ public int getSize() { - return (int) backingFile.length(); + return (int) fileAccessor.getSize(); } } Added: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/lifecycle/LifecycleManager.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/lifecycle/LifecycleManager.java?rev=633305&view=auto ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/lifecycle/LifecycleManager.java (added) +++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/lifecycle/LifecycleManager.java Mon Mar 3 14:28:09 2008 @@ -0,0 +1,68 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.axiom.attachments.lifecycle; + +import java.io.IOException; + +import org.apache.axiom.attachments.lifecycle.impl.FileAccessor; + +/** + * Lifecycle Manager will be used to manage the lifecycle of attachment files. + * + * Axiom forks attachment processing based on the size of attachment to be processed. + * Attachments are either processed by storing them in memory or by storing them in + * file system based on the size of the attachment file. + * + * Lifecycle Manager provides and organized way of managing attachments, by providing + * calls to create and delete attachments. + */ +public interface LifecycleManager { + + /** + * Create a unique file in the designated directory + * @param attachmentDir + * @return + * @throws IOException + */ + public FileAccessor create(String attachmentDir) throws IOException; + + /** + * Deletes attachment file + * @param File + * @throws IOException + */ + public void delete(String id) throws IOException; + + /** + * Mark the file for deletion on application/VM exit + * @param File + * @throws IOException + */ + public void deleteOnExit(String id) throws IOException; + + /** + * Mark attachment file for deletion when designated time interval in seconds + * has elapsed. + * @param interval + * @param File + * @throws IOException + */ + public void deleteOnTimeInterval(int interval, String id) throws IOException; +} Added: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/lifecycle/LifecycleManagerFactory.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/lifecycle/LifecycleManagerFactory.java?rev=633305&view=auto ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/lifecycle/LifecycleManagerFactory.java (added) +++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/lifecycle/LifecycleManagerFactory.java Mon Mar 3 14:28:09 2008 @@ -0,0 +1,28 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.axiom.attachments.lifecycle; + +import org.apache.axiom.attachments.lifecycle.impl.LifecycleManagerImpl; + +public class LifecycleManagerFactory { + public static LifecycleManager getLifeCycleManager(){ + return LifecycleManagerImpl.manager; + } +} Added: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/lifecycle/impl/FileAccessor.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/lifecycle/impl/FileAccessor.java?rev=633305&view=auto ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/lifecycle/impl/FileAccessor.java (added) +++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/lifecycle/impl/FileAccessor.java Mon Mar 3 14:28:09 2008 @@ -0,0 +1,117 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.axiom.attachments.lifecycle.impl; + +import org.apache.axiom.attachments.CachedFileDataSource; +import org.apache.axiom.attachments.lifecycle.LifecycleManager; +import org.apache.axiom.attachments.lifecycle.LifecycleManagerFactory; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.activation.DataHandler; +import javax.mail.MessagingException; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +/** + * FileAccessor wraps the attachment temp file. It is created from PartOnFile. + * The idea behind wrapping the file is to give rumtime an ability to track + * when the file is accessed with streams or data handler and accordingly trigger + * events to handle the the files lifecycle. + * + */ +public class FileAccessor implements LifecycleEventHandler{ + private static final Log log = LogFactory.getLog(FileAccessor.class); + File file = null; + String id = null; + //TODO remove hard coded time interval, 30 mins/1800 secs + private final static int DELETE_INTERVAL = 1800; + public FileAccessor(File file, String id) { + super(); + this.file = file; + this.id = id; + } + + public DataHandler getDataHandler(String contentType) throws MessagingException { + if(log.isDebugEnabled()){ + log.debug("getDataHandler()"); + } + CachedFileDataSource dataSource = new CachedFileDataSource(file); + dataSource.setContentType(contentType); + return new DataHandler(dataSource); + } + + public String getFileName() throws MessagingException { + if(log.isDebugEnabled()){ + log.debug("getFileName()"); + } + return file.getAbsolutePath(); + } + + public InputStream getInputStream() throws IOException, MessagingException { + if(log.isDebugEnabled()){ + log.debug("getInputStream()"); + } + return new FileInputStream(file); + } + + public OutputStream getOutputStream() throws FileNotFoundException{ + if(log.isDebugEnabled()){ + log.debug("getOutputStream()"); + } + return new FileOutputStream(file); + } + + public int getSize() { + return (int) file.length(); + } + + public void handleEvent(int eventId) throws IOException { + LifecycleManager manager = LifecycleManagerFactory.getLifeCycleManager(); + switch (eventId) { + case LifecycleEventDefinitions.DELETE_ON_EXIT: + manager.deleteOnExit(id); + break; + case LifecycleEventDefinitions.DELETE_ON_TIME_INTERVAL: + manager.deleteOnTimeInterval(DELETE_INTERVAL, id); + break; + case LifecycleEventDefinitions.READ_ONCE_AND_DELETE: + manager.delete(id); + break; + default: + manager.delete(id); + break; + } + } + + public File getFile() { + return file; + } + + public String getId() { + return id; + } +} Added: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/lifecycle/impl/LifecycleEventDefinitions.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/lifecycle/impl/LifecycleEventDefinitions.java?rev=633305&view=auto ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/lifecycle/impl/LifecycleEventDefinitions.java (added) +++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/lifecycle/impl/LifecycleEventDefinitions.java Mon Mar 3 14:28:09 2008 @@ -0,0 +1,27 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + +package org.apache.axiom.attachments.lifecycle.impl; + +public class LifecycleEventDefinitions { + public static final int DELETE_ON_EXIT = 1; + public static final int READ_ONCE_AND_DELETE = 2; + public static final int DELETE_ON_TIME_INTERVAL = 3; +} Added: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/lifecycle/impl/LifecycleEventHandler.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/lifecycle/impl/LifecycleEventHandler.java?rev=633305&view=auto ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/lifecycle/impl/LifecycleEventHandler.java (added) +++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/lifecycle/impl/LifecycleEventHandler.java Mon Mar 3 14:28:09 2008 @@ -0,0 +1,43 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.axiom.attachments.lifecycle.impl; + +import java.io.IOException; + +/** + * The attachment life cycle manager supports create and delete operations on the FileAccessor(which holds attachment file). + * These operations are coupled to events, the LifecycleManager needs to execute an operation when an even + * causes that operation to trigger. For example a delete operation should execute when a deleteOnExit + * or deleteOnTimeInterval event occur on FileAccessor. + * + * The LifecycleManager should execute operation on FileAccessor based on the Events that trigger them. + * EventHandler defines methods to execute LifecycleManager operation when a event occurs. + * + */ +public interface LifecycleEventHandler { + + /** + * When a Event occurs in FileAccessor, execute the LifecycleManager Operation + * For example, if the delete behaviour is readOnce and if the inputstream on attachment is read + * and closed the first time, the delete operation in LifecycleManager should be executed. + * @param eventName + */ + public void handleEvent(int eventId) throws IOException; +} Added: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/lifecycle/impl/LifecycleManagerImpl.java URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/lifecycle/impl/LifecycleManagerImpl.java?rev=633305&view=auto ============================================================================== --- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/lifecycle/impl/LifecycleManagerImpl.java (added) +++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/lifecycle/impl/LifecycleManagerImpl.java Mon Mar 3 14:28:09 2008 @@ -0,0 +1,165 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.axiom.attachments.lifecycle.impl; + +import org.apache.axiom.attachments.lifecycle.LifecycleManager; +import org.apache.axiom.om.util.UUIDGenerator; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.io.File; +import java.io.IOException; +import java.util.Hashtable; +import java.util.Map; + +public class LifecycleManagerImpl implements LifecycleManager { + private static final Log log = LogFactory.getLog(LifecycleManagerImpl.class); + private Map table = new Hashtable(); + public static LifecycleManager manager = new LifecycleManagerImpl(); + + protected LifecycleManagerImpl() { + super(); + } + + /* (non-Javadoc) + * @see org.apache.axiom.lifecycle.LifecycleManager#create(java.lang.String) + */ + public FileAccessor create(String attachmentDir) throws IOException { + if(log.isDebugEnabled()){ + log.debug("Start Create()"); + } + File file = null; + File dir = null; + if (attachmentDir != null) { + dir = new File(attachmentDir); + if (!dir.exists()) { + dir.mkdirs(); + } + } + if (!dir.isDirectory()) { + throw new IllegalArgumentException("Given Axis2 Attachment File Cache Location " + + dir + " should be a directory."); + } + // Generate unique id. The UUID generator is used so that we can limit + // synchronization with the java random number generator. + String id = UUIDGenerator.getUUID(); + + //Replace colons with underscores + id = id.replaceAll(":", "_"); + + String fileString = "Axis2" + id + ".att"; + file = new File(dir, fileString); + //add the file to table + table.put(id, file); + FileAccessor fa = new FileAccessor(file, id); + //TODO: change deleteOnExit call such that it's sent as an event to + //LifecycleEventHandler. example fa.handleEvent(LifeCycleDefinition.DELETE_ON_EXIT) + //This is the default behaviour. Delete file on VM Exit. + deleteOnExit(id); + if(log.isDebugEnabled()){ + log.debug("End Create()"); + } + return fa; + } + + /* (non-Javadoc) + * @see org.apache.axiom.lifecycle.LifecycleManager#delete(java.io.File) + */ + public void delete(String id) throws IOException { + if(log.isDebugEnabled()){ + log.debug("Start delete()"); + } + File file = getFile(id); + + if(file!=null && file.exists()){ + file.delete(); + table.remove(id); + } + if(log.isDebugEnabled()){ + log.debug("End delete()"); + } + } + + /* (non-Javadoc) + * @see org.apache.axiom.lifecycle.LifecycleManager#deleteOnExit(java.io.File) + */ + public void deleteOnExit(String id) throws IOException { + if(log.isDebugEnabled()){ + log.debug("Start deleteOnExit()"); + } + File file = getFile(id); + if(file!=null){ + file.deleteOnExit(); + table.remove(id); + } + if(log.isDebugEnabled()){ + log.debug("End deleteOnExit()"); + } + } + + /* (non-Javadoc) + * @see org.apache.axiom.lifecycle.LifecycleManager#deleteOnTimeInterval(int) + */ + public void deleteOnTimeInterval(int interval, String id) throws IOException { + if(log.isDebugEnabled()){ + log.debug("Start deleteOnTimeInterval()"); + } + File file = getFile(id); + Thread t = new Thread(new LifecycleManagerImpl.FileDeletor(interval, file, id)); + t.start(); + if(log.isDebugEnabled()){ + log.debug("End deleteOnTimeInterval()"); + } + } + + private File getFile(String id){ + return (File)table.get(id); + } + + public class FileDeletor implements Runnable{ + int interval; + File _file; + String _id; + public FileDeletor(int interval, File file, String id) { + super(); + this.interval = interval; + this._file = file; + this._id = id; + } + + public void run() { + try{ + Thread.sleep(interval*1000); + if(_file.exists()){ + _file.delete(); + table.remove(_id); + } + }catch(InterruptedException e){ + //Log Exception + if(log.isDebugEnabled()){ + log.warn("InterruptedException occured "+e.getMessage()); + } + } + } + } + +} + + --------------------------------------------------------------------- To unsubscribe, e-mail: commons-dev-unsubscribe@ws.apache.org For additional commands, e-mail: commons-dev-help@ws.apache.org