And this the reason why JBoss cannot delete the files after undeploy EAR files or SAR files.
 
Qingxian
-----Original Message-----
From: Qingxian Wang
Sent: 16 July 2002 17:55
To: '[EMAIL PROTECTED]'
Subject: InputStream and JarFile are not closed in getManifest()

The getManifest() method of DeploymentInfo class in org.jboss.deployment package does not close FileInputStream and JarFile after creating or getting a Manifest object.  This perhaps is the reason why JBoss cannot close JAR files when undeploying EAR or SAR files and therefore "Too many open files" problem is caused. 
 
The snipet of the JBoss (3.0.0) code is as follows:
 
/**
    * getManifest returns (if present) the deployment's manifest
    * it is lazy loaded to work from the localURL
    */
   public Manifest getManifest()
   {
      try
      {
         if (manifest == null)
         {
            File file = new File(localUrl.getFile());
           
            if (file.isDirectory())
               manifest= new Manifest(new FileInputStream(new File(file, "META-INF/MANIFEST.MF")));
           
            else // a jar
               manifest = new JarFile(file).getManifest();
        
         }
        
         return manifest;
      }
      // It is ok to barf at any time in the above, means no manifest
      catch (Exception ignored) { return null;}
   }
 
 
The suggested changes are as below:
 
public Manifest getManifest()
   {
      try
      {
         if (manifest == null)
         {
            File file = new File(localUrl.getFile());
           
            if (file.isDirectory()) {
                FileInputStream fis = null;
                try {
                    fis = new FileInputStream(new File(file, "META-INF/MANIFEST.MF"));
                    manifest= new Manifest(fis);
                } finally {  // close the input stream
                    fis.close();
                }
            } else {// a jar
                JarFile jarFile = new JarFile(file);
                try {
                    manifest = jarFile.getManifest();
                } finally {  // close the JarFile
                    jarFile.close();
                }
            }        
         }
        
         return manifest;
      }
      // It is ok to barf at any time in the above, means no manifest
      catch (Exception ignored) { return null;}
   }
 
 
Regards
 
Qingxian Wang


This e-mail and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom it is addressed. If you have received this e-mail in error you must not copy, distribute or take any action in reliance on it. Please notify the sender by e-mail or telephone.

We utilise an anti-virus system and therefore any files sent via e-mail will have been checked for known viruses. You are however advised to run your own virus check before opening any attachments received as we will not in any event accept any liability whatsoever once an e-mail and/or any attachment is received. Any views expressed by an individual within this e-mail do not necessarily reflect the views of Systems Union Group plc or any of its subsidiary companies.


Reply via email to