[ 
https://issues.apache.org/jira/browse/AXIS-2782?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Akitoshi Yoshida updated AXIS-2782:
-----------------------------------

    Attachment: AttachmentPart.zip

suggested modification to solve this issue.

> AttachmentPart does not remove its temporary Axis???.att file, created by 
> ManagedMemoryDataSource, if this file is created by its flushToDisk method
> ----------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: AXIS-2782
>                 URL: https://issues.apache.org/jira/browse/AXIS-2782
>             Project: Axis
>          Issue Type: Bug
>          Components: Basic Architecture
>    Affects Versions: 1.4
>         Environment: Windows XP
> Axis 1.4
>            Reporter: Akitoshi Yoshida
>             Fix For: current (nightly)
>
>         Attachments: AttachmentPart.zip
>
>
> org.apache.axis.attachments.AttachmentPart has its resource clean up method 
> dispose(), which gets called when the message is garbage collected.
> This AttachmentPart uses org.apache.axis.attachments.ManagedMemoryDataSource 
> to hold the attachment content.
> The ManagedMemoryDataSource class may create a temporary Axis???.att file and 
> flush the content into this file when there are too many mesages held in 
> memoryh.
> When this happens, unfortunately the ManagedMemoryDataSource object's 
> delete() method is not called, when its associated AttachementPart object's 
> dispose() method gets called, as attribute attachmentFile is null as shown in 
> the following code segment:
>     public synchronized void dispose() {
>         if (attachmentFile != null) {
>             javax.activation.DataSource ds = datahandler.getDataSource();
>             if (ds instanceof ManagedMemoryDataSource) {
>                 ((ManagedMemoryDataSource) ds).delete(); //and delete the file
>             } else {
>                 File f = new File(attachmentFile);
>                 //no need to check for existence here.
>                 f.delete();
>             }
>             //set the filename to null to stop repeated use
>             setAttachmentFile(null);
>         }
> Consequently, this temporary file is not removed.
> To fix this problem, I think the ManagedMemoryDataSource's delete method 
> needs to be called independent of the attachmentFile attribute value, as in
>     public synchronized void dispose() {
>         javax.activation.DataSource ds = datahandler.getDataSource();
>         // delete the ManagedMemoryDataSource (may have been flushed into a 
> temp file)
>         if (ds instanceof ManagedMemoryDataSource) {
>             ((ManagedMemoryDataSource) ds).delete(); //and delete the file
>         }
>         if (attachmentFile != null) {
>             File f = new File(attachmentFile);
>             //no need to check for existence here.
>             f.delete();
>             //set the filename to null to stop repeated use
>             setAttachmentFile(null);
>         }
> Regards, aki

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to