| <?php require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php"); require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); $App = new App(); $Nav = new Nav(); $Menu = new Menu(); include($App->getProjectCommon()); # All on the same line to unclutter the user's desktop' |
| # Begin: page-specific settings. Change these. |
| $pageTitle = "Equinox Weaving"; |
| $pageKeywords = "equinox, osgi, framework, runtime, incubator, weaving, aspects"; |
| $pageAuthor = "Equinox committers"; |
| $html = <<<EOHTML |
| |
| <div id="midcolumn"> |
| <h2>$pageTitle</h2> |
| |
| |
| <p>The purpose of Equinox Weavong is to allow developers to use the Equinox together with AspectJ by combining the benefits |
| of both worlds. Using a load-time weaving extension you are able to add AspectJ aspects to your bundle-based system |
| just by putting them into general OSGi bundles. It does not matter if the pointcuts you defined inside the aspects contain |
| join points that are defined by classes within the same bundle or any other bundle in your installation. The load-time |
| weaving extension will take care that your aspects are woven with the appropriate classes at load-time.</p> |
| <p>To illustrate this lets assume the following situation: You would like to write an aspect that traces something within |
| the JDT plug-ins of Eclipse. Without some kind of load-time aspect weaving you would somehow need to recompile those JDT |
| plug-ins using AJDT (for example) together with your aspect. By using the load-time aspect weaving extension all you need |
| is to implement your aspect and add that bundle to your system. The load-time aspect weaving extension takes care of weaving |
| your aspect with the JDT code as it is loaded. And it doesn't matter if a new JDT is installed by the user later on. The |
| next time your application is started the load-time aspect weaving will take care of weaving your aspect into these bundles |
| as well, if necessary.</p> |
| <p>With this technology is becomes possible to modularize crosscutting concerns across different plug-ins while keeping the |
| idea of separate compilation for bundles.</p> |
| |
| |
| |
| <h3>Working with Equinox Weaving</h3> |
| <p><strong><a href="http://wiki.eclipse.org/Equinox_Weaving_QuickStart">Quick Start Guide</a></strong> - |
| See the quick start guide for getting up and running aspect weaving with Equinox.</p> |
| |
| |
| <h3>Weaving Bundles</h3> |
| <p>The Weaving work component consists of several bundles maintained in Eclipse |
| CVS repository projects. See the <a href="../bundles/resources.php">resources</a> page |
| for information on repository location and access. In general |
| the name of the project matches the symbolic name of the resultant bundle.</p> |
| <table BORDER=0 CELLSPACING=5 CELLPADDING=2 WIDTH="100%" > |
| <tr> |
| <td align=RIGHT valign=TOP><img src="/equinox/images/arrow.png" /></td> |
| <td><b><a name="http" id="http"></a>Weaving Hook (<a href="http://dev.eclipse.org/viewcvs/viewvc.cgi/org.eclipse.equinox/weaving/bundles/org.eclipse.equinox.weaving.hook/?root=RT_Project">org.eclipse.equinox.weaving.hook</a>)</b> <A HREF="#legend" style="color:green;">status:green</a><br> |
| This is the framework extension project containing the hooks to insert bytecode weaving and caching at load-time.</td> |
| </tr> |
| <tr> |
| <td width="2%" align=RIGHT valign=TOP><img src="/equinox/images/arrow.png" /></td> |
| <td width="98%"><b><a name="http.registry" id="http.registry"></a>AspectJ Weaving (<a href="http://dev.eclipse.org/viewcvs/viewvc.cgi/org.eclipse.equinox/weaving/bundles/org.eclipse.equinox.weaving.aspectj/?root=RT_Project">org.eclipse.equinox.weaving.aspectj</a>)</b> </a><A HREF="#legend" style="color:green;">status:green</a><br> |
| This bundle contains the bridge to use AspectJ as load-time weaving implementation.</td> |
| </tr> |
| <tr> |
| <td align=RIGHT valign=TOP><img src="/equinox/images/arrow.png" /></td> |
| <td><b><a name="servletbridge" id="servletbridge"></a>Standard Caching (<a href="http://dev.eclipse.org/viewcvs/viewvc.cgi/org.eclipse.equinox/weaving/bundles/org.eclipse.equinox.weaving.caching/?root=RT_Project">org.eclipse.equinox.weaving.caching</a>)</b> <A HREF="#legend" style="color:green;">status:green</a><br> |
| This bundle provides a caching for woven bytecode for standard Java virtual machines.</td> |
| </tr> |
| <tr> |
| <td align=RIGHT valign=TOP><img src="/equinox/images/arrow.png" /></td> |
| <td><b><a name="http.servlet" id="http.servlet"></a>J9-Specific Caching (<a href="http://dev.eclipse.org/viewcvs/viewvc.cgi/org.eclipse.equinox/weaving/bundles/org.eclipse.equinox.weaving.caching.j9/?root=RT_Project">org.eclipse.equinox.weaving.caching.j9</a>)</b> <A HREF="#legend" style="color:green;">status:green</a><br> |
| This bundle contains a cache alternative cache implementation that uses IBM J9 VM shared classes for caching woven classes.</td> |
| </tr> |
| </table> |
| |
| <p><A name="legend"> </A><b>Status key</b><br> |
| <FONT COLOR="GREEN">green</font> - bundle is production ready. <br> |
| <FONT COLOR="red">red</font> - bundle development is in progress. </p> |
| <p>The team typically develops using Eclipse itself so getting and managing the |
| projects is quite straightforward. Simply start Eclipse, and use <strong>Import > CVS > Projects |
| from CVS</strong>. Enter the repo access information and choose the projects |
| you want to load into the workspace. </p> |
| <p>If you are working without Eclipse (gads! :-) then use your favorite CVS client |
| and check out the relevant projects.</p> |
| |
| |
| <h3>OSGi Weaving Specification vs. Equinox Weaving</h3> |
| <p> |
| Equinox Weaving and the OSGi Weaving Specification are separate things at the moment. The general Equinox OSGi runtime |
| implements the OSGi Weaving Specification out of the box. This allows you to implement and inject our own |
| bytecode modifiers into the OSGi runtime. Equinox Weaving was implemented a long time before the OSGi Weaving Specification |
| was available, mostly to allow AspectJ aspects to be woven into bundles at load-time. Therefore Equinox Weaving uses |
| Equinox-specific hooks to inject bytecode weaving into the runtime.</p> |
| <p><strong>When to use what?</strong></p> |
| <p>If you are looking towards implementing your own bytecode modifier for OSGi to do some special kind of bytecode |
| manipulation at load-time, you should take a look at the hooks provided by the OSGi Weaving Specification. If you wanna |
| use a ready-to-use aspect weaving solution for AspectJ and also wanna have caching of woven bytecode to improve |
| performance and footprint at the second startup, you should take a look at using Equinox Weaving.</p> |
| <p><strong>Outlook</strong></p> |
| <p>The future plan is to have the AspectJ weacing and caching parts of Equinox Weaving being reimplemented on |
| top of the OSGi Weaving Specification. Contributions to this are highly welcome!</p> |
| |
| <h3>History</h3> |
| <p>The project was developed under the name "Equinox Aspects" as part of the incubator of the Equinox project some |
| time ago. Therefore if you find resources calling it Equinox Aspects, thats we this comes from. Equinox Aspects graduated |
| and was renamed into Equinox Weaving within the Helios release timeframe.</p> |
| |
| <h3>Committers</h3> |
| <p>The following people are committers on the Equinox Weaving component:</p> |
| <ul> |
| <li>Martin Lippert, VMware</li> |
| </ul> |
| <p>Previous, now inactive committers:</p> |
| <ul> |
| <li>Matthew Webster, IBM</li> |
| <li>Heiko Seeberger, WeigleWilczek</li> |
| </ul> |
| |
| </div> |
| |
| EOHTML; |
| generateRapPage( $App, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html ); |
| ?> |