Index: tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/TomcatDeployment.java =================================================================== --- tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/TomcatDeployment.java (revision 111633) +++ tomcat/src/main/java/org/jboss/web/tomcat/service/deployers/TomcatDeployment.java (working copy) @@ -37,6 +37,8 @@ import javax.management.MBeanServer; import javax.management.ObjectName; import javax.naming.Context; +import javax.naming.InitialContext; +import javax.naming.NamingException; import org.apache.catalina.Container; import org.apache.catalina.Engine; @@ -380,6 +382,10 @@ public void lifecycleEvent(LifecycleEvent event) { + if(event.getType().equals(StandardContext.DESTROY_EVENT)) + { + unbindSecurityDomainJndiBindings(webApp); + } if (event.getType().equals(StandardContext.AFTER_START_EVENT)) { @@ -455,6 +461,36 @@ } } + private void unbindSecurityDomainJndiBindings(WebApplication webApplication) + { + InitialContext initialContext = null; + Thread currentThread = Thread.currentThread(); + ClassLoader currentLoader = currentThread.getContextClassLoader(); + try + { + currentThread.setContextClassLoader(webApplication.getMetaData().getENCLoader()); + initialContext = new InitialContext(); + final Context envCtx = (Context) initialContext.lookup("java:comp"); + unlinkSecurityDomain(webApplication.getMetaData().getSecurityDomain(), envCtx); + } catch (final NamingException e) + { + log.error(e.getMessage(), e); + } + finally + { + if (initialContext != null) + { + try + { + initialContext.close(); + } catch (final NamingException ignore) + { + log.warn(ignore.getMessage(), ignore); + } + } + currentThread.setContextClassLoader(currentLoader); + } + } } public Loader getWebLoader(DeploymentUnit unit, JBossWebMetaData metaData, ClassLoader loader, URL rl, TomcatInjectionContainer injectionContainer) throws MalformedURLException @@ -524,7 +560,6 @@ } } performUndeployInternal(warInfo, hostName, warUrl); - } protected void performUndeployInternal(WebApplication warInfo, String hostName, String warUrlStr) throws Exception Index: server/src/main/java/org/jboss/web/deployers/AbstractWarDeployment.java =================================================================== --- server/src/main/java/org/jboss/web/deployers/AbstractWarDeployment.java (revision 111633) +++ server/src/main/java/org/jboss/web/deployers/AbstractWarDeployment.java (working copy) @@ -839,6 +839,16 @@ Util.bind(javaCompCtx, "env/security/security-domain", new LinkRef(securityDomain)); Util.bind(javaCompCtx, "env/security/subject", new LinkRef(securityDomain + "/subject")); } + + protected void unlinkSecurityDomain(String securityDomain, Context javaCompCtx) throws NamingException + { + log.debug("UnLinking security/securityMgr from JNDI "); + Util.unbind(javaCompCtx, "env/security/securityMgr"); + Util.unbind(javaCompCtx, "env/security/realmMapping"); + Util.unbind(javaCompCtx, "env/security/authorizationMgr"); + Util.unbind(javaCompCtx, "env/security/security-domain"); + Util.unbind(javaCompCtx, "env/security/subject"); + } /** * A utility method that searches the given loader for the resources: