SLING-9252 - Optimise request dispatching for inheriting resource types
diff --git a/src/main/java/org/apache/sling/scripting/bundle/tracker/internal/BundledScriptTracker.java b/src/main/java/org/apache/sling/scripting/bundle/tracker/internal/BundledScriptTracker.java
index 13ce403..540efde 100644
--- a/src/main/java/org/apache/sling/scripting/bundle/tracker/internal/BundledScriptTracker.java
+++ b/src/main/java/org/apache/sling/scripting/bundle/tracker/internal/BundledScriptTracker.java
@@ -152,25 +152,28 @@
List<ServiceRegistration<Servlet>> regs = new ArrayList<>();
LinkedHashSet<TypeProvider> wiredProviders = new LinkedHashSet<>();
wiredProviders.add(new TypeProvider(resourceTypeCapability.getResourceTypes(), bundle));
- String extendedResourceType = resourceTypeCapability.getExtendedResourceType();
- if (StringUtils.isNotEmpty(extendedResourceType)) {
- BundleWire extendedWire = null;
+ String extendedResourceTypeString = resourceTypeCapability.getExtendedResourceType();
+ if (StringUtils.isNotEmpty(extendedResourceTypeString)) {
+ Bundle providingBundle = null;
+ ResourceType extendedResourceType = null;
ResourceTypeCapability extendedCapability = null;
- LOGGER.debug("Bundle {} extends resource type {} through {}.", bundle.getSymbolicName(), extendedResourceType,
- resourceTypesRegistrationValue);
for (BundleWire wire : bundleWiring.getRequiredWires(NS_SLING_RESOURCE_TYPE)) {
ResourceTypeCapability wiredCapability =
ResourceTypeCapability.fromBundleCapability(wire.getCapability());
for (ResourceType resourceType : wiredCapability.getResourceTypes()) {
- if (extendedResourceType.equals(resourceType.getType()) && wiredCapability.getSelectors().isEmpty()) {
- extendedWire = wire;
+ if (extendedResourceTypeString.equals(resourceType.getType()) && wiredCapability.getSelectors().isEmpty()) {
+ providingBundle = wire.getProvider().getBundle();
extendedCapability = wiredCapability;
+ extendedResourceType = resourceType;
+ LOGGER.debug("Bundle {} extends resource type {} through {}.", bundle.getSymbolicName(),
+ extendedResourceType.toString(), resourceTypesRegistrationValue);
+ break;
}
}
}
- if (extendedWire != null) {
- wiredProviders.add(new TypeProvider(extendedCapability.getResourceTypes(), extendedWire.getProvider().getBundle()));
- properties.put(ServletResolverConstants.SLING_SERVLET_RESOURCE_SUPER_TYPE, extendedResourceType);
+ if (providingBundle != null) {
+ wiredProviders.add(new TypeProvider(extendedCapability.getResourceTypes(), providingBundle));
+ properties.put(ServletResolverConstants.SLING_SERVLET_RESOURCE_SUPER_TYPE, extendedResourceType.toString());
}
}
populateWiredProviders(wiredProviders);