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