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);
