You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@drill.apache.org by ja...@apache.org on 2014/11/20 17:44:39 UTC

[03/12] incubator-drill git commit: DRILL-1591, DRILL-1676: Move javascript resources to local serving and update dagre-d3 to older version (2.9). Update profile page. Remove references to invalid servlet api.

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/f2180b8f/exec/java-exec/src/main/resources/rest/static/js/respond.min.js
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/resources/rest/static/js/respond.min.js b/exec/java-exec/src/main/resources/rest/static/js/respond.min.js
new file mode 100644
index 0000000..80a7b69
--- /dev/null
+++ b/exec/java-exec/src/main/resources/rest/static/js/respond.min.js
@@ -0,0 +1,5 @@
+/*! Respond.js v1.4.2: min/max-width media query polyfill * Copyright 2013 Scott Jehl
+ * Licensed under https://github.com/scottjehl/Respond/blob/master/LICENSE-MIT
+ *  */
+
+!function(a){"use strict";a.matchMedia=a.matchMedia||function(a){var b,c=a.documentElement,d=c.firstElementChild||c.firstChild,e=a.createElement("body"),f=a.createElement("div");return f.id="mq-test-1",f.style.cssText="position:absolute;top:-100em",e.style.background="none",e.appendChild(f),function(a){return f.innerHTML='&shy;<style media="'+a+'"> #mq-test-1 { width: 42px; }</style>',c.insertBefore(e,d),b=42===f.offsetWidth,c.removeChild(e),{matches:b,media:a}}}(a.document)}(this),function(a){"use strict";function b(){u(!0)}var c={};a.respond=c,c.update=function(){};var d=[],e=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}(),f=function(a,b){var c=e();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))};if(c.ajax=f,c.queue=d,c.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:
 o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\([\s]*min\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/,maxw:/\([\s]*max\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/},c.mediaQueriesSupported=a.matchMedia&&null!==a.matchMedia("only all")&&a.matchMedia("only all").matches,!c.mediaQueriesSupported){var g,h,i,j=a.document,k=j.documentElement,l=[],m=[],n=[],o={},p=30,q=j.getElementsByTagName("head")[0]||k,r=j.getElementsByTagName("base")[0],s=q.getElementsByTagName("link"),t=function(){var a,b=j.createElement("div"),c=j.body,d=k.style.fontSize,e=c&&c.style.fontSize,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",c||(c=f=j.createElement("body"),c.style.background="none"),k.style.fontSize="100%",c.style.fontSize="100%",c.appendChild(b),f&&k.insertBefore(c,k.firstChild),a=b.offsetWidth,f?k.removeChild(c):c.removeC
 hild(b),k.style.fontSize=d,e&&(c.style.fontSize=e),a=i=parseFloat(a)},u=function(b){var c="clientWidth",d=k[c],e="CSS1Compat"===j.compatMode&&d||j.body[c]||d,f={},o=s[s.length-1],r=(new Date).getTime();if(b&&g&&p>r-g)return a.clearTimeout(h),h=a.setTimeout(u,p),void 0;g=r;for(var v in l)if(l.hasOwnProperty(v)){var w=l[v],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?i||t():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?i||t():1)),w.hasquery&&(z&&A||!(z||e>=x)||!(A||y>=e))||(f[w.media]||(f[w.media]=[]),f[w.media].push(m[w.rules]))}for(var C in n)n.hasOwnProperty(C)&&n[C]&&n[C].parentNode===q&&q.removeChild(n[C]);n.length=0;for(var D in f)if(f.hasOwnProperty(D)){var E=j.createElement("style"),F=f[D].join("\n");E.type="text/css",E.media=D,q.insertBefore(E,o.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(j.createTextNode(F)),n.push(E)}},v=function(a,b,d){var e=a.replace(c.regex.keyframes,"").match(c.regex.media),f=e&&e.length||0;b=b.substr
 ing(0,b.lastIndexOf("/"));var g=function(a){return a.replace(c.regex.urls,"$1"+b+"$2$3")},h=!f&&d;b.length&&(b+="/"),h&&(f=1);for(var i=0;f>i;i++){var j,k,n,o;h?(j=d,m.push(g(a))):(j=e[i].match(c.regex.findStyles)&&RegExp.$1,m.push(RegExp.$2&&g(RegExp.$2))),n=j.split(","),o=n.length;for(var p=0;o>p;p++)k=n[p],l.push({media:k.split("(")[0].match(c.regex.only)&&RegExp.$2||"all",rules:m.length-1,hasquery:k.indexOf("(")>-1,minw:k.match(c.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:k.match(c.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}u()},w=function(){if(d.length){var b=d.shift();f(b.href,function(c){v(c,b.href,b.media),o[b.href]=!0,a.setTimeout(function(){w()},0)})}},x=function(){for(var b=0;b<s.length;b++){var c=s[b],e=c.href,f=c.media,g=c.rel&&"stylesheet"===c.rel.toLowerCase();e&&g&&!o[e]&&(c.styleSheet&&c.styleSheet.rawCssText?(v(c.styleSheet.rawCssText,e,f),o[e]=!0):(!/^([a-zA-Z:]*\/\/)/.test(e)&&!r||e.replace(RegExp.$1,"").split("/")[0]===a.location.host)&&("
 //"===e.substring(0,2)&&(e=a.location.protocol+e),d.push({href:e,media:f})))}w()};x(),c.update=x,c.getEmValue=t,a.addEventListener?a.addEventListener("resize",b,!1):a.attachEvent&&a.attachEvent("onresize",b)}}(this);
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/f2180b8f/exec/java-exec/src/main/resources/rest/storage/update.ftl
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/resources/rest/storage/update.ftl b/exec/java-exec/src/main/resources/rest/storage/update.ftl
index 1b3316a..2a276e1 100644
--- a/exec/java-exec/src/main/resources/rest/storage/update.ftl
+++ b/exec/java-exec/src/main/resources/rest/storage/update.ftl
@@ -11,7 +11,7 @@
 
 <#include "*/generic.ftl">
 <#macro page_head>
-  <script src="http://malsup.github.com/jquery.form.js"></script>
+  <script src="/static/js/jquery.form.js"></script>
 </#macro>
 
 <#macro page_body>

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/f2180b8f/exec/java-exec/src/main/resources/rest/www/drill.ico
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/resources/rest/www/drill.ico b/exec/java-exec/src/main/resources/rest/www/drill.ico
deleted file mode 100644
index 0f9654e..0000000
Binary files a/exec/java-exec/src/main/resources/rest/www/drill.ico and /dev/null differ

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/f2180b8f/exec/java-exec/src/main/resources/rest/www/graph.js
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/resources/rest/www/graph.js b/exec/java-exec/src/main/resources/rest/www/graph.js
deleted file mode 100644
index 2d38e63..0000000
--- a/exec/java-exec/src/main/resources/rest/www/graph.js
+++ /dev/null
@@ -1,313 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one or more contributor
- *  license agreements. See the NOTICE file distributed with this work for additional
- *  information regarding copyright ownership. The ASF licenses this file to
- *  You under the Apache License, Version 2.0 (the "License"); you may not use
- *  this file except in compliance with the License. You may obtain a copy of
- *  the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required
- *  by applicable law or agreed to in writing, software distributed under the
- *  License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
- *  OF ANY KIND, either express or implied. See the License for the specific
- *  language governing permissions and limitations under the License.
- */
-
-$(window).load(function () {
-    // for each record, unroll the array pointed to by "fieldpath" into a new
-    // record for each element of the array
-    function unnest (table, fieldpath, dest) {
-        var faccess = accessor(fieldpath);
-        return $.map(table, function (record, index) {
-            var ra = [];
-            var nested = faccess(record);
-            for (var i = 0; i < nested.length; i++) {
-                var newrec = $.extend({}, record);
-                newrec[dest] = nested[i];
-                ra.push(newrec);
-            }
-            return ra;
-        });
-    }
-
-    // for each record, project "fieldpath" into "dest".
-    function extract (table, fieldpath, dest) {
-        var faccess = accessor(fieldpath);
-        return $.map(table, function (record, index) {
-            var newrec = $.extend({}, record);
-            newrec[dest] = faccess(newrec);
-            return newrec;
-        });
-    }
-
-    // creates a function that will traverse tree of objects based the '.'
-    // delimited "path"
-    function accessor (path) {
-        path = path.split(".");
-        return function (obj) {
-            for (var i = 0; i < path.length; i++)
-                obj = obj[path[i]];
-            return obj;
-        }
-    }
-
-    // sample use of unnest/extract
-    function extractminortimes (profile) {
-        var t1 = unnest([profile], "fragmentProfile", "ma");
-        var t2 = unnest(t1, "ma.minorFragmentProfile", "mi");
-
-        var timetable = $.map(t2, function (record, index) {
-            var newrec = {
-                "name" : record.ma.majorFragmentId + "-" +
-                    record.mi.minorFragmentId,
-                "category" : record.ma.majorFragmentId,
-                "start" : (record.mi.startTime - record.start) / 1000.0,
-                "end" : (record.mi.endTime - record.start) / 1000.0
-            };
-            return newrec;
-        });
-
-        timetable.sort(function (r1, r2) {
-            if (r1.category == r2.category) {
-                //return r1.name > r2.name;
-                return r1.end - r1.start > r2.end - r2.start ? 1 : -1;
-            }
-            else return r1.category > r2.category ? 1 : -1;
-
-        });
-        return timetable;
-    }
-
-    // write the "fieldpaths" for the table "table" into the "domtable"
-    function builddomtable (domtable, table, fieldpaths) {
-        var faccessors = $.map(fieldpaths, function (d, i) {
-            return accessor(d);
-        });
-
-        var domrow = domtable.append("tr");
-        for (var i = 0; i < fieldpaths.length; i++)
-            domrow.append("th").text(fieldpaths[i]);
-        for (var i = 0; i < table.length; i++) {
-            domrow = domtable.append("tr");
-            for (var j = 0; j < faccessors.length; j++)
-                domrow.append("td").text(faccessors[j](table[i]));
-        }
-    }
-
-    // parse the short physical plan into a dagreeD3 structure
-    function parseplan (planstring) {
-        var g = new dagreD3.Digraph();
-        var ps = $.map(planstring.trim().split("\n"), function (s) {
-            return [/^([0-9-]+)( *)([a-zA-Z]*)/.exec(s).slice(1)];
-        });
-
-        // nodes
-        for (var i = 0; i < ps.length; i++) {
-            g.addNode(ps[i][0], {
-                label: ps[i][2] + " " + ps[i][0],
-                fragment: parseInt(ps[i][0].split("-")[0])
-            });
-        }
-
-        // edges
-        var st = [ps[0]];
-        for (var i = 1; i < ps.length; i++) {
-            var top = st.pop();
-            while (top[1].length >= ps[i][1].length)
-                top = st.pop();
-
-            g.addEdge(null, ps[i][0], top[0]);
-
-            if (ps[i][1].length != top[1].length)
-                st.push(top);
-            if (ps[i][1].length >= top[1].length)
-                st.push(ps[i]);
-        }
-        return g;
-    }
-
-    // graph a "planstring" into the d3 svg handle "svg"
-    function buildplangraph (svg, planstring) {
-        var padding = 20;
-        var graph = parseplan(planstring);
-
-        var renderer = new dagreD3.Renderer();
-        renderer.zoom(function () {return function (graph, root) {}});
-
-        var oldDrawNodes = renderer.drawNodes();
-        renderer.drawNodes(function(graph, root) {
-            var svgNodes = oldDrawNodes(graph, root);
-            svgNodes.each(function(u) {
-                var fc = d3.rgb(globalconfig.majorcolorscale(graph.node(u).fragment));
-                d3.select(this).select("rect")
-                    .style("fill", graph.node(u).label.split(" ")[0].endsWith("Exchange") ? "white" : fc)
-                    .style("stroke", "#000")
-                    .style("stroke-width", "1px")
-            });
-            return svgNodes;
-        });
-
-        var oldDrawEdgePaths = renderer.drawEdgePaths();
-        renderer.drawEdgePaths(function(graph, root) {
-            var svgEdgePaths = oldDrawEdgePaths(graph, root);
-            svgEdgePaths.each(function(u) {
-                d3.select(this).select("path")
-                    .style("fill", "none")
-                    .style("stroke", "#000")
-                    .style("stroke-width", "1px")
-            });
-            return svgEdgePaths;
-        });
-
-        var shiftedgroup = svg.append("g")
-            .attr("transform", "translate(" + padding + "," + padding + ")");
-        var layout = dagreD3.layout().nodeSep(20).rankDir("BT");
-        var result = renderer.layout(layout).run(graph, shiftedgroup);
-
-        svg.attr("width", result.graph().width + 2 * padding)
-            .attr("height", result.graph().height + 2 * padding);
-    }
-
-    function buildtimingchart (svgdest, timetable) {
-        var chartprops = {
-            "w" : 800,
-            "h" : -1,
-            "svg" : svgdest,
-            "bheight" : 2,
-            "bpad" : 0,
-            "margin" : 50,
-            "scaler" : null,
-            "colorer" : null,
-        };
-
-        chartprops.h = timetable.length * (chartprops.bheight + chartprops.bpad * 2)
-
-        chartprops.svg
-            .attr("width", chartprops.w + 2 * chartprops.margin)
-            .attr("height", chartprops.h + 2 * chartprops.margin)
-            .attr("class", "svg");
-
-        chartprops.scaler = d3.scale.linear()
-            .domain([d3.min(timetable, accessor("start")),
-                     d3.max(timetable, accessor("end"))])
-            .range([0, chartprops.w - chartprops.bpad * 2]);
-        chartprops.colorer = globalconfig.majorcolorscale;
-
-        // backdrop
-        chartprops.svg.append("g")
-            .selectAll("rect")
-            .data(timetable)
-            .enter()
-            .append("rect")
-            .attr("x", 0)
-            .attr("y", function(d, i) {return i * (chartprops.bheight + 2 * chartprops.bpad);})
-            .attr("width", chartprops.w)
-            .attr("height", chartprops.bheight + chartprops.bpad * 2)
-            .attr("stroke", "none")
-            .attr("fill", function(d) {return d3.rgb(chartprops.colorer(d.category));})
-            .attr("opacity", 0.1)
-            .attr("transform", "translate(" + chartprops.margin + "," +
-                  chartprops.margin + ")");
-
-        // bars
-        chartprops.svg.append('g')
-            .selectAll("rect")
-            .data(timetable)
-            .enter()
-            .append("rect")
-             //.attr("rx", 3)
-             //.attr("ry", 3)
-            .attr("x", function(d) {return chartprops.scaler(d.start) + chartprops.bpad;})
-            .attr("y", function(d, i) {return i * (chartprops.bheight + 2 * chartprops.bpad) + chartprops.bpad;})
-            .attr("width", function(d) {return (chartprops.scaler(d.end) - chartprops.scaler(d.start));})
-            .attr("height", chartprops.bheight)
-            .attr("stroke", "none")
-            .attr("fill", function(d) {return d3.rgb(chartprops.colorer(d.category));})
-            .attr("transform", "translate(" + chartprops.margin + "," +
-                  chartprops.margin + ")");
-
-        // grid lines
-        chartprops.svg.append("g")
-            .attr("transform", "translate(" +
-                  (chartprops.bpad + chartprops.margin) + "," +
-                  (chartprops.h + chartprops.margin) + ")")
-            .attr("class", "grid")
-            .call(d3.svg.axis()
-                  .scale(chartprops.scaler)
-                  .tickSize(-chartprops.h, 0)
-                  .tickFormat(""))
-            .style("stroke", "#000")
-            .style("opacity", 0.2);
-
-        // ticks
-        chartprops.svg.append("g")
-            .attr("transform", "translate(" +
-                  (chartprops.bpad + chartprops.margin) + "," +
-                  (chartprops.h + chartprops.margin) + ")")
-            .attr("class", "grid")
-            .call(d3.svg.axis()
-                  .scale(chartprops.scaler)
-                  .orient('bottom')
-                  .tickSize(0, 0)
-                  .tickFormat(d3.format(".2f")));
-    }
-
-    function loadprofile (queryid, callback) {
-        $.ajax({
-            type: "GET",
-            dataType: "json",
-            url: "/profiles/" + queryid + ".json",
-            success: callback,
-            error: function (x, y, z) {
-                console.log(x);
-                console.log(y);
-                console.log(z);
-            }
-        });
-    }
-
-    function setupglobalconfig (profile) {
-        globalconfig.profile = profile;
-        globalconfig.majorcolorscale = d3.scale.category20()
-            .domain([0, d3.max(profile.fragmentProfile, accessor("majorFragmentId"))]);
-
-    }
-
-    String.prototype.endsWith = function(suffix) {
-        return this.indexOf(suffix, this.length - suffix.length) !== -1;
-    };
-
-    loadprofile(globalconfig.queryid, function (profile) {
-        setupglobalconfig(profile);
-
-        var queryvisualdrawn = false;
-        var timingoverviewdrawn = false;
-        var jsonprofileshown = false;
-
-        // trigger svg drawing when visible
-        $('#query-tabs').on('shown.bs.tab', function (e) {
-            if (queryvisualdrawn || !e.target.href.endsWith("#query-visual")) return;
-            buildplangraph(d3.select("#query-visual-canvas"), profile.plan);
-            queryvisualdrawn = true;
-        })
-        $('#fragment-accordion').on('shown.bs.collapse', function (e) {
-            if (timingoverviewdrawn || e.target.id != "fragment-overview") return;
-            buildtimingchart(d3.select("#fragment-overview-canvas"), extractminortimes(profile));
-            timingoverviewdrawn = true;
-        });
-
-        // select default tabs
-        $('#fragment-overview').collapse('show');
-        $('#operator-overview').collapse('show');
-        $('#query-tabs a[href="#query-query"]').tab('show');
-
-
-        // add json profile on click
-        $('#full-json-profile-json').on('shown.bs.collapse', function (e) {
-            if (jsonprofileshown) return;
-            $('#full-json-profile-json').html(JSON.stringify(globalconfig.profile, null, 4));
-        });
-
-        //builddomtable(d3.select("#timing-table")
-        //            .append("tbody"), extractminortimes(profile),
-        //            ["name", "start", "end"]);
-    });
-});

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/f2180b8f/exec/jdbc/pom.xml
----------------------------------------------------------------------
diff --git a/exec/jdbc/pom.xml b/exec/jdbc/pom.xml
index b707760..c57f18b 100644
--- a/exec/jdbc/pom.xml
+++ b/exec/jdbc/pom.xml
@@ -35,7 +35,7 @@
       <artifactId>drill-java-exec</artifactId>
       <version>${project.version}</version>
     </dependency>
-     <dependency>
+    <dependency>
       <groupId>org.apache.drill.contrib.storage-hive</groupId>
       <artifactId>drill-storage-hive-core</artifactId>
       <version>${project.version}</version>
@@ -99,8 +99,8 @@
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-plugin</artifactId>
         <configuration>
-            <forkCount>1</forkCount>
-            <reuseForks>false</reuseForks>
+          <forkCount>1</forkCount>
+          <reuseForks>false</reuseForks>
         </configuration>
       </plugin>
       <plugin>
@@ -144,6 +144,10 @@
               <artifactId>commons-logging</artifactId>
               <groupId>commons-logging</groupId>
             </exclusion>
+            <exclusion>
+              <groupId>org.mortbay.jetty</groupId>
+              <artifactId>servlet-api-2.5</artifactId>
+            </exclusion>
           </exclusions>
           <scope>test</scope>
         </dependency>

http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/f2180b8f/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 9499ebf..f74ad2b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -164,6 +164,8 @@
           <excludeSubprojects>false</excludeSubprojects>
           <excludes>
             <exclude>**/*.log</exclude>
+            <exclude>**/*.css</exclude>
+            <exclude>**/*.js</exclude>
             <exclude>**/*.md</exclude>
             <exclude>sandbox/**</exclude>
             <exclude>**/*.json</exclude>
@@ -287,7 +289,7 @@
             </configuration>
           </execution>
           <execution>
-            <id>no_commons_logging</id>
+            <id>avoid_bad_dependencies</id>
             <goals>
               <goal>enforce</goal>
             </goals>
@@ -296,6 +298,8 @@
                 <bannedDependencies>
                   <excludes>
                     <exclude>commons-logging</exclude>
+                    <exclude>javax.servlet:servlet-api</exclude>
+                    <exclude>org.mortbay.jetty:servlet-api-2.5</exclude>
                   </excludes>
                 </bannedDependencies>
               </rules>
@@ -620,6 +624,14 @@
                 <groupId>org.mortbay.jetty</groupId>
                 <artifactId>servlet-api-2.5</artifactId>
               </exclusion>
+                            <exclusion>
+                <groupId>org.mortbay.jetty</groupId>
+                <artifactId>servlet-api-2.5</artifactId>
+              </exclusion>
+              <exclusion>
+                <groupId>javax.servlet</groupId>
+                <artifactId>servlet-api</artifactId>              
+              </exclusion>
               <exclusion>
                 <groupId>org.mortbay.jetty</groupId>
                 <artifactId>jetty-util</artifactId>
@@ -696,6 +708,10 @@
             <version>2.4.1</version>
             <exclusions>
               <exclusion>
+                <groupId>javax.servlet</groupId>
+                <artifactId>servlet-api</artifactId>              
+              </exclusion>
+              <exclusion>
                 <groupId>org.mortbay.jetty</groupId>
                 <artifactId>servlet-api</artifactId>
               </exclusion>
@@ -955,6 +971,11 @@
                 <artifactId>servlet-api-2.5</artifactId>
               </exclusion>
               <exclusion>
+                <groupId>javax.servlet</groupId>
+                <artifactId>servlet-api</artifactId>              
+              </exclusion>
+              
+              <exclusion>
                 <groupId>org.mortbay.jetty</groupId>
                 <artifactId>jetty-util</artifactId>
               </exclusion>
@@ -1042,6 +1063,10 @@
                 <artifactId>servlet-api-2.5</artifactId>
               </exclusion>
               <exclusion>
+                <groupId>javax.servlet</groupId>
+                <artifactId>servlet-api</artifactId>              
+              </exclusion>
+              <exclusion>
                 <groupId>org.mortbay.jetty</groupId>
                 <artifactId>jetty-util</artifactId>
               </exclusion>
@@ -1186,6 +1211,10 @@
             <version>0.94.17-mapr-1405-m7-4.0.1</version>
             <exclusions>
               <exclusion>
+                <artifactId>servlet-api-2.5</artifactId>
+                <groupId>org.mortbay.jetty</groupId>
+              </exclusion>
+              <exclusion>
                 <groupId>commons-logging</groupId>
                 <artifactId>commons-logging</artifactId>
               </exclusion>
@@ -1282,6 +1311,10 @@
             <version>2.3.0-cdh5.0.3</version>
             <exclusions>
               <exclusion>
+                <groupId>javax.servlet</groupId>
+                <artifactId>servlet-api</artifactId>              
+              </exclusion>
+              <exclusion>
                 <artifactId>commons-logging</artifactId>
                 <groupId>commons-logging</groupId>
               </exclusion>
@@ -1336,6 +1369,10 @@
             <version>2.4.0.2.1.3.0-563</version>
             <exclusions>
               <exclusion>
+                <groupId>javax.servlet</groupId>
+                <artifactId>servlet-api</artifactId>              
+              </exclusion>
+              <exclusion>
                 <artifactId>commons-logging</artifactId>
                 <groupId>commons-logging</groupId>
               </exclusion>