<!ELEMENT extension (interceptor* , cachingStrategy*)>
<!ATTLIST extension
point CDATA #REQUIRED
id CDATA #IMPLIED>
<!ELEMENT interceptor EMPTY>
<!ATTLIST interceptor
id CDATA #REQUIRED
class CDATA #REQUIRED
target CDATA #IMPLIED
order (POST|PRE) >
Declares an interceptor to run when a resource is obtained from a layer.
Example: SetTransactionInterceptor sets the transaction on FeatureStores. It only needs to be done once per FeatureStore so it can be done before the caching takes place.
<!ELEMENT cachingStrategy EMPTY>
<!ATTLIST cachingStrategy
id CDATA #REQUIRED
class CDATA #REQUIRED>
Declares an caching strategy for Resources fetched from a Layer. Becareful changing this can have unexpected side effects. Make sure you test the entire application well.
For example if a new feature store was returned each time then every plugin that is interested in events would need to create a resource interceptor and every request for a FeatureStore would result in both a new FeatureStore and a new listener for every interested plugin. Since the Datastore's Listener manager often keeps the listeners indefinately then we would very quickly have 10s to 100s of listeners that can't be garbage collected and possibly featurestores as well.