diff options
author | Jan Bartel | 2014-10-24 01:46:46 +0000 |
---|---|---|
committer | Jan Bartel | 2014-10-24 01:48:15 +0000 |
commit | 1ab6d7398c67b9b21ab91be13e71e6e97ab08f63 (patch) | |
tree | f5c01128901a43d6767dafd18474baf8ac388a61 /jetty-webapp | |
parent | fac197f868fc3f04caa83d01a3a316ba9ec43aed (diff) | |
download | org.eclipse.jetty.project-1ab6d7398c67b9b21ab91be13e71e6e97ab08f63.tar.gz org.eclipse.jetty.project-1ab6d7398c67b9b21ab91be13e71e6e97ab08f63.tar.xz org.eclipse.jetty.project-1ab6d7398c67b9b21ab91be13e71e6e97ab08f63.zip |
447979 Refactor to make MetaData responsible for progressively ordering web-inf jars
Diffstat (limited to 'jetty-webapp')
-rw-r--r-- | jetty-webapp/src/main/java/org/eclipse/jetty/webapp/FragmentConfiguration.java | 9 | ||||
-rw-r--r-- | jetty-webapp/src/main/java/org/eclipse/jetty/webapp/MetaData.java | 100 |
2 files changed, 62 insertions, 47 deletions
diff --git a/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/FragmentConfiguration.java b/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/FragmentConfiguration.java index 7bd19c7e3c..661446f4d3 100644 --- a/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/FragmentConfiguration.java +++ b/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/FragmentConfiguration.java @@ -45,15 +45,6 @@ public class FragmentConfiguration extends AbstractConfiguration } - @Override - public void configure(WebAppContext context) throws Exception - { - if (!context.isConfigurationDiscovered()) - return; - - //order the fragments - context.getMetaData().orderFragments(); - } @Override public void postConfigure(WebAppContext context) throws Exception diff --git a/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/MetaData.java b/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/MetaData.java index 3fde5536e1..c5f073cccb 100644 --- a/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/MetaData.java +++ b/jetty-webapp/src/main/java/org/eclipse/jetty/webapp/MetaData.java @@ -59,8 +59,8 @@ public class MetaData protected final Map<Resource, List<DiscoveredAnnotation>> _annotations = new HashMap<Resource, List<DiscoveredAnnotation>>(); protected final List<Resource> _webInfClasses = new ArrayList<Resource>(); protected final List<Resource> _webInfJars = new ArrayList<Resource>(); - protected final List<Resource> _orderedWebInfJars = new ArrayList<Resource>(); protected final List<Resource> _orderedContainerResources = new ArrayList<Resource>(); + protected final List<Resource> _orderedWebInfResources = new ArrayList<Resource>(); protected Ordering _ordering;//can be set to RelativeOrdering by web-default.xml, web.xml, web-override.xml protected boolean allowDuplicateFragmentNames = false; @@ -158,7 +158,7 @@ public class MetaData _webFragmentResourceMap.clear(); _annotations.clear(); _webInfJars.clear(); - _orderedWebInfJars.clear(); + _orderedWebInfResources.clear(); _orderedContainerResources.clear(); _ordering = null; allowDuplicateFragmentNames = false; @@ -171,17 +171,21 @@ public class MetaData _webDefaultsRoot.parse(); if (_webDefaultsRoot.isOrdered()) { - if (_ordering == null) - _ordering = new Ordering.AbsoluteOrdering(this); + Ordering ordering = getOrdering(); + if (ordering == null) + ordering = new Ordering.AbsoluteOrdering(this); List<String> order = _webDefaultsRoot.getOrdering(); for (String s:order) { if (s.equalsIgnoreCase("others")) - ((Ordering.AbsoluteOrdering)_ordering).addOthers(); + ((Ordering.AbsoluteOrdering)ordering).addOthers(); else - ((Ordering.AbsoluteOrdering)_ordering).add(s); + ((Ordering.AbsoluteOrdering)ordering).add(s); } + + //(re)set the ordering to cause webinf jar order to be recalculated + setOrdering(ordering); } } @@ -194,17 +198,21 @@ public class MetaData if (_webXmlRoot.isOrdered()) { - if (_ordering == null) - _ordering = new Ordering.AbsoluteOrdering(this); + Ordering ordering = getOrdering(); + if (ordering == null) + ordering = new Ordering.AbsoluteOrdering(this); List<String> order = _webXmlRoot.getOrdering(); for (String s:order) { if (s.equalsIgnoreCase("others")) - ((Ordering.AbsoluteOrdering)_ordering).addOthers(); + ((Ordering.AbsoluteOrdering)ordering).addOthers(); else - ((Ordering.AbsoluteOrdering)_ordering).add(s); + ((Ordering.AbsoluteOrdering)ordering).add(s); } + + //(re)set the ordering to cause webinf jar order to be recalculated + setOrdering(ordering); } } @@ -229,17 +237,22 @@ public class MetaData if (webOverrideRoot.isOrdered()) { - if (_ordering == null) - _ordering = new Ordering.AbsoluteOrdering(this); + Ordering ordering = getOrdering(); + + if (ordering == null) + ordering = new Ordering.AbsoluteOrdering(this); List<String> order = webOverrideRoot.getOrdering(); for (String s:order) { if (s.equalsIgnoreCase("others")) - ((Ordering.AbsoluteOrdering)_ordering).addOthers(); + ((Ordering.AbsoluteOrdering)ordering).addOthers(); else - ((Ordering.AbsoluteOrdering)_ordering).add(s); + ((Ordering.AbsoluteOrdering)ordering).add(s); } + + //set or reset the ordering to cause the webinf jar ordering to be recomputed + setOrdering(ordering); } _webOverrideRoots.add(webOverrideRoot); } @@ -276,12 +289,16 @@ public class MetaData _webFragmentNameMap.put(descriptor.getName(), descriptor); } - //If web.xml has specified an absolute ordering, ignore any relative ordering in the fragment - if (_ordering != null && _ordering.isAbsolute()) - return; + //only accept an ordering from the fragment if there is no ordering already established if (_ordering == null && descriptor.isOrdered()) - _ordering = new Ordering.RelativeOrdering(this); + { + setOrdering(new Ordering.RelativeOrdering(this)); + return; + } + + //recompute the ordering with the new fragment name + orderFragments(); } /** @@ -343,14 +360,9 @@ public class MetaData public void orderFragments () { - //if we have already ordered them don't do it again - if (_orderedWebInfJars.size()==_webInfJars.size()) - return; - - if (_ordering != null) - _orderedWebInfJars.addAll(_ordering.order(_webInfJars)); - else - _orderedWebInfJars.addAll(_webInfJars); + _orderedWebInfResources.clear(); + if (getOrdering() != null) + _orderedWebInfResources.addAll(getOrdering().order(_webInfJars)); } @@ -367,10 +379,12 @@ public class MetaData _origins.clear(); // Set the ordered lib attribute - if (_ordering != null) + List<Resource> orderedWebInfJars = null; + if (getOrdering() != null) { + orderedWebInfJars = getOrderedWebInfJars(); List<String> orderedLibs = new ArrayList<String>(); - for (Resource webInfJar:_orderedWebInfJars) + for (Resource webInfJar:orderedWebInfJars) { //get just the name of the jar file String fullname = webInfJar.getName(); @@ -413,7 +427,13 @@ public class MetaData //apply the annotations that are associated with a fragment, according to the //established ordering - List<Resource> resources = getOrderedWebInfJars(); + List<Resource> resources = null; + + if (getOrdering() != null) + resources = orderedWebInfJars; + else + resources = getWebInfJars(); + for (Resource r:resources) { FragmentDescriptor fd = _webFragmentResourceMap.get(r); @@ -448,12 +468,15 @@ public class MetaData for (WebDescriptor d : _webOverrideRoots) distributable&=d.isDistributable(); - List<Resource> orderedResources = getOrderedWebInfJars(); - for (Resource r: orderedResources) + if (getOrdering() != null) { - FragmentDescriptor d = _webFragmentResourceMap.get(r); - if (d!=null) - distributable = distributable && d.isDistributable(); + List<Resource> orderedResources = getOrderedWebInfJars(); + for (Resource r: orderedResources) + { + FragmentDescriptor d = _webFragmentResourceMap.get(r); + if (d!=null) + distributable = distributable && d.isDistributable(); + } } return distributable; } @@ -481,16 +504,16 @@ public class MetaData public List<Resource> getOrderedWebInfJars() { - return _orderedWebInfJars == null? new ArrayList<Resource>(): _orderedWebInfJars; + return _orderedWebInfResources; } public List<FragmentDescriptor> getOrderedFragments () { List<FragmentDescriptor> list = new ArrayList<FragmentDescriptor>(); - if (_orderedWebInfJars == null) + if (getOrdering() == null) return list; - for (Resource r:_orderedWebInfJars) + for (Resource r:getOrderedWebInfJars()) { FragmentDescriptor fd = _webFragmentResourceMap.get(r); if (fd != null) @@ -505,8 +528,9 @@ public class MetaData } public void setOrdering (Ordering o) - { + { _ordering = o; + orderFragments(); } public FragmentDescriptor getFragment (Resource jar) |