Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Wiki Markup
This design is intended to address the following issues:

...



[KNOX-179@jira]: Simple way to introduce new servlet filters into the chains

...


[KNOX-103@jira]: Support multiple <pattern> children in <resource> for gateway.xml

...


[KNOX-177@jira]: 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
javajavatitle
:

{newcode:java|title=ServiceDeploymentContributor.contributeService
}
  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, nullchain, params );
  }
{newcode}

{newcode:xml}
<topology>
  <gateway>
    <provider/>
    <chain>
    </chain>
  </gateway>
</topology>
{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 )
  void contributeFilter( Service service, ResourceDescriptor resource, String role, String name, List<FilterParamDescriptor> params );
  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 );
}
{plantuml}
PlantUML
titleSample Sequences
\\
{plantuml:title= Sample Sequences}
Filter -> Chain: Text
{plantuml}