Interceptor CS562 Spring 2002 Jan 29 2002 Anand Krishnan Morgan Deters Venkita Subramonian.

27
Interceptor CS562 Spring 2002 Jan 29 2002 Anand Krishnan Morgan Deters Venkita Subramonian

description

Interceptor Architectural pattern Allows services to be transparently added to a framework Services triggered automatically when certain events occur

Transcript of Interceptor CS562 Spring 2002 Jan 29 2002 Anand Krishnan Morgan Deters Venkita Subramonian.

Page 1: Interceptor CS562 Spring 2002 Jan 29 2002 Anand Krishnan Morgan Deters Venkita Subramonian.

InterceptorCS562 Spring 2002

Jan 29 2002

Anand KrishnanMorgan DetersVenkita Subramonian

Page 2: Interceptor CS562 Spring 2002 Jan 29 2002 Anand Krishnan Morgan Deters Venkita Subramonian.

Discussion Topics

• Interceptor definition• Motivating Examples• Problem definition and solutions• Implementation details• Scope for Generic Programming• Relationship with other patterns

Page 3: Interceptor CS562 Spring 2002 Jan 29 2002 Anand Krishnan Morgan Deters Venkita Subramonian.

Interceptor

• Architectural pattern• Allows services to be transparently added to a

framework• Services triggered automatically when certain

events occur

Page 4: Interceptor CS562 Spring 2002 Jan 29 2002 Anand Krishnan Morgan Deters Venkita Subramonian.

Problem

• Problem – How to integrate out-of-band tasks with in-band tasks

transparently ?

Page 5: Interceptor CS562 Spring 2002 Jan 29 2002 Anand Krishnan Morgan Deters Venkita Subramonian.

Example 1 – Java event modelpublic class Demo extends JApplet { public void init() { bHandler = new ButtonHandler(); button = new JButton("Click Me"); getContentPane().add(button,

BorderLayout.CENTER); button.addActionListener(bHandler); } public class ButtonHandler

implements ActionListenervoid actionPerformed(ActionEvent e) { Toolkit.getDefaultToolkit().beep(); }

}

AppletFramework

Button clicked

ActionListener

Some action

ActionEvent

Page 6: Interceptor CS562 Spring 2002 Jan 29 2002 Anand Krishnan Morgan Deters Venkita Subramonian.

Example 2 – Unix signals

void catch_int(int sig_num) {signal(SIGINT, catch_int); printf("Don't do that");fflush(stdout);

}main() {

…..signal(SIGINT, catch_int); for ( ;; )

pause();}

OSFramework

Ctrl + C

signalhandler

Some action

Signal info

Page 7: Interceptor CS562 Spring 2002 Jan 29 2002 Anand Krishnan Morgan Deters Venkita Subramonian.

Example 3 - Database Triggers

CREATE TRIGGER print_salary_changesBEFORE UPDATE ON emp FOR EACH ROW WHEN (new.empno > 0) DECLARE sal_diff number; BEGIN

sal_diff := new.sal - old.sal; dbms_output.put('Old salary: ' || :old.sal); dbms_output.put(' New salary: ' || :new.sal); dbms_output.put(' Difference ' || sal_diff);

END;

UPDATE emp SET sal = sal + 500.00 WHERE deptno = 10

Trigger will fire once for each row that isupdated, and it prints the new and oldsalaries, and the difference.

DatabaseFramework

Update Request

BeforeUpdateTrigger

AfterUpdateTrigger

Result

Page 8: Interceptor CS562 Spring 2002 Jan 29 2002 Anand Krishnan Morgan Deters Venkita Subramonian.

Example 4 – CORBA ORB

• In-band tasks– Connection management

with peer ORB– Request/reply

marshaling/demarshaling– Demultiplexing requests

to objects• Out-of-band tasks

– Added at interceptor points

– Security, Fault Tolerance

ORB ORB

SecurityService

FaultTolerance

Service

Page 9: Interceptor CS562 Spring 2002 Jan 29 2002 Anand Krishnan Morgan Deters Venkita Subramonian.

Solution • Problem

– How to integrate out-of-band tasks with in-band tasks transparently ?

• Solution– Out-of-band tasks

• register with framework via specific interfaces• get triggered by framework on certain events• are provided access to framework internals via specific

interfaces

Page 10: Interceptor CS562 Spring 2002 Jan 29 2002 Anand Krishnan Morgan Deters Venkita Subramonian.

UML Class Diagram

implement *

implement z4

Application

Concrete Interceptor

Interceptor

Page 11: Interceptor CS562 Spring 2002 Jan 29 2002 Anand Krishnan Morgan Deters Venkita Subramonian.

UML Class Diagram

implement *

implement

Application

Concrete Interceptor

Interceptor

Page 12: Interceptor CS562 Spring 2002 Jan 29 2002 Anand Krishnan Morgan Deters Venkita Subramonian.

UML Class Diagram

register

implement *

implement

Application

Concrete Interceptor

InterceptorDispatcher

Page 13: Interceptor CS562 Spring 2002 Jan 29 2002 Anand Krishnan Morgan Deters Venkita Subramonian.

UML Class Diagram

register

implement *

event /

trigger

implement

Application

Concrete Interceptor

InterceptorDispatcher

ConcreteFramework

