Author: rmannibucau Date: Tue Oct 29 06:22:47 2013 New Revision: 1536594 URL: http://svn.apache.org/r1536594 Log: no need of websockets for tomee embedded by default + prefixing tomee realm objectname to avoid conflicts
Modified: tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/websocket/JavaEEDefaultServerEnpointConfigurator.java Modified: tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java?rev=1536594&r1=1536593&r2=1536594&view=diff ============================================================================== --- tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java (original) +++ tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java Tue Oct 29 06:22:47 2013 @@ -49,6 +49,7 @@ import org.apache.catalina.ha.CatalinaCl import org.apache.catalina.ha.tcp.SimpleTcpCluster; import org.apache.catalina.loader.VirtualWebappLoader; import org.apache.catalina.loader.WebappLoader; +import org.apache.catalina.realm.RealmBase; import org.apache.catalina.session.StandardManager; import org.apache.catalina.startup.Constants; import org.apache.catalina.startup.ContextConfig; @@ -141,7 +142,6 @@ import javax.servlet.jsp.JspFactory; import javax.sql.DataSource; import javax.transaction.TransactionManager; import javax.transaction.TransactionSynchronizationRegistry; -import javax.websocket.server.ServerEndpointConfig; import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -160,6 +160,7 @@ import java.util.Map; import java.util.Properties; import java.util.Set; import java.util.TreeMap; +import java.util.concurrent.ConcurrentHashMap; import java.util.jar.JarEntry; import java.util.jar.JarFile; @@ -206,6 +207,8 @@ public class TomcatWebAppBuilder impleme } } + private final Map<ClassLoader, InstanceManager> instanceManagers = new ConcurrentHashMap<ClassLoader, InstanceManager>(); + /** * Context information for web applications */ @@ -315,19 +318,22 @@ public class TomcatWebAppBuilder impleme deploymentLoader = new DeploymentLoader(); } - private static void forceEEServerEndpointConfigurator() { + private void forceEEServerEndpointConfigurator() { // by reflection cause // 1- tomcat algorithm uses ServiceLoader.next() so no real way to ensure it is our META-INF/services/... // 2- avoids getResources which can be slow depending the server config try { - final Field f = ServerEndpointConfig.Configurator.class.getDeclaredField("defaultImpl"); + final Class<?> clazz = Thread.currentThread().getContextClassLoader().loadClass("javax.websocket.server.ServerEndpointConfig$Configurator"); + final Field f = clazz.getDeclaredField("defaultImpl"); boolean acc = f.isAccessible(); f.setAccessible(true); try { - f.set(null, new JavaEEDefaultServerEnpointConfigurator()); + f.set(null, new JavaEEDefaultServerEnpointConfigurator(instanceManagers)); } finally { f.setAccessible(acc); } + } catch (final ClassNotFoundException cnfe) { + // no-op } catch (final Exception e) { logger.warning("Can't set TomEE ServerEndpointConfig$Configurator", e); } @@ -372,6 +378,9 @@ public class TomcatWebAppBuilder impleme protected Realm tomeeRealm(final Realm realm) { final TomEERealm trealm = new TomEERealm(); + if (RealmBase.class.isInstance(realm)) { + trealm.setRealmPath("/tomee/" + RealmBase.class.cast(realm).getRealmPath()); + } trealm.addRealm(realm); return trealm; } @@ -1323,7 +1332,7 @@ public class TomcatWebAppBuilder impleme final JavaeeInstanceManager instanceManager = new JavaeeInstanceManager(webContext, standardContext); standardContext.setInstanceManager(instanceManager); - JavaEEDefaultServerEnpointConfigurator.registerInstanceManager(classLoader, instanceManager); + instanceManagers.put(classLoader, instanceManager); standardContext.getServletContext().setAttribute(InstanceManager.class.getName(), standardContext.getInstanceManager()); } catch (Exception e) { @@ -1832,8 +1841,11 @@ public class TomcatWebAppBuilder impleme logger.error("error stopping classloader of webapp " + standardContext.getName(), e); } ClassLoaderUtil.cleanOpenJPACache(old); - JavaEEDefaultServerEnpointConfigurator.unregisterInstanceManager(old); + instanceManagers.remove(old); + } else if (standardContext.getLoader() != null && standardContext.getLoader().getClassLoader() != null) { + instanceManagers.remove(standardContext.getLoader().getClassLoader()); } + if (contextInfo != null && (contextInfo.appInfo == null || contextInfo.appInfo.webAppAlone)) { removeContextInfo(standardContext); } Modified: tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/websocket/JavaEEDefaultServerEnpointConfigurator.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/websocket/JavaEEDefaultServerEnpointConfigurator.java?rev=1536594&r1=1536593&r2=1536594&view=diff ============================================================================== --- tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/websocket/JavaEEDefaultServerEnpointConfigurator.java (original) +++ tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/websocket/JavaEEDefaultServerEnpointConfigurator.java Tue Oct 29 06:22:47 2013 @@ -20,14 +20,17 @@ import org.apache.tomcat.InstanceManager import org.apache.tomcat.websocket.server.DefaultServerEndpointConfigurator; import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; public class JavaEEDefaultServerEnpointConfigurator extends DefaultServerEndpointConfigurator { - private static final Map<ClassLoader, InstanceManager> INSTANCE_MANAGERS = new ConcurrentHashMap<ClassLoader, InstanceManager>(); + private final Map<ClassLoader, InstanceManager> instanceManagers; + + public JavaEEDefaultServerEnpointConfigurator(final Map<ClassLoader, InstanceManager> instanceManagers) { + this.instanceManagers = instanceManagers; + } @Override public <T> T getEndpointInstance(final Class<T> clazz) throws InstantiationException { - final InstanceManager instanceManager = INSTANCE_MANAGERS.get(clazz.getClassLoader()); + final InstanceManager instanceManager = instanceManagers.get(clazz.getClassLoader()); if (instanceManager == null) { return super.getEndpointInstance(clazz); } @@ -41,12 +44,4 @@ public class JavaEEDefaultServerEnpointC throw new InstantiationException(e.getMessage()); } } - - public static void registerInstanceManager(final ClassLoader loader, final InstanceManager manager) { - INSTANCE_MANAGERS.put(loader, manager); - } - - public static void unregisterInstanceManager(final ClassLoader loader) { - INSTANCE_MANAGERS.remove(loader); - } }