Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1()...
Transcript of Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1()...
![Page 1: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/1.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/2.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/3.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/4.jpg)
ImportantConcepts
![Page 5: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/5.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/6.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/7.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/8.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/9.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/10.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/11.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/12.jpg)
Requirements
![Page 13: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/13.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/14.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/15.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/16.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/17.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/18.jpg)
ApplicationApplicationArchitectureArchitecture
![Page 19: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/19.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/20.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/21.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/22.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/23.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/24.jpg)
+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](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/25.jpg)
ImplementationImplementationDetaisDetais
![Page 26: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/26.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/27.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/28.jpg)
+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](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/29.jpg)
@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](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/30.jpg)
IMPACTIMPACT
![Page 31: Merging Aspects and Metadata · Struts 2 POJOs / Spring DAO / JPA BD +getAtribute1() +setAtribute1() +getAtribute2() +setAtribute2() +getAtribute3() +setAtribute3() DomainClass-atribute1-atribute2-atribute3](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/31.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/32.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/33.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/34.jpg)
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](https://reader035.fdocuments.us/reader035/viewer/2022081407/60493cba6dc28d77f3426e22/html5/thumbnails/35.jpg)
Metadata is used by the developers as if they didn't know that there is an aspect processing them
“
”