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 2013/10/29 12:04:13 UTC

svn commit: r1536659 - /tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/EmbeddedJarScanner.java

Author: rmannibucau
Date: Tue Oct 29 11:04:12 2013
New Revision: 1536659

URL: http://svn.apache.org/r1536659
Log:
setting webfragment of tomcat7-websocket jar manually since it is buggy in tomcat 7.0.47 - TODO: see if we remove the hack or keep it for speed in next versions

Modified:
    tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/EmbeddedJarScanner.java

Modified: tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/EmbeddedJarScanner.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/EmbeddedJarScanner.java?rev=1536659&r1=1536658&r2=1536659&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/EmbeddedJarScanner.java (original)
+++ tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/EmbeddedJarScanner.java Tue Oct 29 11:04:12 2013
@@ -49,6 +49,8 @@ public class EmbeddedJarScanner implemen
      */
     private static final StringManager sm = StringManager.getManager(Constants.Package);
 
+    private static final String FRAGMENT_CALLBACK = "org.apache.catalina.startup.ContextConfig$FragmentJarScannerCallback";
+
     /**
      * Scan the provided ServletContext and classloader for JAR files. Each JAR
      * file found will be passed to the callback handler to be processed.
@@ -71,7 +73,7 @@ public class EmbeddedJarScanner implemen
             // scan = scan.exclude(".*/WEB-INF/lib/.*"); // doing it simply prevent ServletContainerInitializer to de discovered
 
             for (final URL url : scan) {
-                if (isWebInfClasses(url) && !"org.apache.catalina.startup.ContextConfig$FragmentJarScannerCallback".equals(callback.getClass().getName())) { // we need all fragments to let SCI working
+                if (isWebInfClasses(url) && !FRAGMENT_CALLBACK.equals(callback.getClass().getName())) { // we need all fragments to let SCI working
                     continue;
                 }
 
@@ -127,7 +129,22 @@ public class EmbeddedJarScanner implemen
                 if (urlStr.endsWith(Constants.JAR_EXT)) {
 
                     final URL jarURL = new URL("jar:" + urlStr + "!/");
-                    callback.scan((JarURLConnection) jarURL.openConnection());
+
+                    final String fileName = URLs.toFile(jarURL).getName();
+                    // bug in tomcat 7.0.47 so we need to handle it manually
+                    // TODO: remove this hack when upgrading to Tomcat 7.0.48
+                    if (fileName.contains("tomcat7-websocket") && FRAGMENT_CALLBACK.equals(callback.getClass().getName())) {
+                        final WebXml fragment = new WebXml();
+                        fragment.setName("org_apache_tomcat_websocket");
+                        fragment.setDistributable(true);
+                        fragment.setMetadataComplete(true);
+                        fragment.setVersion("3.0");
+                        fragment.setURL(jarURL);
+                        fragment.setJarName(fileName);
+                        Map.class.cast(Reflections.get(callback, "fragments")).put(fragment.getName(), fragment);
+                    } else {
+                        callback.scan(JarURLConnection.class.cast(jarURL.openConnection()));
+                    }
 
                 } else {