Experiences using Equinox Aspects
      in a real-world project


                                         Martin Lippert ...
Overview
• Quick overview of AOP
• AOP in the OSGi world?
    What does it mean?
• Equinox Aspects: Aspect Weaving for OS...
Aspect-oriented programming
• Modularity improved a lot by OO concepts
    Classes, interfaces
    Information hiding, p...
AOP today
• Meanwhile AOP is an established concept
    Useful for many situations
    Mostly technology-centric usage s...
AspectJ = AOP for Java
• AspectJ is a powerful language extension for Java
    Hosted as an Eclipse project
    Still ve...
The Standard Use Case



            ClassA                   ClassB                   ClassC                             ...
Library Aspects



            ClassA                   ClassB                   ClassC                             Aspect...
Aspects for Existing Code



            ClassA                             ClassB                   ClassC               ...
Java™ + OSGi™
• OSGi™:
    “A dynamic module system for Java™”


• Modularity
• Dynamic
• Service-Oriented




  Experien...
What does it mean for us?
• We would like to modularize
    … classes and interfaces into bundles
    … and aspects into...
Intra-Bundle Aspects



          ClassA                   ClassB                                        ClassC           ...
Co-Op Bundle Aspects



     ClassA                   ClassB                              ClassC                          ...
Abstract Aspect Bundles



         ClassA                   ClassB                                                       ...
Dynamics for Aspect Bundles
• OSGi allows dynamic bundle
    … installs
    … uninstalls
    … updates

• Same should b...
Equinox Aspects
• Equinox Incubator Project
    http://www.eclipse.org/equinox/incubator/aspects


• Enables AspectJ/AOP ...
Features
• Load-time aspect weaving
    No recompilation of existing bundles necessary
    Supports full aop.xml load-ti...
How to use Equinox Aspects?




 Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Ma...
Install AJDT
• AJDT contains:
    AspectJ runtime libraries.
    AspectJ integration into SDK (tooling).
• Supported ver...
Install Equinox Aspects
• Download Equinox Aspects 1.1.0 from www.eclipse.org/
  equinox/incubator/aspects.
• Install into...
Co-locate org.*.osgi




 Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Li...
How to write an aspect bundle?
• “Hello world!” on Equinox Console:




• Aspect shaking the output:




  Experiences usi...
How to write an aspect bundle?
• Create a plug-in project.
• Add AspectJ nature.
• Write your aspects.
• Export packages c...
How to write an aspect bundle?
• Define your aspects in aop.xml.
• Export packages containing aop.xml files.
• Re-export d...
How to write an aspect bundle?
• The aspect bundle must define the “target”:
    Which bundles are to be woven?
• Use Ecl...
How to configure Equinox Aspects?
• Tell Equinox to use the Equinox Aspects framework
  extension:
       -Dosgi.framework...
Is there a real-world project?
• Allianz Business System (ABS)
    Mission critical system at the core of the insurance b...
ABS Client architecture

UI:
PowerBuilder (Native)                                                  Java-PowerBuilder
    ...
Top requirements for mission critical systems




                 Availability
                                          ...
How to ensure performance?




                 Availability
                                                 Performance
...
Performance logging
• Define service level agreements for critical processes.
    E.g.: “Customer-search must show result...
Performance logging
• Define service level agreements for critical processes.
    E.g.: “Customer-search must show result...
Challenge: Performance Logging

UI:
PowerBuilder (Native)                                        Java-PB                  ...
Challenge: Performance Logging



                                                              Java-PB                   ...
Why use load-time weaving?
• Recompiling of framework code not allowed
    But end-points of measurement in framework cod...
For more info on this success story …



                 … read the article
         “Performance-Logging mit AspectJ”
  ...
What’s next for Equinox Aspects?
• “Ease of Use”
    Quick start tutorial
    More examples
    Maybe cheat sheets
• Ad...
Conclusions
• Equinox Aspects brings full AOP to OSGi
    Via integrated load-time weaving
    Combines OSGi and AOP mod...
Thank you for your attention!


Q&A


Heiko Seeberger: heiko.seeberger@metafinanz.de
Martin Lippert: martin.lippert@akquin...
Upcoming SlideShare
Loading in …5
×

JAX 08 - Experiences using Equinox Aspects in a real-world Project

1,188 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,188
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
30
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