Page 14: Interceptor CS562 Spring 2002 Jan 29 2002 Anand Krishnan Morgan Deters Venkita Subramonian.

UML Class Diagram

register

instantiate implement *

event /

trigger

implement

Application

Concrete Interceptor

InterceptorDispatcher

ConcreteFramework

ContextObject(CO)

Page 15: Interceptor CS562 Spring 2002 Jan 29 2002 Anand Krishnan Morgan Deters Venkita Subramonian.

UML Class Diagram

register

instantiate implement *

event /

trigger

*notify (CO)

implement

Application

Concrete Interceptor

InterceptorDispatcher

ConcreteFramework

ContextObject(CO)

Page 16: Interceptor CS562 Spring 2002 Jan 29 2002 Anand Krishnan Morgan Deters Venkita Subramonian.

UML Class Diagram

register

instantiate implement *

event /

trigger

*notify (CO)

(CO) 1..* implement

Application

Concrete Interceptor

InterceptorDispatcher

ConcreteFramework

ContextObject(CO)

Page 17: Interceptor CS562 Spring 2002 Jan 29 2002 Anand Krishnan Morgan Deters Venkita Subramonian.

UML Class Diagram

Application

Concrete Interceptor

InterceptorDispatcher

ConcreteFramework

ContextObject(CO)

Page 18: Interceptor CS562 Spring 2002 Jan 29 2002 Anand Krishnan Morgan Deters Venkita Subramonian.

Implementation

• Model Internal Behavior of Concrete Framework • Identify and model interception points

– Identify concrete framework state transitions– Partition interception points into reader / writer sets – Integrate them into state machine model– Partition them into disjoint interception groups

• Specify the context object– context object semantics– number of context object types– strategy for passing context objects to interceptors

• Per-registration / Per-event

Page 19: Interceptor CS562 Spring 2002 Jan 29 2002 Anand Krishnan Morgan Deters Venkita Subramonian.

Implementation

• Specify the interceptors• Specify the dispatchers

– interceptor registration interface– dispatcher callback interface

• Implement CallBack mechanisms in Concrete Framework

• Implement Concrete Interceptors

Page 20: Interceptor CS562 Spring 2002 Jan 29 2002 Anand Krishnan Morgan Deters Venkita Subramonian.

Interceptor Themes• A priori knowledge of engineering context

– Have you covered all the bases?• Flexibility

– How much influence can the Interceptor have?• Performance

– How simple can the Interceptor model be?• "in-band" vs. "out-of-band“

– Are the concerns that Interceptors realize orthogonal?

Page 21: Interceptor CS562 Spring 2002 Jan 29 2002 Anand Krishnan Morgan Deters Venkita Subramonian.

Generic Interceptors?

• Templatization of context object?– Use context_traits to achieve compile-time

negotiation of dispatcher & interceptor

Page 22: Interceptor CS562 Spring 2002 Jan 29 2002 Anand Krishnan Morgan Deters Venkita Subramonian.

Interceptors as a Language Construct

• Interception becomes 1st class language concern• Interception points are language constructs

– Variable mutation, method execution, object instantiation, etc...

• Concrete Framework need not be specially prepared for extension– This is a major consequence

• Aspect-Oriented Programming (AOP)

Page 23: Interceptor CS562 Spring 2002 Jan 29 2002 Anand Krishnan Morgan Deters Venkita Subramonian.

Interceptors and AOP• Join Points

– Language constructs (execution/data, static/dynamic)

– Correspond to interception points• Aspect

– Collection of (possibly abstract) Interceptors– Specifies the join points to operate on– Attach advice to a particular place in execution (or

piece of data) in the system, reflectively reason about its place in the system

Page 24: Interceptor CS562 Spring 2002 Jan 29 2002 Anand Krishnan Morgan Deters Venkita Subramonian.

Interceptors as a Language Construct:Examples

• Component Configurator– Infrequently-used features (e.g., backward-compatible

protocol support) can be loaded, unloaded without the application being aware of it

• Customization– Quality of Service– Fault-Tolerance

Page 25: Interceptor CS562 Spring 2002 Jan 29 2002 Anand Krishnan Morgan Deters Venkita Subramonian.

+ Separation of Concerns

+ (Future) Flexibility

+ Reusability/Portability

− Efficiency/Heterogenity

− Evil Interceptors

Consequences

Page 26: Interceptor CS562 Spring 2002 Jan 29 2002 Anand Krishnan Morgan Deters Venkita Subramonian.

Interceptor Variants• Bind Interceptor - Fault Tolerance• Client Request Interceptor - Load Balancing• Interceptor Proxy / Delegator - Customized

Service• Portable Interceptor• Strategies

– Single Interceptor Per Dispatcher– Interceptor Factory– Implicit Interceptor Registration

• Component Configurator Pattern• similar (partly) to AOP -- AOP languages can differ• load from a library at runtime, Concrete Framework creates

the Interceptors

Page 27: Interceptor CS562 Spring 2002 Jan 29 2002 Anand Krishnan Morgan Deters Venkita Subramonian.

Relationships to Other Patterns

• Chain of Responsibility (single handler)• Observer/Publisher-Subscriber (notification)• Template Method (localized interception)

– Interceptor reaches across multiple layers• Pipes & Filters• Reflection