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)


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