<!-- news and events section of aspectj main page -->

  <h2>News and Events</h2>

  <dl>  

   <dt>June 30th 2006, AspectJ 1.5.2 released</dt>
   <dd>AspectJ 1.5.2 is now <a href="downloads.php">available for download</a>.
   It includes approximately 60 fixes and enhancements that have been incorporated since the 1.5.1a 
   release.  For full details see the 
   <a href="doc/released/README-152.html">1.5.2 README</a>.
   </dd>
   
   <dt>June 26th 2006, AspectJ 1.5.2rc1 released</dt>
   <dd>AspectJ 1.5.2 release candidate 1 is now <a href="downloads.php">available for download</a>.
   It includes approximately 60 fixes and enhancements that have been incorporated since the 1.5.1 
   release.  For full details see the 
   <a href="doc/released/README-152.html">1.5.2 README</a>.
   </dd>
   
   <dt>April 9th 2006, Interview with Gregor Kiczales published</dt>
   <dd>A podcast <a href="http://www.se-radio.net/index.php?post_id=78154">
   interview with Gregor Kiczales</a> recorded at this year's AOSD conference
   is now available at <a href="http://www.se-radio.net">Software Engineering Radio</a>.
   The interview covers a number of topics including the history of AOP, the
   relationship of AOP to interceptors, industry acceptance of AOP, early aspects,
   and adoption strategies.
   </dd>

   <dt>April 4th 2006, AspectJ 1.5.1 released</dt>
   <dd>AspectJ 1.5.1 is now <a href="downloads.php">available for download</a>. This
   release contains a number of bug fixes and minor enhancements from 1.5.0, together
   with performance and memory usage improvements resulting in greatly reduced
   memory usage when building from within AJDT (and noticeable improvements outside
   of AJDT too). For full details see the 
   <a href="doc/released/README-151.html">1.5.1 README</a>.
   </dd>
  
   <dt>April 3rd 2006, AspectJ 5 in JDeveloper</dt>
   <dd>
     Gerard Davidson released a version of AJDT with AspectJ 5 
     for JDeveloper 10.1.3.
     To get it, use the automatic update feature in JDeveloper
     to find AspectJ via the "Open Source and Partner" update center.
   </dd>

   <dt>January 9th 2006, AOSD'06 conference registration open</dt>
   <dd>
     <table border="0">
      <tr>
        <td>
          <a href="http://aosd.net/conference?ref_url=http://www.eclipse.org/aspectj" target="_blank">
           <img src="http://aosd.net/2006/publicity/AOSD06_Button.gif" 
                border="0" alt="AOSD.06 March 20-24: Bonn, Germany" 
                title="AOSD.06"/>
          </a>
        </td>
        <td>
          The <a href="http://aosd.net/conference?ref_url=http://www.eclipse.org/aspectj" target="_blank">
          AOSD'06 conference</a> is now open for registration.
   		</td>
   	   </tr>
   	 </table>
   </dd>
   
   <dt>December 20th 2005, AspectJ 5 released</dt>
   <dd>
   At long last, we're delighted to say that AspectJ 5 is 
   here in time for Christmas! It contains a small number
   of minor fixes since RC1, plus a slight change to the
   syntax for @DeclareParents. See the 
   <a href="doc/released/README-150.html">1.5.0 README</a> for details of the release.
   You can download AspectJ 5 from the 
   <a href="downloads.php">downloads page</a>.
   </dd>
    
   <dt>September 6th, 2005, Adrian Colyer to take up position of Chief Scientist at Interface21</dt>
   <dd>Adrian Colyer, AspectJ project lead, announced today that he will be leaving his position
   at IBM to take up the post of Chief Scientist at Interface21 (the company behind Spring). 
   Adrian will still continue to be heavily involved in and to lead the AspectJ project as part
   of his new role. <a href="http://www.aspectprogrammer.org/blogs/adrian/2005/09/joining_interfa.html">More details...</a>
   </dd>
  
   
  <dt>August 1st, 2005, JRockit JVM support for AOP</dt>
   <dd>Jonas, Alex and Joakim - the CTO of JRockit - describe JVM support for
     AOP in BEA's JRockit in this first part of a series of two articles.
     Read the article on <a href="http://dev2dev.bea.com/pub/a/2005/08/jvm_aop_1.html">
     BEA's dev2dev</a> site. This exciting development means that the JRockit JVM
     may in time have native support for AspectJ.
    </dd>
  
   <dt> June 9, 2005, Progress report for AOP in the JVM</dt>
   <dd>Jonas will discuss "Runtime Aspects With JVM Support"
	   in BEA's JRocket JVM at the 
	   <a href="http://java.sun.com/javaone/sf/sessions/index.jsp">JavaOne</a> 
	   technical session 
	   <a href="https://www28.cplan.com/javaone05_93_1/session_details.jsp?isid=270659">7659</a>
	    on Tuesday, June 28
        (See his <a href="http://blogs.codehaus.org/people/jboner/archives/001094_jvm_support_for_aop_technical_session_at_javaone_2005.html">blog</a>.)</dd>
  
    <dt> March 14-18, 2005 -
            <a target="_top" href="http://aosd.net/2005/index.php">AOSD.05</a>,
            Chicago, IL
    </dt>
    <dd>
	    The International Conference on 
	    Aspect-Oriented Software Development 
	    with Gregor Kiczales, Cristina Videira Lopes, 
	    Mik Kersten, Adrian Colyer, Andrew Clement, 
	    Julie Waterhouse, Jonas Boner, Alexandre Vasseur, 
	    Ron Bodkin, Nicholas Lesiecki, Ramnivas Laddad, Grady Booch, et al.
    </dd>

    <dt> January 19th, 2005 - AspectJ and AspectWerkz to join forces. </dt>
    </d
    <dd>
	    We're excited to announce that the Aspectj and Aspectwerkz teams have agreed to join forces and 
	    work together on the AspectJ 5 release. Read more in 
	    "<a href="aj5announce.html">AspectJ and AspectWerkz to join forces</a>".
    </dd>

    <dt> January 18th, 2005 - Two new AspectJ books now shipping. </dt>
    <dd>
	    The books <a href="http://www.awprofessional.com/title/0321245873">
	    Eclipse AspectJ: Aspect-oriented programming with Eclipse and the AspectJ Development Tools</a> by
	    Adrian Colyer, Andy Clement, George Harley and Matthew Webster, and 
	    <a href="http://www.oreilly.com/catalog/aspectjckbk/">The AspectJ Cookbook</a> by Russ Miles
	    are now shipping.
    </dd>

    <dt>Search 
    	<a href="http://news.google.com/news?hl=en&ned=us&q=aspectj&ie=UTF-8&scoring=d" target=\"external\">
    	Google news</a> for AspectJ stories.
    </dt>

    <dt><a href="news_archive.php"><i>archives..</i>.</a></dt>
    <dd></dd>
  </dl>
  
 