Nirmal Fernando created STRATOS-777: ---------------------------------------
Summary: Introduce subscription filters to intercept a new subscription Key: STRATOS-777 URL: https://issues.apache.org/jira/browse/STRATOS-777 Project: Stratos Issue Type: New Feature Components: Stratos Manager Affects Versions: 4.0.0 Reporter: Nirmal Fernando Assignee: Nirmal Fernando Fix For: 4.1.0 Currently, there's no clean way to intercept a subscription request and do some pre-processing. As of now, we do some pre-processing of a subscription request in order to identify the need of a load balancer and act accordingly. I currently have another use-case to intercept a subscription request and act upon a parameter. Hence, to make the code clean over there, I propose we introduce a Subscription Filter chain where you could intercept a subscription request and do some pre-processing before creating the actual subscription. Following is the interface design, I've come up with. /** * Intercepts the flow of Cartridge Subscription. * Implementations of this class would get executed before making the real subscription. */ public interface SubscriptionFilter { /** * Do some pre-processing on a subscription request. * @param cartridgeInfo {@link CartridgeInfo} * @param subscriptionData {@link SubscriptionData} * @return {@link Properties}, if there are any. * @throws ADCException on a failure while processing. */ public Properties execute(CartridgeInfo cartridgeInfo, SubscriptionData subscriptionData) throws ADCException ; } Filters could leverage these key-value pairs to pass properties into the main subscription. One existing use-case is passing LB subscription related properties to the main subscription. You would need to implement the interface and add the fully qualified class name of it, to the META-INF/services folder in a file named "org.apache.stratos.manager.subscription.filter.SubscriptionFilter" (I am planning to use the Java ServiceLoader - http://docs.oracle.com/javase/6/docs/api/java/util/ServiceLoader.html) -- This message was sent by Atlassian JIRA (v6.3.4#6332)