You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2014/07/25 00:40:37 UTC

svn commit: r1613316 [3/3] - in /tomee/tomee/trunk: ./ container/openejb-core/src/main/java/org/apache/openejb/assembler/ container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ container/openejb-core/src/main/java/org/apache/openejb...

Modified: tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/TomEEJarScanner.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/TomEEJarScanner.java?rev=1613316&r1=1613315&r2=1613316&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/TomEEJarScanner.java (original)
+++ tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/TomEEJarScanner.java Thu Jul 24 22:40:36 2014
@@ -19,252 +19,43 @@
 
 package org.apache.tomee.loader;
 
-import org.apache.catalina.Context;
-import org.apache.catalina.Globals;
-import org.apache.catalina.Lifecycle;
-import org.apache.catalina.LifecycleEvent;
-import org.apache.catalina.startup.TldConfig;
-import org.apache.juli.logging.Log;
-import org.apache.juli.logging.LogFactory;
-import org.apache.openejb.OpenEJBException;
-import org.apache.openejb.OpenEJBRuntimeException;
-import org.apache.openejb.config.TldScanner;
-import org.apache.openejb.loader.IO;
-import org.apache.openejb.util.reflection.Reflections;
-import org.apache.tomcat.JarScannerCallback;
-import org.apache.tomcat.util.descriptor.XmlErrorHandler;
-import org.apache.tomcat.util.res.StringManager;
-import org.apache.tomcat.util.scan.Constants;
+import org.apache.openejb.config.NewLoaderLogic;
+import org.apache.tomcat.JarScanFilter;
+import org.apache.tomcat.JarScanType;
 import org.apache.tomcat.util.scan.StandardJarScanner;
+import org.apache.xbean.finder.filter.Filter;
+import org.apache.xbean.finder.filter.Filters;
 
