Thanks Dain,

I will make the suggested changes and submit another patch.

On 1/8/07, Dain Sundstrom <[EMAIL PROTECTED]> wrote:

This is a good start but I see some bugs :)

comments in line...

-dain

On Jan 7, 2007, at 12:59 PM, [EMAIL PROTECTED] wrote:

> +            JarInputStream jis = new JarInputStream(new
> FileInputStream(jarFile));
> +            File tempJar = File.createTempFile("temp", "jar");

The temp file should be created in the same directory as the final
original file because on some platforms the temp directory is on a
separate drive and rename only works when the source and target file
are on the same drive.

> +            JarOutputStream jos = new JarOutputStream(new
> FileOutputStream(tempJar));
> +            JarEntry nextJarEntry = null;
> +            while ((nextJarEntry = jis.getNextJarEntry()) != null) {
> +                jos.putNextEntry(nextJarEntry);
> +            }

You need to copy the contents from jis to jos after putNextEntry.

> +            jis.close();
> +            jos.putNextEntry(new JarEntry(file));
> +            FileInputStream fis = new FileInputStream(file);
> +            for (int c = fis.read(); c != -1; c = fis.read()) {
> +                jos.write(c);
> +            }

Byte at a time is quite slow.  Instead I suggest using 4k blocks.

> +            fis.close();
> +            jos.close();

Close should be in a finally block.

> +            File oldJar = new File(jarFile);
> +            oldJar.delete();
> +            tempJar.renameTo(oldJar);

It is safer to move the old file aside, rename the temp jar, then
delete the old file.  That way if the rename fails, you can back it out.

> +        } catch (FileNotFoundException e) {
> +            throw new OpenEJBException(messages.format("file.
> 0003", file, jarFile, e.getMessage()));
> +        } catch (IOException e) {
> +            throw new OpenEJBException(messages.format("file.
> 0003", file, jarFile, e.getMessage()));
>          }
>
>      }




--
Karan Malhi

Reply via email to