|  | <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> |