I just realized that the "copy on deploy" mechanism might not be a good
idea for config from gateway-core/site.xml. The issue is that any
changes to gateway-core/site.xml won't be detected even after a gateway
restart. With that in mind the right thing to do here is probably the
ServletContext attribute mechanism I described below.
On 8/13/13 3:00 PM, Kevin Minder wrote:
Hi Dilli,
The existing model for configuration of a filter relies upon the
deployment step to copy any config required by a filter out of either
global or topology config into filter init params at deployment time.
The "hook" point for this is in the API
gateway-spi/src/main/java/org/apache/hadoop/gateway/deploy/ProviderDeploymentContributor.java
specifically the method contributeFilter().
This method ends up being called whenever a
ServiceDeploymentContributor adds a filter via
DeploymentContext.contributeFilter.
So take a look at TempletetonDeploymentContributor.contributeService
it calls DeploymentContext.contributeFilter
this indirectly ends up calling
DispatchDeploymentContributor.contributeFilter
In this method you can interogate the DeploymentContext where you can
find both the global config gateway-core/site.xml) via
getGatewayConfig and the topology config (e.g. sample.xml) via
getTopology().
From that filter init params could be added like this.
@Override
public void contributeFilter( DeploymentContext context, Provider
provider, Service service, ResourceDescriptor resource,
List<FilterParamDescriptor> params ) {
FilterDescriptor filter = resource.addFilter().name( getName()
).role( getRole() ).impl( HttpClientDispatch.class );
if( context.getGatewayConfig().isHadoopKerberosSecured() ) {
filter.param().name("kerberos").value("true");
}
}
I don't currently see a way to access GatewayConfig at request
processing time. It looks like it would be fairly easy to add as a
ServletContext attribute. This would be done in
GatewayServer.internalDeploy where the WebAppContext.setAttribute() is
setup. It could then be read by each filter in Filter.init() via
FilterConfig.getServletContext().getAttribute();
Kevin.
--
CONFIDENTIALITY NOTICE
NOTICE: This message is intended for the use of the individual or entity to
which it is addressed and may contain information that is confidential,
privileged and exempt from disclosure under applicable law. If the reader
of this message is not the intended recipient, you are hereby notified that
any printing, copying, dissemination, distribution, disclosure or
forwarding of this communication is strictly prohibited. If you have
received this communication in error, please contact the sender immediately
and delete it from your system. Thank You.