| <html> |
| <head> |
| <title>AspectJ and AspectWerkz to Join Forces</title> |
| <link rel="stylesheet" href="http://www.eclipse.org/default_style.css" type="text/css"> |
| </head> |
| <body> |
| |
| <h1>AspectJ and AspectWerkz to Join Forces</h1> |
| |
| <p>The AspectJ <i> |
| <a href="#aspectj">(1)</a> |
| </i>and AspectWerkz <i> |
| <a href="#aspectwerkz">(2)</a> |
| </i>projects have agreed to work together as one team to produce a single |
| aspect-oriented programming platform building on their complementary strengths and |
| expertise. The first release from this collaboration will be AspectJ 5, which extends |
| the AspectJ language to support an annotation-based development style in addition to the |
| familiar AspectJ code-based style. AspectJ 5 will also provide full AOP support for the |
| new Java(tm) 5 language features.</p> |
| |
| <table BORDER=0 CELLSPACING=5 CELLPADDING=2 WIDTH="100%" > |
| <tr> |
| <td ALIGN=LEFT VALIGN=TOP BGCOLOR="#0080C0"><b> |
| <font color="#FFFFFF" face="Arial,Helvetica"> A Natural Step...</font></b></td> |
| </tr> |
| </table> |
| |
| <p>The AspectWerkz language has been moving closer and closer to that of AspectJ. The key |
| difference is that whereas AspectJ uses a syntax that complements Java as defined in the |
| original JLS (Java Language Specification), AspectWerkz supports both annotation and XML |
| based styles of development. In addition, AspectWerkz has focused largely on close |
| integration of load-time weaving into J2EE application environments while AspectJ has |
| focused more on (static) compilation and weaving, runtime performance, and tools support.</p> |
| |
| <p>A complete AOP environment needs a strong conceptual model, first-class IDE support, a |
| type-safe language, high performance, support for a variety of weaving times and |
| deployment modes, an aspect library, and the ability to be easily integrated into |
| existing application environments. Full integration with the new features of Java 5 is |
| essential, including annotations, generics, auto-boxing, covariance, varargs, and enums.</p> |
| |
| <p>The combined strengths of the two teams will enable us to deliver a more comprehensive |
| technology suite more quickly than either team could alone. The backing of two major |
| vendors (IBM and BEA) and a large open source community will accelerate the adoption of AOP in the |
| enterprise. AspectJ 5 will continue as a fully open-source project on Eclipse.org.</p> |
| |
| <p>Following the AspectWerkz 2.0 release, the AspectWerkz developers will be joining the |
| AspectJ project to bring the key features of AspectWerkz to the AspectJ platform. This |
| will begin with an extension to the AspectJ language to support an annotation-based |
| style of development, and with tighter integration of load-time weaving for AspectJ in |
| the J2EE environment. A smooth migration path for existing AspectWerkz users is a key |
| priority in the development and release planning.</p> |
| |
| <table BORDER=0 CELLSPACING=5 CELLPADDING=2 WIDTH="100%" > |
| <tr> |
| <td ALIGN=LEFT VALIGN=TOP BGCOLOR="#0080C0"><b> |
| <font color="#FFFFFF" face="Arial,Helvetica"> Development Plans</font></b></td> |
| </tr> |
| </table> |
| |
| <p>We anticipate delivery of the first AspectJ 5 release in March 2005 (with milestone |
| releases ahead of that date). This release will contain full support for the new |
| features of Java 5, and support for an annotation-based development style in addition to |
| the more familiar AspectJ code-based style. We informally call the set of annotations |
| for the annotation style of development the "@AspectJ" annotations. See the |
| work-in-progress AspectJ 5 Developer's Notebook <i> |
| <a href="#ajdkNotebook">(3)</a> |
| </i>for details of these features. The AspectJ Development Tools (AJDT) for Eclipse will |
| also be enhanced to provide support for the annotation style.</p> |
| |
| <p>AspectJ 5 will also include an aspect library. Just as with the JDK, over time much of |
| the value in the AspectJ 5 platform will come from these libraries, and they will |
| provide an even faster way for new users to become productive working with AspectJ |
| "straight out of the box". </p> |
| |
| <p>The March release is just the first of several AspectJ 5 releases planned for 2005. |
| Follow-on releases will deliver more of the load-time weaving features of AspectWerkz. |
| As part of this work, we will also enable support for JRockit optimizations. Adding to |
| the aspect libraries shipped with AspectJ 5, and reducing further the time and memory |
| consumption of the weaver are also high-priority items.</p> |
| |
| <table BORDER=0 CELLSPACING=5 CELLPADDING=2 WIDTH="100%" > |
| <tr> |
| <td ALIGN=LEFT VALIGN=TOP BGCOLOR="#0080C0"><b> |
| <font color="#FFFFFF" face="Arial,Helvetica"> AspectJ 5</font></b></td> |
| </tr> |
| </table> |
| |
| <p>AspectJ 5 will have an even larger and more active user community formed from bringing |
| together the existing AspectJ and AspectWerkz users. The existing AspectJ website and |
| mailing lists will be used to support this community. The development team working on |
| AspectJ 5 will also be larger than either of the current AspectJ and AspectWerkz teams, |
| accelerating the rate of progress.</p> |
| |
| <p>In AspectJ 5 the AspectJ language is extended to support both a code style and an |
| annotation style of development. These provide equivalent ways to write AspectJ |
| programs, and give the broadest support possible for the mix of development tools, IDEs, |
| and processes used in development projects today. The Eclipse AspectJ Development Tools |
| (AJDT) will work with the full AspectJ language, supporting any mixture of code and |
| annotation style development.</p> |
| |
| <p>AspectJ 5 will also have extended deployment options for load-time weaving, supporting |
| aop.xml deployment files in the style of AspectWerkz.</p> |
| |
| <p>AspectJ 5 users have access to a strong and growing set of books, articles, educational |
| materials, training and consultancy. The following is just a selection of the books |
| published or soon to be published:</p> |
| |
| <ul> |
| <li> |
| <a href="http://www.manning.com/laddad">AspectJ in Action</a> |
| </li> |
| <li> |
| <a |
| href="http://eu.wiley.com/WileyCDA/WileyTitle/productCd-0471431044.html">Mastering AspectJ</a> |
| </li> |
| <li> |
| <a href="http://www.awprofessional.com/title/0321245873">Eclipse AspectJ: |
| Aspect-oriented programming with Eclipse and the AspectJ Development Tools</a> |
| </li> |
| <li> |
| <a href="http://www.oreilly.com/catalog/aspectjckbk/">The AspectJ Cookbook</a> |
| </li> |
| <li> |
| <a href="http://www.awprofessional.com/title/0321268881">Aspect-Oriented Software |
| Development with Use Cases</a> |
| </li> |
| <li> |
| <a href="http://www.aw-bc.com/catalog/academic/product/0,1144,0321246748,00.html"> |
| Aspect-Oriented Analysis and Design</a> |
| </li> |
| </ul> |
| |
| <p>In addition, AspectJ 5 benefits from a wide body of research, ranging from core |
| aspect-oriented programming and design, to tools support such as refactorings, and an |
| additional compiler called abc <i> |
| <a href="#abc">(4)</a> |
| </i>for the AspectJ language developed jointly by Oxford University, McGill, and Aarhus University.</p> |
| |
| <p>An increasing number of universities are also now teaching aspect-oriented programming |
| courses using AspectJ, creating a flow of students into industry with knowledge of AOP.</p> |
| |
| <table BORDER=0 CELLSPACING=5 CELLPADDING=2 WIDTH="100%" > |
| <tr> |
| <td ALIGN=LEFT VALIGN=TOP BGCOLOR="#0080C0"><b> |
| <font color="#FFFFFF" face="Arial,Helvetica"> Frequently Asked Questions</font></b></td> |
| </tr> |
| </table> |
| |
| <ol> |
| <li><a href="#q1">What does it mean for AspectJ 5 to support more than one development style?</a></li> |
| <li><a href="#q2">Why should an existing AspectJ user be interested in the @AspectJ annotations?</a></li> |
| <li><a href="#q3">Can I use both the code style and the @AspectJ annotation style in the same application?</a></li> |
| <li><a href="#q4">Will AJDT support the new annotation-based style?</a></li> |
| <li><a href="#q5">Will I be forced to use Eclipse to develop AspectJ applications?</a></li> |
| <li><a href="#q6">How hard will it be to port existing AspectWerkz applications to AspectJ 5?</a></li> |
| <li><a href="#q7">When can I begin moving my AspectWerkz applications to AspectJ 5?</a></li> |
| <li><a href="#q8">What about the doclet syntax that AspectWerkz supports?</a></li> |
| <li><a href="#q9">Will AspectJ 5 support aop.xml deployment descriptors?</a></li> |
| <li><a href="#q10">Will you support an XML syntax for defining aspects too?</a></li> |
| <li><a href="#q11">Will the existing AspectWerkz releases continue to be supported?</a></li> |
| <li><a href="#q12">What will happen to the AspectWerkz project / website / ... ?</a></li> |
| <li><a href="#q13">Will the compile/weave/runtime performance of AspectJ be impacted?</a></li> |
| <li><a href="#q14">Our company relies on AspectJ, will all these changes destabilize the implementation in |
| any way?</a></li> |
| </ol> |
| |
| <p><b><a name="q1"/>1). What does it mean for AspectJ 5 to support more than one development style?</b></p> |
| |
| <p>The code style and the annotation style using the @AspectJ annotations are just two |
| alternate spellings for the same semantics. The same compilation, weaving and tools |
| support will be used for both - and anything you learn in one style will transfer easily |
| into the other.</p> |
| |
| <p>Users who are not able to adopt the code-based style of development will be able to |
| continue developing in a familiar style, but take advantage of the AspectJ 5 tools and |
| the large body of training materials around the AspectJ language - since examples |
| written using the code style will readily move across into the annotation style.</p> |
| |
| <p>The following example shows a simple AspectJ aspect written using the existing code style.</p> |
| |
| <blockquote> <pre> |
| public aspect Authorization { |
| |
| pointcut restrictedOperation() : execution(* IRestrictedAccess+.*(..)); |
| |
| before() : restrictedOperation() { |
| // verify caller is authorized to access this |
| // operation ... |
| } |
| } |
| </pre></blockquote> |
| |
| <p>Using the @AspectJ annotations, the same aspect may be written as:</p> |
| |
| <blockquote><pre> |
| @Aspect |
| public class Authorization { |
| |
| @Pointcut("execution(* IRestrictedAccess+.*(..))") |
| void restrictedOperation() {} |
| |
| @Before("restrictedOperation()") |
| public void verifyAccess() { |
| // verify caller is authorized to access this |
| // operation ... |
| } |
| } |
| </pre></blockquote> |
| |
| <p>The important thing to note here is that both programs mean <i>exactly</i> the same thing |
| - they are semantically equivalent. They will both be treated in an identical manner by |
| the compiler, weaver, and IDE tools.</p> |
| |
| <p>Though we doubt this mix will be recommended, you could also use the annotation style and |
| the code style in combination within a single source file - since they are both part of |
| the one single AspectJ language.</p> |
| |
| <p><b><a name="q2"/>2). Why should an existing AspectJ user be interested in the @AspectJ annotations?</b></p> |
| |
| <p>An existing AspectJ user may benefit from the @AspectJ annotations when introducing |
| AspectJ to a project where the team are not able to change IDE, compilers etc.</p> |
| |
| <p>The @AspectJ annotations will be easier to work with in tools such as IntelliJ that do |
| not yet provide any AspectJ support.</p> |
| |
| <p>The @AspectJ annotations will be less likely to interfere with non-AspectJ aware source |
| code processing tools that your project team may use.</p> |
| |
| <p><b><a name="q3"/>3). Can I use both the code style and the @AspectJ annotation style in the same application?</b></p> |
| |
| <p>Yes. You will be able to use aspects developed with the code style and aspects developed |
| with the @AspectJ annotations in the same application. Combining these within the same |
| source file will be possible but not recommended.</p> |
| |
| <p><b><a name="q4"/>4). Will AJDT support the new annotation-based style?</b></p> |
| |
| <p>Yes. Eclipse itself will provide support annotations on Java classes as part of its Java |
| 5 support. The AJDT crosscutting views will work for programs developed using any |
| combination of the styles.</p> |
| |
| <p><b><a name="q5"/>5). Will I be forced to use Eclipse to develop AspectJ applications?</b></p> |
| |
| <p>No. The AspectJ project is strongly committed to providing developers the tools they need |
| whether they use an IDE or not. AspectJ has always included a command-line compiler and |
| dedicated support for ant builds, and this will not change with AspectJ 5.</p> |
| |
| <p><b><a name="q6"/>6). How hard will it be to port existing AspectWerkz applications to AspectJ 5?</b></p> |
| |
| <p>The @AspectJ annotations have been designed to be as close as possible to the AspectWerkz |
| syntax, while still preserving the semantics of the AspectJ language.</p> |
| |
| <p><b><a name="q7"/>7). When can I begin moving my AspectWerkz applications to AspectJ 5?</b></p> |
| |
| <p>Programs written for AspectWerkz will be able to be ported to use the @AspectJ |
| annotations from the 1.5.0 release onwards (currently planned for March 2005). Support |
| for some of the existing AspectWerkz deployment and runtime facilities will be available |
| at that time, with further enhancements coming in follow-on releases.</p> |
| |
| <p><b><a name="q8"/>8). What about the doclet syntax that AspectWerkz supports?</b></p> |
| |
| <p>Doclet support is not planned for the initial 1.5.0 release, but is a relatively easy |
| extension once support for the @AspectJ annotation style has been implemented. We plan |
| to make this feature available in a follow-on release shortly after 1.5.0.</p> |
| |
| <p><b><a name="q9"/>9). Will AspectJ 5 support aop.xml deployment descriptors?</b></p> |
| |
| <p>Yes. The XML-based deployment descriptors are an important piece of the J2EE integration |
| story. AspectJ 5 will also support configuration via aop.properties files for |
| environments where an XML parsing infrastructure is not available.</p> |
| |
| <p><b><a name="q10"/>10). Will you support an XML syntax for defining aspects too?</b></p> |
| |
| <p>AspectJ 5 will provide support for defining concrete sub-aspects in aop.xml files. These |
| must extend existing abstract aspects, and provide definitions for all abstract |
| pointcuts defined in those aspects. See the AspectJ 5 Developer's Notebook for more details.</p> |
| |
| <p><b><a name="q11"/>11). Will the existing AspectWerkz releases continue to be supported?</b></p> |
| |
| <p>Yes. There will be an AspectWerkz 2.0 final release, and this will be supported. We will |
| ensure that the migration path from AspectWerkz 2.0 to AspectJ 5 is as smooth as possible.</p> |
| |
| <p><b><a name="q12"/>12). What will happen to the AspectWerkz project / website / ... ?</b></p> |
| |
| <p>It will remain hosted and maintained at <a |
| href="http://aspectwerkz.codehaus.org/">http://aspectwerkz.codehaus.org</a> in support |
| of the AspectWerkz releases. Information relating to AspectJ 5 will be on the |
| <a href="http://www.eclipse.org/aspectj">AspectJ</a> website.</p> |
| |
| <p><b><a name="q13"/>13). Will the compile/weave/runtime performance of AspectJ be impacted?</b></p> |
| |
| <p>No. Our target is for AspectJ 5 compile / weave / runtime performance to be as good or |
| better than what can be achieved with AspectJ 1.2 today.</p> |
| |
| <p><b><a name="q14"/>14). Our company relies on AspectJ, will all these changes destabilize the implementation in |
| any way?</b></p> |
| |
| <p>No. The changes described in this documented are incremental changes on top of the |
| existing AspectJ codebase.</p> |
| |
| <table BORDER=0 CELLSPACING=5 CELLPADDING=2 WIDTH="100%" > |
| <tr> |
| <td ALIGN=LEFT VALIGN=TOP BGCOLOR="#0080C0"><b> |
| <font color="#FFFFFF" face="Arial,Helvetica"> References</font></b></td> |
| </tr> |
| </table> |
| |
| <p><a name="aspectj">[1]</a> <a href="http://www.eclipse.org/aspectj">AspectJ</a></p> |
| <p><a name="aspectwerkz">[2]</a> <a |
| href="http://aspectwerkz.codehaus.org">AspectWerkz</a></p> |
| <p><a name="ajdkNotebook">[3]</a> <a |
| href="http://dev.eclipse.org/viewcvs/indextech.cgi/~checkout~/aspectj-home/doc/ajdk15notebook/index.html">AspectJ |
| 5 Developer's Notebook</a> </p> |
| <p><a name="abc">[4]</a> <a href="http://www.aspectbench.org">The AspectBench |
| Compiler for AspectJ</a></p> |
| |
| <table BORDER=0 CELLSPACING=5 CELLPADDING=2 WIDTH="100%" > |
| <tr> |
| <td ALIGN=LEFT VALIGN=TOP BGCOLOR="#0080C0"><b> |
| <font color="#FFFFFF" face="Arial,Helvetica"> Trademarks</font></b></td> |
| </tr> |
| </table> |
| |
| <p>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United |
| States, other countries, or both.</p> |
| |
| <p>Other company, product, and service names may be trademarks or service marks of others.</p> |
| |
| </body> |
| </html> |