In chasing down
JBPAPP-171 I found that JBoss' deployment process tends to lock files in the deploy dir on Windows. (The farm dir as well, which is just a specialized form of deploy dir.)
Traced it down to the EJB3Deployer.accepts() functionality, particularly the hasEjbAnnotation() method. The first line in that method
Iterator it = ArchiveBrowser.getBrowser(di.url, new ClassFileFilter());
is causing the original jar in deploy to be scanned for annotations, rather than the copy in the server/.../tmp dir. That scan results in Windows filesystem locks on the deploy dir jar. Not always but seems like roughly 1/2 the time.
Changing that line to the following made the problem go away:
Iterator it = ArchiveBrowser.getBrowser(di.localUrl, new ClassFileFilter());
di.localUrl points to the tmp dir copy of the deployment.