35
Merging Aspects Merging Aspects and Metadata and Metadata A Successful Experience A Successful Experience Eduardo Eduardo Guerra Guerra Roberto Roberto Perillo Perillo

Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

Merging Aspects Merging Aspects and Metadataand Metadata

A Successful ExperienceA Successful Experience

Eduardo Eduardo GuerraGuerra

RobertoRobertoPerilloPerillo

Page 2: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

THANKS!

AB-C2

Page 3: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

Important Concepts

Application Requirements

Software Architecture

Implementation Details

Impacts

Page 4: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

ImportantConcepts

Page 5: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

Aspect-oriented programming is a programming paradigm which aims to increase modularity allowing the separation of crosscutting concerns.

Page 6: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

Aspects can intercept the execution of methods to introduce a new crosscutting behavior.

Page 7: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

metadata =data

data

abou

t

@Goodpublic String method( int n );

intrinsic metadata

domain-specific metadata

Page 8: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

definition

<XML>

@Annotation

programatic()

database

conventions

metadata

Page 9: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

Metadata

ASPECT

Aspects can use custom metadata to identify where it should act and

to customize its behavior.

Page 10: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

FACTAspects and

custom metadata are rarely

applied in real applications!

Page 11: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

Afraid of new technologies

Lack of Knowledge

Not enough successful cases

Page 12: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

Requirements

Page 13: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

Web application

CriticalAveragenumber of users

Information shouldreach fast its destination

Page 14: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

ReverseAJAX

GranularAccess Control

Page 15: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

InstanceValidation

LoggingChanges

Page 16: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

Integrationwith 3 OtherApplications

Page 17: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

Productivity

EvolutionaryArchitecture

Challenge

Page 18: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

ApplicationApplicationArchitectureArchitecture

Page 19: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

JSP

Struts 2

POJOs / Spring

DAO / JPA

BD

+getAtribute1()+setAtribute1()+getAtribute2()+setAtribute2()+getAtribute3()+setAtribute3()

DomainClass-atribute1-atribute2-atribute3

ApplicationArchitecture

Page 20: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

DAOs

Services

Controllers

+ classes

Page 21: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

JSP

Struts 2

POJOs / Spring

DAO / JPA

BD

Struts Interceptors

AspectJ

Page 22: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

Services + Metadata

Define how each service should be handled when intercepted by the aspects.

Page 23: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

Services

General and reusable services

How to diferentiate aspect behavior for each domain class

used by the service?

Page 24: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

+getAtribute1()+setAtribute1()+getAtribute2()+setAtribute2()+getAtribute3()+setAtribute3()

DomainClass-atribute1-atribute2-atribute3 + Metadata

Describe specific information that define how the aspect should handle an interception including that domain class.

Page 25: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

ImplementationImplementationDetaisDetais

Page 26: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

Finding Domain Class

@DomainClass(Entity.class)public void m(Object o, Class c);

2. Search for an object or a class that represents a domain

1. Search for @DomainClass annotation

Page 27: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

Example:Reverse AJAX

Needed in many functionalities

Hardworking to create

Deal with a complex framework

Page 28: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

+getAtribute1()+setAtribute1()+getAtribute2()+setAtribute2()+getAtribute3()+setAtribute3()

DomainClass-atribute1-atribute2-atribute3change

update

Page 29: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

@NotifyPage(page="page", topics="region")public class Pessoa {...}

@DataModificationpublic E save(E p) {...}

Service method should indicate that it modifies the domain entity

Domain class should indicate witch page and region should be updated

Page 30: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

IMPACTIMPACT

Page 31: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

Metadata

Aspects

Page 32: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

Application Domain

Architecture

Page 33: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

Increased ProductivityIncreased Productivity

Page 34: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

Reverse AJAX1Instance Validation

Granular Access Control2Conditional Reverse AJAXWeb Service Integration (1 app)

Auditing3+ Web Service Integration (2 app)

Page 35: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3

Metadata is used by the developers as if they didn't know that there is an aspect processing them