JAX 08 - Experiences using Equinox Aspects in a real-world Project

  1. 1. Experiences using Equinox Aspects in a real-world project Martin Lippert (akquinet it-agile GmbH) Heiko Seeberger (metafinanz GmbH) © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license | April 24th, 2008
  2. 2. Overview • Quick overview of AOP • AOP in the OSGi world?  What does it mean? • Equinox Aspects: Aspect Weaving for OSGi  Introduction  Demo  Real-world project: Allianz Business System • What’s next for Equinox Aspects? • Conclusions Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  3. 3. Aspect-oriented programming • Modularity improved a lot by OO concepts  Classes, interfaces  Information hiding, polymorphism, inheritance • AOP adds additional concepts  To modularize so called “cross-cutting concerns” ClassA ClassB ClassC AspectX ConcernX ConcernX ConcernX ConcernX Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  4. 4. AOP today • Meanwhile AOP is an established concept  Useful for many situations  Mostly technology-centric usage scenarios • Established languages and frameworks available  AspectJ: powerful language extension to Java  Spring-AOP: simple to use AOP for enterprise apps • Used in production:  Spring itself makes heavy use of AOP concepts  App-servers are using AOP inside  Direct AOP selectively used in enterprise apps Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  5. 5. AspectJ = AOP for Java • AspectJ is a powerful language extension for Java  Hosted as an Eclipse project  Still very active (latest release Dezember 2007, upcoming release 1.6.0 close) • AJDT:  Great tooling for the Eclipse IDE  Comes close to the JDT feeling • Spring-IDE:  Integrates AJDT with Spring-AOP  AJDT feeling for Spring apps Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  6. 6. The Standard Use Case ClassA ClassB ClassC AspectX ConcernX ConcernX ConcernX ConcernX Project Sources Single Application Classpath Java Virtual Machine Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  7. 7. Library Aspects ClassA ClassB ClassC AspectX ConcernX ConcernX ConcernX ConcernX Project Sources JAR Single Application Classpath Java Virtual Machine Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  8. 8. Aspects for Existing Code ClassA ClassB ClassC AspectX ConcernX ConcernX ConcernX ConcernX JARs Project Sources Single Application Classpath Java Virtual Machine Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  9. 9. Java™ + OSGi™ • OSGi™:  “A dynamic module system for Java™” • Modularity • Dynamic • Service-Oriented Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  10. 10. What does it mean for us? • We would like to modularize  … classes and interfaces into bundles  … and aspects into bundles • The obvious next step:  modularize cross-cutting concerns into bundles • Takes modularity to the next level Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  11. 11. Intra-Bundle Aspects ClassA ClassB ClassC AspectX ConcernX ConcernX Bundle A Bundle B Bundle-Classpath Bundle-Classpath Java Virtual Machine Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  12. 12. Co-Op Bundle Aspects ClassA ClassB ClassC AspectX ConcernX ConcernX ConcernX ConcernX Bundle A Bundle B Bundle C Bundle-Classpath Bundle-Classpath Bundle-Classpath Java Virtual Machine Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  13. 13. Abstract Aspect Bundles ClassA ClassB Abstract Concrete Aspect Aspect ConcernX ConcernX ConcernX ConcernX Bundle A Bundle B Bundle-Classpath Bundle-Classpath Java Virtual Machine Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  14. 14. Dynamics for Aspect Bundles • OSGi allows dynamic bundle  … installs  … uninstalls  … updates • Same should be possible for aspect bundles  … dynamic installs, uninstalls and updates of aspect bundles  … dynamic installs, uninstalls and updates of bundles that are affected by aspect bundles Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  15. 15. Equinox Aspects • Equinox Incubator Project  http://www.eclipse.org/equinox/incubator/aspects • Enables AspectJ/AOP usage for OSGi  Supports all presented use-cases  Ready-to-use • Setting  Works with Eclipse 3.3 and 3.4  Works with AJDT 1.5.1, 1.5.2, 1.6.0 Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  16. 16. Features • Load-time aspect weaving  No recompilation of existing bundles necessary  Supports full aop.xml load-time weaving config of AspectJ • Caching for woven classes Load-time weaving happens only once  Second time startup is same as without aspects  Available for standard JREs and IBM J9 shared classes  Supports configuration switching  • Dynamic installation of aspect bundles  Silent update of bundles to be woven again  Those bundles must behave nicely within dynamic situations Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  17. 17. How to use Equinox Aspects? Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  18. 18. Install AJDT • AJDT contains:  AspectJ runtime libraries.  AspectJ integration into SDK (tooling). • Supported versions (Eclipse 3.3):  1.5.1 → AspectJ 1.5.4  1.5.2 → AspectJ 1.6 • www.eclipse.org/ajdt Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  19. 19. Install Equinox Aspects • Download Equinox Aspects 1.1.0 from www.eclipse.org/ equinox/incubator/aspects. • Install into Eclipse installation directory, do not use an extension location! • Alternatively define a target which co-locates org.aspectj.osgi and org.eclipse.osgi. Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  20. 20. Co-locate org.*.osgi Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  21. 21. How to write an aspect bundle? • “Hello world!” on Equinox Console: • Aspect shaking the output: Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  22. 22. How to write an aspect bundle? • Create a plug-in project. • Add AspectJ nature. • Write your aspects. • Export packages containing aspects. Demo … Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  23. 23. How to write an aspect bundle? • Define your aspects in aop.xml. • Export packages containing aop.xml files. • Re-export dependency on org.aspectj.runtime bundle. Demo … Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  24. 24. How to write an aspect bundle? • The aspect bundle must define the “target”:  Which bundles are to be woven? • Use Eclipse-SupplementBundle header. Eclipse-SupplementBundle: demo.* Bundle demo.a demo.* Aspect bundle Bundle demo.b Bundle xyz Demo … Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  25. 25. How to configure Equinox Aspects? • Tell Equinox to use the Equinox Aspects framework extension: -Dosgi.framework.extensions=org.aspectj.osgi • Declare where to find aop.xml-files: -Dorg.aspectj.weaver.loadtime.configuration= org/aspectj/aop.xml Demo … Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  26. 26. Is there a real-world project? • Allianz Business System (ABS)  Mission critical system at the core of the insurance business.  Addresses all major concerns in the various classes of insurance.  Online, offline and integration scenarios. • ABS Client  Rich Client application for  call center and  clerks. Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  27. 27. ABS Client architecture UI: PowerBuilder (Native) Java-PowerBuilder Abstract UI (DSL) Business Logic: Eclipse Plug-ins Persistence: “Orbit” (Java ORM) A3k framework Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  28. 28. Top requirements for mission critical systems Availability Performance Features Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  29. 29. How to ensure performance? Availability Performance Features Performance logging! Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  30. 30. Performance logging • Define service level agreements for critical processes.  E.g.: “Customer-search must show result within two seconds.” • Measure the execution of these processes. • Analyze and report the measured data. Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  31. 31. Performance logging • Define service level agreements for critical processes.  E.g.: “Customer-search must show result within two seconds.” • Measure the execution of these processes:  Log start time.  Log end time. • Analyze and report the measured data. Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  32. 32. Challenge: Performance Logging UI: PowerBuilder (Native) Java-PB end DSL start Business Logic: Eclipse Plug-ins Persistence: “Orbit” (Java ORM) Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  33. 33. Challenge: Performance Logging Java-PB end DSL start • Start points in generated code! • End points in framework code! ⇒ No way to use standard Java. ⇒ Only AOP / AspectJ applies. Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  34. 34. Why use load-time weaving? • Recompiling of framework code not allowed  But end-points of measurement in framework code  Load-time weaving easy to use for all kinds of bundles • Compile-time weaving was not mature in PDE build!  We used Eclipse 3.2.0  Building AspectJ in PDE only possible with AJDT patch available since AJDT 1.4.1 (for Eclipse 3.2.1)  We tried, but … Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  35. 35. For more info on this success story … … read the article “Performance-Logging mit AspectJ” in the upcoming Eclipse Magazin (Vol. 15). Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  36. 36. What’s next for Equinox Aspects? • “Ease of Use”  Quick start tutorial  More examples  Maybe cheat sheets • Advanced tooling  Bring AJDT navigation and debugging features to OSGi • More dynamics • Improved caching • Graduation…  Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  37. 37. Conclusions • Equinox Aspects brings full AOP to OSGi  Via integrated load-time weaving  Combines OSGi and AOP modularity features • Can be used for production systems today • Give it a try http://www.eclipse.org/equinox/incubator Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license
  38. 38. Thank you for your attention! Q&A Heiko Seeberger: heiko.seeberger@metafinanz.de Martin Lippert: martin.lippert@akquinet.de Experiences using Equinox Aspects in a real-world project | © 2008 by Heiko Seeberger, Martin Lippert; made available under Creative Commons Att. Nc Nd 2.5 license

×