-import javax.servlet.ServletContext;
-import java.io.InputStream;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Method;
-import java.lang.reflect.Proxy;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.Map;
-import java.util.Set;
-
-// we don't respect the StandardJarScanner contract for default callbacks (FragmentJarScannerCallback and TldJarScannerCallback)
-// but that's our default, this is overridable if needed
-@SuppressWarnings("unchecked")
+// todo: share common tld parsing, tomcat has a built in method for it, ensure we reuse it
 public class TomEEJarScanner extends StandardJarScanner {
-
-    private static final Log log = LogFactory.getLog(StandardJarScanner.class);
-
-    /**
-     * The string resources for this package.
-     */
-    private static final StringManager sm = StringManager.getManager(Constants.Package);
-
-    private static final Method tldConfigScanStream;
-    private static final Field tldConfig;
-    private static final Method tldLocationScanStream;
-    private static final Field tldLocationCache;
-
-    // tld of the server
-    private static final Set<URL> SERVER_URLS;
-
-    // TldConfig of the server (common)
-    private static final Set<String> TAG_LIB_URIS;
-    private static final ArrayList<String> LISTENERS;
-
-    // TldLocationCache of the server (common)
-    private static final Hashtable<String, Object> MAPPINGS;
-
-    private static final Thread SERVER_SCANNING_THREAD;
-
-    static {
-        try {
-            final ClassLoader loader = TomEEJarScanner.class.getClassLoader();
-
-            tldConfigScanStream = TldConfig.class.getDeclaredMethod("tldScanStream", InputStream.class);
-            tldConfigScanStream.setAccessible(true);
-            tldConfig = loader.loadClass("org.apache.catalina.startup.TldConfig$TldJarScannerCallback")
-                .getDeclaredFields()[0]; // there is a unique field and this way it is portable
-            //.getDeclaredField("this$0");
-            tldConfig.setAccessible(true);
-
-            final Class<?> tldLocationsCache = loader.loadClass("org.apache.jasper.compiler.TldLocationsCache");
-            tldLocationScanStream = tldLocationsCache.getDeclaredMethod("tldScanStream", String.class, String.class, InputStream.class);
-            tldLocationScanStream.setAccessible(true);
-            tldLocationCache = loader.loadClass("org.apache.jasper.compiler.TldLocationsCache$TldJarScannerCallback")
-                .getDeclaredFields()[0];
-            tldLocationCache.setAccessible(true);
-
-            // init server cache
-            SERVER_URLS = TldScanner.scan(TomEEJarScanner.class.getClassLoader());
-
-            final Context fakeWebApp = (Context) Proxy.newProxyInstance(loader, new Class<?>[]{Context.class},
-                new InvocationHandler() {
-                    @Override
-                    public Object invoke(final Object proxy, final Method method, final Object[] args) throws Throwable {
-                        if ("getTldNamespaceAware".equals(method.getName())) {
-                            return Globals.STRICT_SERVLET_COMPLIANCE;
-                        } else if ("getTldValidation".equals(method.getName())) {
-                            return Globals.STRICT_SERVLET_COMPLIANCE;
-                        } else if ("getXmlValidation".equals(method.getName())) {
-                            return Globals.STRICT_SERVLET_COMPLIANCE;
-                        } else if ("getXmlBlockExternal".equals(method.getName())) {
-                            return Globals.IS_SECURITY_ENABLED;
-                        }
-                        return null;
-                    }
-                }
-            );
-            final TldConfig config = new TldConfig();
-            config.lifecycleEvent(new LifecycleEvent(fakeWebApp, Lifecycle.AFTER_INIT_EVENT, null));
-
-            final Object fakeSc = Proxy.newProxyInstance(loader, new Class<?>[]{ServletContext.class}, new InvocationHandler() {
-                @Override
-                public Object invoke(final Object proxy, final Method method, final Object[] args) throws Throwable {
-                    return null;
-                }
-            });
-            final Object locationsCacheInstance = tldLocationsCache.getConstructor(ServletContext.class).newInstance(fakeSc);
-
-            if (!SERVER_URLS.isEmpty()) {
-                SERVER_SCANNING_THREAD = new Thread() {
-                    @Override
-                    public void run() {
-                        for (final URL current : SERVER_URLS) {
-                            tldConfig(config, current);
-                            tldLocationCache(locationsCacheInstance, current);
-                        }
-                    }
-                };
-                SERVER_SCANNING_THREAD.setName("TomEE-server-tld-reading");
-                SERVER_SCANNING_THREAD.setDaemon(true);
-                SERVER_SCANNING_THREAD.start();
-            } else {
-                SERVER_SCANNING_THREAD = null;
-            }
-
-            TAG_LIB_URIS = (Set<String>) Reflections.get(config, "taglibUris");
-            LISTENERS = (ArrayList<String>) Reflections.get(config, "listeners");
-            MAPPINGS = (Hashtable<String, Object>) Reflections.get(locationsCacheInstance, "mappings");
-        } catch (final Exception e) {
-            throw new OpenEJBRuntimeException(e);
-        }
+    public TomEEJarScanner() {
+        setJarScanFilter(new TomEEFilter(null));
     }
 
-    @Override
-    public void scan(final ServletContext context, final ClassLoader classLoader, final JarScannerCallback callback, final Set<String> jarsToIgnore) {
-        if ("FragmentJarScannerCallback".equals(callback.getClass().getSimpleName())) {
-            final EmbeddedJarScanner embeddedJarScanner = new EmbeddedJarScanner();
-            embeddedJarScanner.scan(context, classLoader, callback, jarsToIgnore);
-        } else if ("TldJarScannerCallback".equals(callback.getClass().getSimpleName())) {
-
-            final String cbName = callback.getClass().getName();
-            if (cbName.equals(tldConfig.getDeclaringClass().getName())) {
-                ensureServerTldsScanned();
-                try {
-                    final TldConfig config;
-                    try {
-                        config = (TldConfig) tldConfig.get(callback);
-                    } catch (final IllegalAccessException e) {
-                        throw new OpenEJBException("scan with default algo");
-                    }
-
-                    final Set<URL> urls = TldScanner.scan(classLoader != null ? classLoader : context.getClassLoader());
-                    for (final URL url : urls) {
-                        if (!SERVER_URLS.contains(url)) {
-                            tldConfig(config, url);
-                        }
-                    }
-
-                    // add already scanned ones
-                    for (final String uri : TAG_LIB_URIS) {
-                        config.addTaglibUri(uri);
-                    }
-                    for (final String listener : LISTENERS) {
-                        if (!"org.apache.myfaces.webapp.StartupServletContextListener".equals(listener)) { // done elsewhere
-                            config.addApplicationListener(listener);
-                        }
-                    }
-                } catch (final OpenEJBException oe) {
-                    log.error(oe.getMessage(), oe);
-                }
-            } else if (cbName.equals(tldLocationCache.getDeclaringClass().getName())) {
-                ensureServerTldsScanned();
-                try {
-                    final Object tldLocationsCache;
-                    try {
-                        tldLocationsCache = tldLocationCache.get(callback);
-                    } catch (final IllegalAccessException e) {
-                        throw new OpenEJBException("scan with default algo");
-                    }
-
-                    final Set<URL> urls = TldScanner.scan(context.getClassLoader());
-                    for (final URL url : urls) {
-                        if (!SERVER_URLS.contains(url)) {
-                            tldLocationCache(tldLocationsCache, url);
-                        }
-                    }
-
-                    // add server ones
-                    final Hashtable<String, Object> mappings = (Hashtable<String, Object>) Reflections.get(tldLocationsCache, "mappings");
-                    mappings.putAll((Map<String, Object>) MAPPINGS.clone());
-                } catch (final OpenEJBException oe) {
-                    log.error(oe.getMessage(), oe);
-                }
-            } else {
-                log.debug("This callback " + callback + " is not known and perf optim will not be available");
-            }
-        } else {
-            log.info("Not expected scanner: " + callback);
-            super.scan(context, classLoader, callback, jarsToIgnore);
-        }
+    private void configureFilter(final JarScanFilter jarScanFilter) {
+        setJarScanFilter(new TomEEFilter(jarScanFilter));
     }
 
-    private void ensureServerTldsScanned() {
-        if (SERVER_SCANNING_THREAD == null) {
-            return;
-        }
-
-        try {
-            SERVER_SCANNING_THREAD.join();
-        } catch (final InterruptedException e) {
-            throw new OpenEJBRuntimeException(e);
+    @Override
+    public void setJarScanFilter(final JarScanFilter jarScanFilter) {
+        super.setJarScanFilter(jarScanFilter);
+        if (!TomEEFilter.class.isInstance(jarScanFilter)) {
+            configureFilter(jarScanFilter);
         }
     }
 
-    private static void tldLocationCache(final Object tldLocationsCache, final URL url) {
-        String resource = url.toString();
-        String entry = null;
-
-        if (resource.contains("!/")) {
-            final String path = url.getPath();
-            final int endIndex = path.indexOf("!/");
-            resource = path.substring(0, endIndex);
-            entry = path.substring(endIndex + 2, path.length());
+    private static class TomEEFilter implements JarScanFilter {
+        private static final Filter INCLUDE = Filters.tokens("openejb-jstl-1.2", "myfaces-impl", "javax.faces-2.", "spring-security-taglibs", "spring-webmvc");
+        private final JarScanFilter delegate;
+
+        public TomEEFilter(final JarScanFilter jarScanFilter) {
+            this.delegate = jarScanFilter;
         }
 
-        InputStream is = null;
-        try {
-            is = url.openStream();
-            tldLocationScanStream.invoke(tldLocationsCache, resource, entry, is);
-        } catch (final Exception e) {
-            log.warn(sm.getString("jarScan.webinflibFail", url.toExternalForm()), e);
-        } finally {
-            IO.close(is);
-        }
-    }
-
-    private static void tldConfig(final TldConfig config, final URL current) {
-        InputStream is = null;
-        try {
-            is = current.openStream();
-            final XmlErrorHandler handler = (XmlErrorHandler) tldConfigScanStream.invoke(config, is);
-            handler.logFindings(log, current.toExternalForm());
-        } catch (final Exception e) {
-            log.warn(sm.getString("jarScan.webinflibFail", current), e);
-        } finally {
-            IO.close(is);
+        @Override
+        public boolean check(final JarScanType jarScanType, final String jarName) {
+            return INCLUDE.accept(jarName)
+                || (!NewLoaderLogic.skip(jarName) && (delegate == null || delegate.check(jarScanType, jarName)));
         }
     }
 }

Modified: tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/TomcatHelper.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/TomcatHelper.java?rev=1613316&r1=1613315&r2=1613316&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/TomcatHelper.java (original)
+++ tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/TomcatHelper.java Thu Jul 24 22:40:36 2014
@@ -141,13 +141,8 @@ public class TomcatHelper {
      */
     public static boolean hasRole(final Realm realm, final Principal tomcatPrincipal, final String logicalRole) {
         try {
-            if (isTomcat7()) {
-                final Method method = realm.getClass().getMethod("hasRole", Wrapper.class, Principal.class, String.class);
-                return (Boolean) method.invoke(realm, null, tomcatPrincipal, logicalRole);
-            } else {
-                final Method method = realm.getClass().getMethod("hasRole", Principal.class, String.class);
-                return (Boolean) method.invoke(realm, tomcatPrincipal, logicalRole);
-            }
+            final Method method = realm.getClass().getMethod("hasRole", Wrapper.class, Principal.class, String.class);
+            return (Boolean) method.invoke(realm, null, tomcatPrincipal, logicalRole);
         } catch (final Exception e) {
             e.printStackTrace();
         }

Copied: tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/log/Log4jLog.java (from r1612877, tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/log/Log4jLog.java)
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/log/Log4jLog.java?p2=tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/log/Log4jLog.java&p1=tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/log/Log4jLog.java&r1=1612877&r2=1613316&rev=1613316&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/log/Log4jLog.java (original)
+++ tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/log/Log4jLog.java Thu Jul 24 22:40:36 2014
@@ -24,8 +24,8 @@ import org.apache.log4j.Logger;
 public class Log4jLog implements Log {
     private final Logger log;
 
-    public Log4jLog(final Logger log) {
-        this.log = log;
+    public Log4jLog(final String logger) {
+        this.log = Logger.getLogger(logger);
     }
 
     @Override

Copied: tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/log/Slf4jLog.java (from r1612877, tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/log/Slf4jLog.java)
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/log/Slf4jLog.java?p2=tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/log/Slf4jLog.java&p1=tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/log/Slf4jLog.java&r1=1612877&r2=1613316&rev=1613316&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/log/Slf4jLog.java (original)
+++ tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/log/Slf4jLog.java Thu Jul 24 22:40:36 2014
@@ -19,12 +19,13 @@ package org.apache.tomee.loader.log;
 
 import org.apache.juli.logging.Log;
 import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class Slf4jLog implements Log {
     private final Logger log;
 
-    public Slf4jLog(final Logger log) {
-        this.log = log;
+    public Slf4jLog(final String logger) {
+        this.log = LoggerFactory.getLogger(logger);
     }
 
     @Override

Modified: tomee/tomee/trunk/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEMyFacesContainerInitializer.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEMyFacesContainerInitializer.java?rev=1613316&r1=1613315&r2=1613316&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEMyFacesContainerInitializer.java (original)
+++ tomee/tomee/trunk/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEMyFacesContainerInitializer.java Thu Jul 24 22:40:36 2014
@@ -77,7 +77,8 @@ public class TomEEMyFacesContainerInitia
                         Level.WARNING, "No mappings of FacesServlet found. Abort initializing MyFaces."),
                 Level.WARNING, "No mappings of FacesServlet found. Abort destroy MyFaces."));
 
-        if ((classes != null && !classes.isEmpty()) || isFacesServletPresent(ctx) || isFacesConfigPresent(ctx)) {
+        final boolean facesServletPresent = isFacesServletPresent(ctx);
+        if (facesServletPresent || isFacesConfigPresent(ctx)) {
             // we found a faces-config.xml or some classes so let's delegate to myfaces
 
             // since we don't want to call isFacesConfigPresent again (it scan all jars!!!!)
@@ -104,7 +105,9 @@ public class TomEEMyFacesContainerInitia
             }
 
             // finally delegating begin sure we'll not call isFacesConfigPresent
-            delegate.onStartup(classes, ctx);
+            if (!facesServletPresent) {
+                delegate.onStartup(classes, ctx);
+            } // else already done since there is the servlet
         }
     }
 

Modified: tomee/tomee/trunk/tomee/tomee-webaccess/pom.xml
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webaccess/pom.xml?rev=1613316&r1=1613315&r2=1613316&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webaccess/pom.xml (original)
+++ tomee/tomee/trunk/tomee/tomee-webaccess/pom.xml Thu Jul 24 22:40:36 2014
@@ -79,7 +79,7 @@
     </dependency>
     <dependency>
       <groupId>org.apache.tomcat</groupId>
-      <artifactId>tomcat7-websocket</artifactId>
+      <artifactId>tomcat-websocket</artifactId>
       <version>${tomcat.version}</version>
       <scope>test</scope>
     </dependency>

Modified: tomee/tomee/trunk/tomee/tomee-webservices/src/main/java/org/apache/tomee/webservices/TomcatWsRegistry.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webservices/src/main/java/org/apache/tomee/webservices/TomcatWsRegistry.java?rev=1613316&r1=1613315&r2=1613316&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webservices/src/main/java/org/apache/tomee/webservices/TomcatWsRegistry.java (original)
+++ tomee/tomee/trunk/tomee/tomee-webservices/src/main/java/org/apache/tomee/webservices/TomcatWsRegistry.java Thu Jul 24 22:40:36 2014
@@ -30,15 +30,15 @@ import org.apache.catalina.authenticator
 import org.apache.catalina.connector.Connector;
 import org.apache.catalina.core.StandardContext;
 import org.apache.catalina.core.StandardServer;
-import org.apache.catalina.deploy.LoginConfig;
-import org.apache.catalina.deploy.SecurityCollection;
-import org.apache.catalina.deploy.SecurityConstraint;
 import org.apache.openejb.assembler.classic.ServletInfo;
 import org.apache.openejb.assembler.classic.WebAppBuilder;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.server.httpd.HttpListener;
 import org.apache.openejb.server.webservices.WsRegistry;
 import org.apache.openejb.server.webservices.WsServlet;
+import org.apache.tomcat.util.descriptor.web.LoginConfig;
+import org.apache.tomcat.util.descriptor.web.SecurityCollection;
+import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
 import org.apache.tomee.catalina.IgnoredStandardContext;
 import org.apache.tomee.catalina.OpenEJBValve;
 import org.apache.tomee.catalina.TomEERuntimeException;
@@ -53,8 +53,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
 
-import static org.apache.tomee.catalina.BackportUtil.getServlet;
-
 public class TomcatWsRegistry implements WsRegistry {
     private static final String WEBSERVICE_SUB_CONTEXT = forceSlash(SystemInstance.get().getOptions().get("tomee.jaxws.subcontext", "/webservices"));
 
@@ -121,7 +119,7 @@ public class TomcatWsRegistry implements
         // for Pojo web services, we need to change the servlet class which is the service implementation
         // by the WsServler class
         wrapper.setServletClass(WsServlet.class.getName());
-        if (getServlet(wrapper) != null) {
+        if (wrapper.getServlet() != null) {
             wrapper.load();
             wrapper.unload();
         }
@@ -384,7 +382,7 @@ public class TomcatWsRegistry implements
             path = "/" + path;
         }
 
-        if (TomcatHelper.isTomcat7() && TomcatHelper.isStopping()) {
+        if (TomcatHelper.isStopping()) {
             return;
         }
 

Modified: tomee/tomee/trunk/utils/webdeployer/src/main/java/org/apache/tomee/catalina/deployer/WebappDeployer.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/utils/webdeployer/src/main/java/org/apache/tomee/catalina/deployer/WebappDeployer.java?rev=1613316&r1=1613315&r2=1613316&view=diff
==============================================================================
--- tomee/tomee/trunk/utils/webdeployer/src/main/java/org/apache/tomee/catalina/deployer/WebappDeployer.java (original)
+++ tomee/tomee/trunk/utils/webdeployer/src/main/java/org/apache/tomee/catalina/deployer/WebappDeployer.java Thu Jul 24 22:40:36 2014
@@ -18,7 +18,6 @@ package org.apache.tomee.catalina.deploy
 
 import java.io.File;
 import java.util.Collection;
-import java.util.Iterator;
 import java.util.Properties;
 import javax.ejb.Lock;
 import javax.ejb.LockType;
@@ -97,9 +96,6 @@ public class WebappDeployer implements D
 			if (location == null) {
 				location = properties.getProperty(FILENAME);
 			}
-			if (properties == null) {
-				properties = new Properties();
-			}
 
 			final File source = new File(location);
 			final File destination = new File(System.getProperty(OPENEJB_HOME) + File.separator + WEBAPPS + File.separator + source.getName());
@@ -140,17 +136,13 @@ public class WebappDeployer implements D
 
 	private AppInfo findAppInfo(final String... paths) {
 		final Collection<AppInfo> deployedApps = getDeployedApps();
-
-		final Iterator<AppInfo> iterator = deployedApps.iterator();
-		while (iterator.hasNext()) {
-			final AppInfo appInfo = iterator.next();
-			for (final String path : paths) {
-				if (appInfo.path.equals(path)) {
-					return appInfo;
-				}
-			}
-		}
-		
+        for (final AppInfo appInfo : deployedApps) {
+            for (final String path : paths) {
+                if (appInfo.path.equals(path)) {
+                    return appInfo;
+                }
+            }
+        }
 		return null;
 	}
 
@@ -171,7 +163,7 @@ public class WebappDeployer implements D
 
 	private void checkWebapp(final String webappName) {
 		try {
-			final ContextName cn = new ContextName(webappName);
+			final ContextName cn = new ContextName(webappName, true);
 
 			final String name = "Catalina:type=Deployer,host=localhost";
 			final ObjectName oname = new ObjectName(name);