-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Mark,
On 12/22/2009 4:33 AM, Mark Thomas wrote:
> On 22/12/2009 08:58, Vishwa. K wrote:
>> thanks Mark,
>> But I was wondering why Tomcat did not remove the complete directory
>> itself.(softlink target directory). It removed only the nested files in it
>> during undeployment of the application.
>
> No idea. Permissions maybe? If that isn't it you'd have to look at the
> source code to find an explanation.
I'm guessing that something like this happens:
File layout:
webapps/symlink -> /foo/bar
/foo/bar/dir_a
/foo/bar/dir_b
/foo/bar/file_a
Tomcat tries to delete webapps/symlink recursively. The filesystem (or
maybe java.io.File) descends into webapps/symlink which points to
/foo/bar and collects the files in there (dir_a, dir_b, file_a) and
proceeds to delete them recursively. Once dir_a, dir_b, and file_a are
deleted, the recursion jumps back to the parent (which is
webapps/symlink, NOT /foo/bar) and deletes that.
Thus, the link is deleted but not the target directory.
You can confirm this behavior by running these commands:
mkdir -p foo/bar/dir_a
touch foo/bar/dir_a/file_a
mkdir -p foo/bar/dir_b
touch foo/bar/dir_b/file_a
touch foo/bar/file_a
ln -s foo/bar symlink
And then running this program with "symlink" as the first command-line
argument:
import java.io.File;
public class Rm
{
public static void main(String[] args)
{
File file = new File(args[0]);
delete(file);
}
public static boolean delete(File file)
{
boolean success = true;
if(file.isDirectory())
{
File[] children = file.listFiles();
for(int i=0; i<children.length; ++i)
success &= delete(children[i]);
success &= file.delete();
}
return success & file.delete();
}
}
- -chris
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iEYEARECAAYFAksyO/oACgkQ9CaO5/Lv0PArFwCgijzHTUv0yaPn4kIBt+MPRkxt
YUUAniKGZgLGWdKyn6tn4eHzYUK4YPmI
=XUd+
-----END PGP SIGNATURE-----
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]