...
This
...
design
...
is
...
intended
...
to
...
address
...
the
...
following
...
issues:
...
...
:
...
Simple
...
way
...
to
...
introduce
...
new
...
servlet
...
filters
...
into
...
the
...
chains
...
...
:
...
Support
...
multiple
...
<pattern>
...
children
...
in
...
<resource>
...
for
...
gateway.xml
...
...
:
...
Simplify
...
service
...
deployment
...
contributor
...
implementation
...
Each
...
of
...
these
...
issues
...
stem
...
from
...
what
...
is
...
currently
...
expected
...
of
...
a
...
ServiceDeploymentContributor
...
in
...
its
...
contributeService
...
method.
...
Basically
...
each
...
service
...
deployment
...
contributor
...
is
...
expected
...
to
...
build
...
its
...
own
...
filter
...
chain.
...
This
...
is
...
currently
...
done
...
by
...
making
...
calls
...
to
...
Deploymentcontext.contributeFilter
...
.
...
While
...
this
...
provides
...
a
...
great
...
deal
...
of
...
flexibility
...
for
...
each
...
service
...
to
...
define
...
a
...
custom
...
chain
...
we
...
have
...
found
...
that
...
this
...
isn't
...
commonly
...
necessary.
...
Furthermore
...
it
...
makes
...
if
...
very
...
difficult
...
if
...
not
...
impossible
...
to
...
introduce
...
new
...
filters
...
in
...
a
...
chain
...
without
...
impacting
...
all
...
services.
...
This
...
design
...
will
...
provide
...
an
...
abstraction
...
to
...
the
...
service
...
deployment
...
contributors
...
that
...
can
...
create
...
either
...
a
...
default
...
or
...
specifically
...
configured
...
chain
...
of
...
filters.
...
The
...
goal
...
is
...
to
...
support
...
a
...
pattern
...
in
...
service
...
deployment
...
contributors
...
that
...
looks
...
like
...
this:
Code Block | |||||||
---|---|---|---|---|---|---|---|
|
| ||||||
} public void contributeService( DeploymentContext context, Service service ) throws Exception { String chain = null; // Default if null, otherwise specific chain name defined in topoloy.xml Map<String,Map<String,String>> params = null; // Default if null, otherwise map of per provider role map of name/value pairs. ResourceDescriptor resource = context.addResource() resource.role( "WEBHDFS" ); resource.pattern( "webhdfs/v1/?**" ); resource.pattern( "webhdfs/v1/**?**" ); context.contributeChain( service, resource, chain, params ); } {newcode} {newcode:xml |
Code Block | ||||
---|---|---|---|---|
| ||||
} <topology> <gateway> <provider/> <chain name=""> <provider role="" name=""> <param name="" value=""/> </provider> <chain> <provider/> </chain> </gateway> </topology> |
PlantUML | ||
---|---|---|
| ||
{xml} {plantuml:title=Classes} scale 1280 width class DeploymentContext { GatewayConfig getGatewayConfig(); Topology getTopology(); WebArchive getWebArchive(); WebAppDescriptor getWebAppDescriptor(); GatewayDescriptor getGatewayDescriptor(); <b>void contributeChain( Service service, ResourceDescriptor resource, String chainName, Map<String,Map<String,String>> providerParams )Service service, void contributeFilter( Service service, ResourceDescriptor resource, String role, String namechainName, List<FilterParamDescriptor> paramsMap<String,Map<String,String>> providerParams ); void addDescriptor( String name, Object descriptor ); <T> T getDescriptor( String name ); } class ServiceDeploymentContributor { String getRole(); String getName(); void initializeContribution( DeploymentContext context ); void contributeService( DeploymentContext context, Service service ) throws Exception; void finalizeContribution( DeploymentContext context ); } class ProviderDeploymentContributor { String getRole(); String getName(); void initializeContribution( DeploymentContext context ); void contributeProvider( DeploymentContext context, Provider provider ); void contributeFilter( DeploymentContext context, Provider provider, Service service, ResourceDescriptor resource, List<FilterParamDescriptor> params ); void finalizeContribution( DeploymentContext context ); } |
PlantUML | ||
---|---|---|
| ||
{plantuml} \\ {plantuml:title= Sample Sequences} Filter -> Chain: Text {plantuml} |