Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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:

{newcode:java|title=
Code Block
java
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, chain, params );
  }
{newcode}

{newcode:xml
Code Block
xml
xml
}
<topology>
  <gateway>
    <provider/>
    <chain name="">
      <provider role="" name="">
        <param name="" value=""/>
      </provider>
  <chain>    <provider/>
    </chain>
  </gateway>
</topology>
PlantUML
titleClasses
{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
titleSample Sequences
{plantuml}
\\
{plantuml:title= Sample Sequences}
Filter -> Chain: Text
{plantuml}