<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3100335968062348807</id><updated>2011-08-17T05:12:48.953+02:00</updated><category term='weblogic'/><category term='AOP'/><category term='vFabric'/><category term='Cloud Middleware'/><category term='CEP'/><category term='USI2011'/><category term='Middleware'/><category term='Cloud'/><title type='text'>Facts and Thoughts</title><subtitle type='html'>Once upon a time bleeding edge middleware made me say...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>84</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-2288652682834750763</id><published>2011-02-08T22:23:00.003+01:00</published><updated>2011-02-08T22:36:28.856+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cloud Middleware'/><category scheme='http://www.blogger.com/atom/ns#' term='vFabric'/><category scheme='http://www.blogger.com/atom/ns#' term='USI2011'/><title type='text'>vFabric on vCloud - meet the vFabric cloud application platform (episode 2)</title><content type='html'>&lt;div&gt;In this second episode of "vFabric on vCloud" I'll introduce you to vFabric. Our end user here is an architect/developper/devops for &lt;a href="http://avasseur.blogspot.com/2011/01/vfabric-ex-springsource-on-vmware.html"&gt;the cloud scale application challenge&lt;/a&gt; that Octo runs with VMware and Steria - but the demonstration is fairly generic.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The user is having access to the VMware powered platform through &lt;b&gt;vCloud Director&lt;/b&gt;, over the internet using its web browser.&lt;/div&gt;&lt;div&gt;He has a &lt;b&gt;vFabric 4 VM cluster&lt;/b&gt; running and has access to the built-in &lt;b&gt;Hyperic&lt;/b&gt; instance.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Using Hyperic, the user has a centralized, secured and top to bottom view on his application platform - for the entire vFabric stack. Even if the cluster is elastic with new VM coming in, Hyperic built-in self-discovery kicks in and keeps consistency in a dynamic environment.&lt;/div&gt;&lt;div&gt;The vFabric cloud application platform features a number of web related platform services:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;tc Server - lightweight and scalable enterprise version of Tomcat for Java apps and Spring apps&lt;/li&gt;&lt;li&gt;ERS - an Apache based httpd that can frontend the stack or deal with non Java apps (PHP, Perl etc)&lt;/li&gt;&lt;li&gt;RabbitMQ - an AMQP compliant messaging broker with many languages binding and additional protocols, that can also be connected straight to browsers for web messaging&lt;/li&gt;&lt;li&gt;GemFire - a distributed data grid that combines replicated / partionned caching and eviction with map reduce and no-data loss / shared nothing parralel persistence capabilities&lt;/li&gt;&lt;li&gt;Hyperic - an agent based distributed system for performance monitoring and control of the entire stack - from bare operating system to inside-application - that provides fundamental capabilities to manage elastic environments at scale, including non-vFabric if you want.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;br /&gt;&lt;iframe title="YouTube video player" width="640" height="390" src="http://www.youtube.com/embed/nUFhXYfBw6I" frameborder="0" allowfullscreen=""&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;div&gt;vFabric can be used as a whole platform &lt;i&gt;"better together"&lt;/i&gt; - with for example tc Server offloading state (session, Hibernate L2 or java caching) to GemFire, and async processing to RabbitMQ - while ERS can load balance tc Server instances.&lt;/div&gt;&lt;div&gt;Hyperic glue the entire distributed environment together from an operational perspective - for deployment, configuration, remote control and performance management - but you can use command line just as well.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;In a next episode we will look at part 3 of the user experience - as seen from a cloud operator adding new vFabric VM to the cluster to increase compute and data capacity at deploy time or at runtime with a "clone to scale" built-in design.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-2288652682834750763?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/2288652682834750763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=2288652682834750763' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/2288652682834750763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/2288652682834750763'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2011/02/vfabric-on-vcloud-meet-vfabric-cloud.html' title='vFabric on vCloud - meet the vFabric cloud application platform (episode 2)'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/nUFhXYfBw6I/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-7050848717219596068</id><published>2011-02-03T12:25:00.004+01:00</published><updated>2011-02-03T12:32:37.477+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cloud Middleware'/><category scheme='http://www.blogger.com/atom/ns#' term='vFabric'/><category scheme='http://www.blogger.com/atom/ns#' term='USI2011'/><title type='text'>vFabric on vCloud - meet the vFabric cluster vApp (episode 1)</title><content type='html'>&lt;div&gt;&lt;div&gt;In this first episode of &lt;b&gt;"vFabric on vCloud"&lt;/b&gt; I'll introduce you to the end user experience. Our end user here is an architect/developper/devops for &lt;a href="http://avasseur.blogspot.com/2011/01/vfabric-ex-springsource-on-vmware.html"&gt;the cloud scale application challenge&lt;/a&gt; that Octo runs with VMware and Steria - but the demonstration is fairly generic.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The user is having access to the VMware powered platform through &lt;b&gt;vCloud Director&lt;/b&gt;, over the internet using its web browser.&lt;/div&gt;&lt;div&gt;He has access to a &lt;b&gt;pre-provided vApp - a set of 4 vFabric VM &lt;/b&gt;and one utility VM that are wired on a private network and can be managed as a whole entity by the user (start, stop, suspend etc) but also by the underlying cloud provider or organization manager if needed.&lt;/div&gt;&lt;div&gt;Once started, the user is having access to its 5 VM over a secured SSH and can then create a tunnel to access for example the &lt;a href="http://www.vmware.com/products/vfabric-hyperic/"&gt;vFabric Hyperic&lt;/a&gt; web UI in a secured fashion even with use of default password.&lt;/div&gt;&lt;div&gt;&lt;iframe title="YouTube video player" width="640" height="390" src="http://www.youtube.com/embed/Fmvq7vuspuI" frameborder="0" allowfullscreen=""&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In our example, the vApp has been pre-provided through a vApp template by the organization manager. It encapsulates all best practices and ensure isolation yet flexibility for a multi tier application environment.&lt;/div&gt;&lt;div&gt;Depending on roles we could have given the user more freedom to create his own vApp(s) based on quotas limits and catalog access where our VM and vApp templates are listed.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In a next episode we will look at part 2 of the user experience - few seconds after a vFabric VM cluster boot where all the vFabric cloud application platform gets accessible, manageeable, and dynamic and elastic.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-7050848717219596068?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/7050848717219596068/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=7050848717219596068' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7050848717219596068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7050848717219596068'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2011/02/vfabric-on-vcloud-meet-vfabric-cluster.html' title='vFabric on vCloud - meet the vFabric cluster vApp (episode 1)'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/Fmvq7vuspuI/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-7008479070074036331</id><published>2011-01-25T00:01:00.004+01:00</published><updated>2011-01-25T00:25:14.287+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cloud Middleware'/><category scheme='http://www.blogger.com/atom/ns#' term='vFabric'/><category scheme='http://www.blogger.com/atom/ns#' term='USI2011'/><title type='text'>vFabric (ex SpringSource) on VMware vCloud for a cloud scale app</title><content type='html'>&lt;div style="text-align: center;"&gt;Since &lt;a href="http://avasseur.blogspot.com/2010/04/moving-on-to-cloud.html"&gt;I joined VMware almost 1y ago&lt;/a&gt;, I had little time to update my blog on what 's going on. I have a whole lot more for this year and I hope you'll find it of interest.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For this come back, I'll start a whole series of posts all tagged USI2011.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;Cloud... let's get concrete please!&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We just helped launched a cloud scale application challenge with 2 partners around VMware: &lt;b&gt;&lt;a href="http://www.steria.fr/index.php?page=infrastructure-services"&gt;Steria&lt;/a&gt;&lt;/b&gt; for the hosting part and &lt;b&gt;&lt;a href="http://www.octo.com/"&gt;Octo&lt;/a&gt;&lt;/b&gt; driving the challenge - a major consulting boutique of high level yet real solid architecture skills especially when it comes to the topics at stake - applications and clouds.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The challenge is opened to dev/devops/architect skilled teams in France and is already oversubscribed and got good buzz (&lt;a href="http://www.touilleur-express.fr/2011/01/15/pret-a-coder-une-application-pour-un-milliard-dutilisateur/"&gt;here&lt;/a&gt;, &lt;a href="http://groups.google.com/group/paris-scala-user-group/browse_thread/thread/6ce6d8d47c276a4"&gt;here&lt;/a&gt;, and twitter &lt;a href="http://twitter.com/search?q=%23usi#search?q=%23USI2011"&gt;#USI2011&lt;/a&gt;).&lt;/div&gt;&lt;div&gt;See the complete &lt;a href="http://blog.octo.com/wp-content/uploads/2011/01/flyerUSIchallenge.pdf"&gt;flyer&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In few days and for about 4 months you'll have access to &lt;b&gt;VMware vCloud Director&lt;/b&gt; over the internet to run and test drive your platform, running atop a nice set of blades operated by Steria (we'll disclose details later), and prefilled with empty linux or better the entire portfolio of &lt;b&gt;vFabric cloud application platform&lt;/b&gt; (it 's all your choice to use it).&lt;/div&gt;&lt;div&gt;If we leave Zimbra and Desktop virtualization solutions we have a great combination of what VMware cooked in 2010 - following the &lt;a href="http://www.springsource.com/"&gt;SpringSource&lt;/a&gt;, &lt;a href="http://www.gemstone.com/"&gt;GemStone&lt;/a&gt;, and &lt;a href="http://www.rabbitmq.com/"&gt;RabbitMQ&lt;/a&gt; acquisitions - &lt;b&gt;now called vFabric &lt;/b&gt;- and combining this with the vCloud Director who went publicly generally available in second half of 2010. Awesome combination of technologies, proven for years in the field from virtualization to Java runtimes and coming to you over the cloud through vCloud!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; "&gt;&lt;img src="http://2.bp.blogspot.com/_easBGwiqqSs/TT4KHyUyzoI/AAAAAAAAAHQ/qupObWSjhKk/s320/Screen%2Bshot%2B2011-01-25%2Bat%2B00.22.34.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5565897318360862338" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 320px; height: 209px; " /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;div&gt;The whole goal is to write a scalable application - and we mean large scale.&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We want to observe how you deal with few issues especially when running "in a cloud" - in the 2011+ years. We want to see the solution you bring to the table - use vCloud, use vFabric (or whatever you'd like if you can sustain a discussion to a CIO on why it's the best platform for his apps), and get back to us with real code and results.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There has been a number of discussion in the twitter and blogosphere (again in France) of small tweaks enabling key differences in raw performance (indeed there might be, going back to tuning an OS TCP stack) but be aware we'll also carefully look at your cloud capabilities:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;technologies being used are rather mainstream, digestible or plain darkness?&lt;/li&gt;&lt;li&gt;how do you deal with provisioning and management at scale?&lt;/li&gt;&lt;li&gt;are you elastic, from a compute and data perspective&lt;/li&gt;&lt;li&gt;how fast can you scale, does your scale out mechanism integrates with "add VM" in vCloud and also reduces load from existing nodes and not simply add new capacity waiting for new requests&lt;/li&gt;&lt;li&gt;are you HA and no-SPOF (it is an overkilled term but if you have elascticity you may have scale-down hence requirement for nodes being droped fairly often)&lt;/li&gt;&lt;li&gt;and the list goes on...&lt;/li&gt;&lt;/ul&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;(disclaimer: I am not the judge - those are some thoughts)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you want to read more (and read French) - go have a look at&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Octo' challenge announcement  &lt;a href="https://sites.google.com/a/octo.com/challengeusi2011/presentation"&gt;"Et si vous codiez une application qui supporte 1 milliard d’utilisateurs ?"&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://sites.google.com/a/octo.com/challengeusi2011/blog"&gt;Octo blog on the challenge&lt;/a&gt; and thoughts on how you will be judged&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.universite-du-si.com/"&gt;Université du SI 2011 Octo' conference&lt;/a&gt; where we'll debrief and showcase about this challenge&lt;/li&gt;&lt;li&gt;and of course the &lt;a href="http://www.vmware.com/products/vfabric/"&gt;vFabric&lt;/a&gt; and &lt;a href="http://www.vmware.com/products/vcloud-director/"&gt;vCloud Director&lt;/a&gt; from VMware directly&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;For the next post, I'll uncover a bit more with pics and videos what it looks like to run vFabric in the cloud with vCloud Director&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-7008479070074036331?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/7008479070074036331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=7008479070074036331' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7008479070074036331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7008479070074036331'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2011/01/vfabric-ex-springsource-on-vmware.html' title='vFabric (ex SpringSource) on VMware vCloud for a cloud scale app'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_easBGwiqqSs/TT4KHyUyzoI/AAAAAAAAAHQ/qupObWSjhKk/s72-c/Screen%2Bshot%2B2011-01-25%2Bat%2B00.22.34.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-6563129739105617598</id><published>2010-04-20T11:49:00.003+02:00</published><updated>2010-04-20T12:04:51.614+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='Middleware'/><title type='text'>Moving on ... to the Cloud</title><content type='html'>As wrapped up &lt;a href="http://avasseur.blogspot.com/2010/04/moving-on.html"&gt;yesterday&lt;/a&gt;, I have left BEA now Oracle after 6+ great years there.&lt;br /&gt;I am joining VMware to help adoption of &lt;a href="http://www.google.com/search?hl=en&amp;amp;client=firefox-a&amp;amp;hs=IAV&amp;amp;rls=org.mozilla%3Aen-US%3Aofficial&amp;amp;q=vmware+paas&amp;amp;aq=f&amp;amp;aqi=&amp;amp;aql=&amp;amp;oq=&amp;amp;gs_rfai="&gt;VMware Platform-as-a-Service&lt;/a&gt; product line - especially across EMEA.&lt;br /&gt;I'll be part of the &lt;a href="http://www.springsource.com/newsevents/vmware-acquire-springsource"&gt;SpringSource division, acquired by VMware&lt;/a&gt; back August 2009 for 400+M$.&lt;br /&gt;&lt;br /&gt;This is a fantastic time to join the team - and I am glad that I can &lt;span style="font-weight: bold;"&gt;build upon&lt;/span&gt; ALL what I have been working on those past years - both technical and sales side - as well as &lt;span style="font-weight: bold;"&gt;learn and drive&lt;/span&gt; a massive amount of new things.&lt;br /&gt;Here is the way I see it:&lt;br /&gt;&lt;blockquote&gt;VMware is at the forefront of fundamental yet evolutionary shifts in the way we build, run and manage enterprise applications and deal with computing resources and services.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://blogs.vmware.com/.a/6a00d8341c328153ef0120a4e05446970b-pi"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 661px; height: 399px;" src="http://blogs.vmware.com/.a/6a00d8341c328153ef0120a4e05446970b-pi" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I'll hopefully be able to write more on that journey in the next few posts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-6563129739105617598?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/6563129739105617598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=6563129739105617598' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/6563129739105617598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/6563129739105617598'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2010/04/moving-on-to-cloud.html' title='Moving on ... to the Cloud'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-4895595909702062728</id><published>2010-04-19T18:00:00.004+02:00</published><updated>2010-04-20T11:49:22.748+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cloud Middleware'/><title type='text'>Moving on</title><content type='html'>Those last 6 years that I have been working at BEA now Oracle have been fantastic. I did had a great run there, in various positions both engineering and sales side.&lt;br /&gt;&lt;br /&gt;It's time to recap a bit.&lt;br /&gt;&lt;br /&gt;I have been a bit of:&lt;br /&gt;- &lt;span style="font-weight: bold;"&gt;technical-crazy &lt;/span&gt;enough &lt;a href="http://www.theserverside.com/user/userthreads.tss?user_id=2665118&amp;amp;start=40"&gt;to discuss open source &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;AOP&lt;/span&gt; gory details&lt;/a&gt; with then &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;JBoss&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;CTO&lt;/span&gt; on &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;ServerSide&lt;/span&gt;, and to also compile a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;JRockit&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;JVM&lt;/span&gt; on my own for our &lt;a href="http://www.oracle.com/technology/pub/articles/dev2arch/2005/08/jvm_aop_1.html"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;AOP&lt;/span&gt;-in-the-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;JVM&lt;/span&gt; prototype&lt;/a&gt; derived from our &lt;a href="http://aspectwerkz.codehaus.org/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;AspectWerkz&lt;/span&gt;&lt;/a&gt; work (2004-2006),&lt;br /&gt;- &lt;span style="font-weight: bold;"&gt;lucky &lt;/span&gt;enough to&lt;a href="http://avasseur.blogspot.com/2005/06/jrockit-aop-and-aspectj-5-and-javaone.html"&gt; evangelize&lt;/a&gt; emerging trends such as &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;AOP&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;POJO&lt;/span&gt; and lightweight containers across the world back when Java(TM) was still a Sun trademark,&lt;br /&gt;- &lt;span style="font-weight: bold;"&gt;unlucky &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;yet professional&lt;/span&gt; enough to &lt;a href="http://www.computer.org/portal/web/csdl/doi/10.1109/MS.2006.26"&gt;work with fantastic people&lt;/a&gt; who ended up being successful faster than me onto there I21/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;SpringSource&lt;/span&gt;/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;VMware&lt;/span&gt; journey&lt;br /&gt;- and &lt;span style="font-weight: bold;"&gt;business-crazy&lt;/span&gt; enough to end up in the category of software sales, in fact getting our largest customers to adopt our products - from &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;WLS&lt;/span&gt; to emerging SIP and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;SipServlet&lt;/span&gt;, &lt;a href="http://www.01net.com/article/325536.html"&gt;real time Java&lt;/a&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;CEP&lt;/span&gt; containers, up to bare metal Java running straight onto &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;hypervisors&lt;/span&gt; such as &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;VMware&lt;/span&gt; (a number of those RIP or rescheduled as part of BEA now Oracle - as you can figure out) and last but not least data grids.&lt;br /&gt;&lt;br /&gt;Along that path I made sure to revitalized my open source hat by giving time and knowledge to bootstrap a niche open source project to a sustainable pure-play open core &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;CEP&lt;/span&gt; Java leader aka &lt;a href="http://esper.codehaus.org/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;Esper&lt;/span&gt;&lt;/a&gt; &amp;amp; &lt;a href="http://www.espertech.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;EsperTech&lt;/span&gt;&lt;/a&gt;. A fantastic &lt;a href="http://www.infoq.com/news/2007/10/esper"&gt;geek+&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;BizDev&lt;/span&gt;&lt;/a&gt; mix with great talented individuals all the way along. If you wonder, Esper / EsperTech is playing the open-core business model in a fairly interesting way.&lt;br /&gt;&lt;br /&gt;I am now onto something next - and I already feel home like always been there - more on that next one soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-4895595909702062728?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/4895595909702062728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=4895595909702062728' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/4895595909702062728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/4895595909702062728'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2010/04/moving-on.html' title='Moving on'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-5855609369704483293</id><published>2009-09-07T13:00:00.000+02:00</published><updated>2009-09-07T15:03:01.805+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CEP'/><title type='text'>Esper - what and why in Complex Event Processing</title><content type='html'>I have been generating this definition out of the word cloud image generated from &lt;a href="http://esper.codehaus.org/"&gt;Esper&lt;/a&gt; documentation:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-weight: bold;"&gt;An engine to query streams of events using select statements over time windows and pattern expressions.&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;(by streams of events you need to think &lt;span style="font-style: italic;"&gt;continuous queries&lt;/span&gt; vs traditional &lt;span style="font-style: italic;"&gt;store and later query&lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt; &lt;/span&gt;&lt;span style="font-size:78%;"&gt;analytics)&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_easBGwiqqSs/SqUEB2bHFyI/AAAAAAAAAG4/Snuwy9EcPRw/s1600-h/esper_cloud.PNG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 188px;" src="http://2.bp.blogspot.com/_easBGwiqqSs/SqUEB2bHFyI/AAAAAAAAAG4/Snuwy9EcPRw/s400/esper_cloud.PNG" alt="" id="BLOGGER_PHOTO_ID_5378709759799531298" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Esper is actually much more capable - especially in the just released Esper 3.2, that for example brings support for a subset of nascent not finalized ANSI SQL standard &lt;span style="font-family:verdana;"&gt;match_recognize&lt;/span&gt;.&lt;br /&gt;The Esper 3.2 documentation has a &lt;a href="file:///D:/esper/svn_releases/esper-3.2.0/esper/doc/reference/html/match-recognize.html"&gt;nice summary&lt;/a&gt; on how &lt;span style="font-family:verdana;"&gt;match_recognize &lt;/span&gt;compares to Esper well established &lt;span style="font-family:verdana;"&gt;select from patttern[ ... ]&lt;/span&gt; and &lt;span style="font-family:verdana;"&gt;followed-by&lt;/span&gt; EPL language features.&lt;br /&gt;&lt;br /&gt;It is also great to see &lt;a href="http://www.espertech.com/"&gt;EsperTech &lt;/a&gt;on the &lt;a href="http://www.forrester.com/rb/Research/wave%26trade%3B_complex_event_processing_cep_platforms%2C_q3/q/id/48084/t/2"&gt;Forrester Wave Complex Event Processing Platforms, Q3 2009&lt;/a&gt;: "Forrester evaluated nine complex event processing (CEP) platforms using 114 criteria (...). EsperTech, the only open source option, is also a Strong Performer."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-5855609369704483293?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/5855609369704483293/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=5855609369704483293' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/5855609369704483293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/5855609369704483293'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2009/09/esper-what-and-why-in-complex-event.html' title='Esper - what and why in Complex Event Processing'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_easBGwiqqSs/SqUEB2bHFyI/AAAAAAAAAG4/Snuwy9EcPRw/s72-c/esper_cloud.PNG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-35376116657248567</id><published>2009-06-06T10:00:00.002+02:00</published><updated>2009-06-06T10:05:19.529+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CEP'/><title type='text'>Esper, OSGi and Complex Event Processing</title><content type='html'>There is an interesting article that discusses the pros and cons of &lt;span style="font-weight: bold;"&gt;integrating OSGi with Esper&lt;/span&gt; to achieve modularity and dynamicity beyond what Esper already provides.&lt;br /&gt;&lt;br /&gt;The article goes over comparing 3 scenarios and comes with sample code (and complete source, with Maven and Eclipse artifacts)&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Exposing Esper runtime and administrative interfaces as OSGi services&lt;/li&gt;&lt;li&gt;Layering Esper interfaces as OSGi services through some service provider abstraction&lt;/li&gt;&lt;li&gt;Using Esper and the &lt;a href="%28http://dynamicjava.org/articles/osgi-compendium/event-admin-service"&gt;OSGi EventAdmin service specification&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;This third approach although a bit more complex for readers without OSGi background is the recommended one by the author - Valery Abu-Eid.&lt;br /&gt;&lt;br /&gt;It is nice to see such exploration going on. I know we already have users running Esper in OSGi environment, although the vast majority is still running on bare JSE JVM or on JEE / servlet container stacks.&lt;br /&gt;&lt;br /&gt;Readers familiar with the matter will also notice that WebLogic Event Server (now Oracle CEP) - is also leveraging OSGi. A main difference is that Esper does not mandate OSGi at all while the BEA/Oracle product does mandate end users to author OSGi modules - with pros and cons.&lt;br /&gt;&lt;br /&gt;If you have experimented with similar stacks I'd be pleased to hear about your experience.&lt;br /&gt;There is also good material available from the DynamicJava.org site to get started with OSGi based runtimes - including their own OSGi stack.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dynamicjava.org/articles/osgi-integration/esper-osgi"&gt;Read more about Esper and OSGi experiments at DynamicJava.org&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-35376116657248567?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/35376116657248567/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=35376116657248567' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/35376116657248567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/35376116657248567'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2009/06/esper-osgi-and-complex-event-processing.html' title='Esper, OSGi and Complex Event Processing'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-5790840058612795914</id><published>2009-05-15T21:27:00.010+02:00</published><updated>2009-05-19T11:14:43.495+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CEP'/><title type='text'>CEP engine or CEP platform? Or both?</title><content type='html'>There has been recurrent debate and opposition between the value proposition of a CEP &lt;span style="font-style:italic;"&gt;engine&lt;/span&gt; and a CEP &lt;span style="font-style:italic;"&gt;platform&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;The archetype of a CEP engine would be something like &lt;a href="http://esper.codehaus.org"&gt;Esper&lt;/a&gt;. You can fully embed it in an existing runtime (Java or .NET/C# for NEsper), ranging from standalone JVMs with bare metal thread pools to JEE application servers or SOA stacks.&lt;br /&gt;The archetype of a CEP platform would be something more like Streambase, or the Oracle CEP server or well you name it - where the product is a server - no choice - sometime even worse with a whole bunch of dependencies (for example a relational database and/or a mandatory JEE application server - see IBM Business Events for example).&lt;br /&gt;&lt;br /&gt;I am firm believer that there are numerous technical advantages of getting started with Complex Event Processing using a CEP &lt;span style="font-style:italic;"&gt;engine&lt;/span&gt;.&lt;br /&gt;Check out the Esper examples (one integrates with JMS f.e. TibcoEMS, another with JBoss, etc) or the growing list of &lt;a href="http://www.espertech.com"&gt;ISVs embedding Esper into their own solutions&lt;/a&gt; - from asset tracking, network security and trade platforms of all kinds.&lt;br /&gt;More control and flexibility and more reuse of your existing investments.&lt;br /&gt;This also fits well if IT, speed and flexibility is a competitive advantage - which for example was echoed in a recent &lt;a href="http://www.wallstreetandtech.com/printableArticle.jhtml?articleID=217400216"&gt;WallStreet &amp; Technology&lt;/a&gt; article:&lt;br /&gt;&lt;blockquote&gt;Wall Street Opens Doors to Open Source Technologies&lt;br /&gt;"Esper is already built. Instead of being a standalone server product that runs as a separate product, it's a library that you link in with your own proprietary stuff. That way you don't have to worry about another additional process." (an industry source who is involved in the development of trading systems at a major investment bank)&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Needless to say, things are not black or white. I am also a firm believer that there are numerous long-run advantages of &lt;span style="font-weight:bold;"&gt;scaling up your CEP use through a CEP platform&lt;/span&gt; approach. Enforce shared practice for monitoring, high availability, deployment unit management and consistency across projects. &lt;br /&gt;Interestingly, Esper tackles this through its (commercial) Enterprise Edition - with bells and whistles around management, tooling and high availability.&lt;br /&gt;More enterprise *ilities and more wisdom long run - likely.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-5790840058612795914?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/5790840058612795914/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=5790840058612795914' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/5790840058612795914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/5790840058612795914'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2009/05/cep-engine-or-cep-platform-or-both.html' title='CEP engine or CEP platform? Or both?'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-1212190191958740366</id><published>2009-04-30T10:34:00.006+02:00</published><updated>2009-04-30T11:39:44.741+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='weblogic'/><title type='text'>Middleware as a service</title><content type='html'>Although my last posts have mostly been related to Complex Event Processing and the various vendors and solutions out there, I have spent some time recently exploring the IaaS and PaaS markets.&lt;br /&gt;I won't provide my analysis but instead wrap up on the few hands on experience I had thus far - all promising although with vastly different perspectives for enterprise adoption.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Amazon EC2&lt;/b&gt;&lt;br /&gt;I have been a long time user of &lt;a href="http://aws.amazon.com/ec2/"&gt;Amazon EC2&lt;/a&gt; and did a few experiment with it, like running Esper performance benchmark and ensuring it scales linearly as I kickoff Amazon AMI with more CPU and RAM capacity. Very useful although you're send back to school manual on OS-level handling, package install and being root user...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;VMWare / BEA ex LiquidVM / ex VirtualEdition&lt;/b&gt;&lt;br /&gt;I had of course been quiet familiar with VMWare over the last few years, heading BEA' &lt;a href="www.networkcomputing.com/showitem.jhtml?articleID=201305689"&gt;WebLogic Server Virtual Edition&lt;/a&gt; adoption in my geography. Things happens to have slow down a bit on this chapter, although JRockit Virtual Edition is very much on the Oracle agenda as it was explained at Oracle OpenWorld 2008. I expect more this year unleashed with a wider perspective around the cloud topic as &lt;a href="http://smoothspan.wordpress.com/2009/04/22/a-vision-for-oracles-cloud-platform-the-red-cloud/"&gt;some expects&lt;/a&gt;.&lt;br /&gt;For prior (although outdated) work on this - check out this &lt;a href="http://eudownload.bea.com/fr/evenements/convergenceday/publique/atelier-bea/foundation-wlsve.pdf"&gt;slide deck (pdf, slow site)&lt;/a&gt;.&lt;br /&gt;Very promissing convergence between Java runtime and virtualized stack - patented by the way... (&lt;a href="http://appft1.uspto.gov/netacgi/nph-Parser?Sect1=PTO2&amp;Sect2=HITOFF&amp;p=1&amp;u=%2Fnetahtml%2FPTO%2Fsearch-bool.html&amp;r=0&amp;f=S&amp;l=50&amp;TERM1=20090070776&amp;FIELD1=PGNR&amp;co1=AND&amp;TERM2=&amp;FIELD2=&amp;d=PG01"&gt;20090070776&lt;/a&gt;, "SYSTEM AND METHOD TO IMPROVE MEMORY USAGE IN VIRTUAL MACHINES RUNNING AS HYPERVISOR GUESTS")&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Google AppEngine&lt;/b&gt;&lt;br /&gt;Recently I have been playing with the &lt;a href="code.google.com/appengine/docs/java/overview.html"&gt;Google AppEngine Java&lt;/a&gt; - very neat - build upon a few open source bits like Jetty (which also happens to be used by the BEA WebLogic Event Server despite BEA has been a long time maker of its own servlet stack in WebLogic), although the Eclipse IDE support is limited to a bare minimum and the security restriction (class white list) is time wasting in the end-developer hands to validate compatibility of existing stacks.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Is Google AppEngine scaring for IBM?&lt;/b&gt;&lt;br /&gt;I recently came accross an IBM lab paper titled &lt;a href="http://www.ibm.com/developerworks/websphere/library/techarticles/0904_singh/0904_singh.html"&gt;"Porting Google App Engine Applications to IBM Middleware"&lt;/a&gt;.&lt;br /&gt;It provides some API-level compatibility to port GAE java apps to a good old WebSphere / Tivoli stack but is unfortunately missing the whole point.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Middleware as a Service&lt;/b&gt;&lt;br /&gt;The clear value proposition of GAE is middleware as a service namely:&lt;br /&gt;- no software install&lt;br /&gt;- out of the box load balancing and clustering&lt;br /&gt;- scale up/down and out on demand&lt;br /&gt;- pay per use&lt;br /&gt;&lt;br /&gt;&lt;b&gt;WebLogic on Amazon EC2 and more&lt;/b&gt;&lt;br /&gt;From that perspective, the WebLogic Server on EC2 &lt;a href="http://www.oracle.com/technology/tech/cloud/pdf/wlsami_ref.pdf"&gt;technical white paper&lt;/a&gt; and the &lt;a href="http://www.oracle.com/technology/tech/cloud/pdf/wlsclouddatasheet.pdf"&gt;WebLogic Server in the cloud&lt;/a&gt; Oracle' datasheet are far better aligned to the value proposition - although incomplete in a comparison to GAE - as one would have to add Coherence (where GAE provides memcache / JSR-107 JCache) and very likely Enterprise Manager or ex-BEA WebLogic Liquid Operation Control to deal with self-provisionning and scale on demand.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-1212190191958740366?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/1212190191958740366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=1212190191958740366' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/1212190191958740366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/1212190191958740366'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2009/04/middleware-as-service.html' title='Middleware as a service'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-7845774916701366664</id><published>2009-02-11T13:50:00.003+01:00</published><updated>2009-02-12T21:17:52.308+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CEP'/><title type='text'>CEP and JDBC/ODBC for ad-hoc queries on real-time data</title><content type='html'>Sounds like &lt;a href="http://www.espertech.com/products/esperjdbc.php"&gt;EsperJDBC&lt;/a&gt; and &lt;a href="http://www.aleri.com/cep/aleri-streaming-platform/architecture"&gt;Aleri&lt;/a&gt; JDBC/ODBC capabilities have found some echo. &lt;a href="http://www.coral8.com"&gt;Coral8&lt;/a&gt; &lt;a href="http://www.businesswire.com/portal/site/google/?ndmViewId=news_view&amp;amp;newsId=20090210005473&amp;amp;newsLang=en"&gt;just announced&lt;/a&gt; interoperability with ODBC  with its 5.6 minor release - 3 months after EsperJDBC introduction.&lt;br /&gt;The Coral8 documentation states that Coral8 now can expose public windows (equivalent of Esper named windows) over ODBC and not just only with a proprietary SDK.&lt;br /&gt;&lt;br /&gt;If you want to explore this concept with Esper - this slide deck is a must read:&lt;br /&gt;&lt;div style="width:425px;text-align:left" id="__ss_747180"&gt;&lt;a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/espertech/esperjdbc-presentation?type=powerpoint" title="EsperJDBC"&gt;EsperJDBC&lt;/a&gt;&lt;object style="margin:0px" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=esper-jdbc-v1-1226527169250695-9&amp;stripped_title=esperjdbc-presentation" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=esper-jdbc-v1-1226527169250695-9&amp;stripped_title=esperjdbc-presentation" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"&gt;View more &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/espertech"&gt;espertech&lt;/a&gt;. (tags: &lt;a style="text-decoration:underline;" href="http://slideshare.net/tag/esper"&gt;esper&lt;/a&gt; &lt;a style="text-decoration:underline;" href="http://slideshare.net/tag/cep"&gt;cep&lt;/a&gt;)&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.espertech.com/resources/index.php"&gt;A demo&lt;/a&gt; also demonstrates how you can perform ad-hoc queries on your CEP real-time data and computations using any JDBC compliant tool - namely Actuate / Eclipse BIRT and create dashboards in minutes.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;(Note: EsperJDBC is not open source and only available in EsperTech' commercial offering although you can access free trials)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;(Note: Post updated as per Jeff comment on Aleri)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-7845774916701366664?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/7845774916701366664/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=7845774916701366664' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7845774916701366664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7845774916701366664'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2009/02/cep-and-jdbcodbc-for-ad-hoc-queries-on.html' title='CEP and JDBC/ODBC for ad-hoc queries on real-time data'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-6046109068179913680</id><published>2009-01-07T12:15:00.001+01:00</published><updated>2009-01-08T10:38:53.210+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CEP'/><title type='text'>IBM WebSphere Business Events - going Esper? And WebSphere eXtreme Scale going on his own? And so does ILOG?</title><content type='html'>As you may already know, IBM complemented its CEP/BEP offering with the AptSoft acquisition back in &lt;a href="http://www.ibm.com/press/us/en/pressrelease/23376.wss"&gt;January 2008&lt;/a&gt;.&lt;br /&gt;And they got SMILE continuous query processing research going on, and integration into their data grid WebSphere eXtreme Scale / ObjectGrid offering.&lt;br /&gt;And now they got ILOG.&lt;br /&gt;So what's the strategy around?&lt;br /&gt;&lt;br /&gt;As with all IBM products, software downloads for trial and &lt;a href="http://publib.boulder.ibm.com/infocenter/wbevents/v6r1m0/index.jsp"&gt;comprehensive documentation&lt;/a&gt; is available online, and you will quickly notice that &lt;span style="font-weight: bold;"&gt;WebSphere Business Events (v6) requires a good old database&lt;/span&gt;. This is where intermediate state will be kept and where correlation will occur.&lt;br /&gt;Interestingly, CEP emerged out a wider trend that seeks to revolutionize the way we manage data (remember we sometime refered to Active Database in the academic work that precedes current CEP product offering) &lt;span style="font-weight: bold;"&gt;with a shift from "store then query" to "query as it comes"&lt;/span&gt; - or in other words, store the queries and flow data thru aka &lt;span style="font-weight: bold;"&gt;"continuous queries"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;This quickly makes me claim that IBM WebSphere Business Events is lacking a big piece of the CEP platform puzzle, and likely why IBM is willing to complement this with another solution for more troughput/latency sensitive use cases with its InfoSphere Streams &lt;span style="font-weight: bold;"&gt;vision&lt;/span&gt;. Indeed, for that one, you'll have to wait late 2010 as &lt;a href="http://www-01.ibm.com/software/solutions/soa/business_event_processing.html"&gt;explained&lt;/a&gt;.&lt;br /&gt;&lt;span class="ibm-item-note"&gt;&lt;strong style="font-weight: bold;"&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;So now should we assume that Esper will take part in an IBM offering sometime down the road?&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;Or should we assume that Esper got it so right that Esper materials end up in an IBM "what is WebSphere Business Events" slide?&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Here are some surprising hints. The nice "Advanced Event Processing" one is &lt;a href="http://esper.codehaus.org/"&gt;Esper&lt;/a&gt;, as described in the &lt;a href="http://www.espertech.com/products/esper.php"&gt;EsperTech site&lt;/a&gt; for more than 2 years. It appears in a &lt;a href="https://www-950.ibm.com/events/wwe/pulse/pulse08cms.nsf/download/k224dffcd41a041a11a09886b9b/$FILE/Pulse.BusinessEvents.pdf"&gt;slide deck&lt;/a&gt; from IBM Pulse 2008 partner conference.&lt;br /&gt;&lt;br /&gt;&lt;table border="0" width="100%"&gt;&lt;br /&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_easBGwiqqSs/SPNmQDRBr_I/AAAAAAAAAGE/z5IC9R3RnLA/s1600-h/et_esper.PNG"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_easBGwiqqSs/SPNmQDRBr_I/AAAAAAAAAGE/z5IC9R3RnLA/s400/et_esper.PNG" alt="" id="BLOGGER_PHOTO_ID_5256657616012161010" border="0" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_easBGwiqqSs/SPNmEI3gkrI/AAAAAAAAAF8/NFt5qBbdTC8/s1600-h/ibm_bep.PNG"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_easBGwiqqSs/SPNmEI3gkrI/AAAAAAAAAF8/NFt5qBbdTC8/s400/ibm_bep.PNG" alt="" id="BLOGGER_PHOTO_ID_5256657411357315762" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;(disclaimer: Up until now, WebSphere Business Events v6 is not built upon Esper)&lt;br /&gt;&lt;br /&gt;To add to IBM offering description around CEP or business event as they call it, you'll notice that WebSphere eXtreme Scale (former IBM ObjectGrid) has now integrated the IBM Smile research in it thus exposing some &lt;a href="http://www.ibm.com/developerworks/wikis/display/objectgridprog/Stream+query+engine+language+tutorial"&gt;IBM made SQL like event processing language&lt;/a&gt; (similar to Esper and Coral8 approach). This approach is different from the WebSphere Business Event product although it largely overlaps in what it does.&lt;br /&gt;&lt;pre class="displaycode"&gt;CREATE VIEW stockView AS SELECT tickerSymbol, avg(price) as avgPrice FROM&lt;br /&gt;(SELECT * FROM stockStream FETCH LATEST 5 MINUTES) group by tickerSymbol&lt;/pre&gt;There are some interesting &lt;a href="http://www.ibm.com/developerworks/websphere/techjournal/0809_hopkins/0809_hopkins.html"&gt;tutorials&lt;/a&gt; available, and I think this part of IBM offering would deserve a lot more exposure in the CEP community.&lt;br /&gt;&lt;br /&gt;Instead of that, IBM disparate vision around event processing just added ILOG to the cake as per this just released &lt;a href="http://www.informationweek.com/news/business_intelligence/bpm/showArticle.jhtml?articleID=212700920"&gt;press coverage&lt;/a&gt;:&lt;br /&gt;"&lt;span style="font-size:100%;"&gt;IBM Completes ILOG Acquisition, &lt;span style="font-weight: bold;"&gt;Opens&lt;/span&gt; Door To Event Processing"&lt;br /&gt;But I am not learning you anything since on IBM owns terms:&lt;br /&gt;&lt;/span&gt;&lt;span id="articleBody"&gt; "None of these products amounted to a real strategy. We didn't have tight engineering, focused on business event management".&lt;br /&gt;&lt;br /&gt;It will be interesting to see where that ends...&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-6046109068179913680?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/6046109068179913680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=6046109068179913680' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/6046109068179913680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/6046109068179913680'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2008/10/ibm-websphere-business-events-going.html' title='IBM WebSphere Business Events - going Esper? And WebSphere eXtreme Scale going on his own? And so does ILOG?'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_easBGwiqqSs/SPNmQDRBr_I/AAAAAAAAAGE/z5IC9R3RnLA/s72-c/et_esper.PNG' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-1446333239401632438</id><published>2008-11-24T16:37:00.002+01:00</published><updated>2008-11-24T17:10:04.399+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CEP'/><title type='text'>CEP and patents</title><content type='html'>I was recently updating my knowledge base around event processing, CEP and DSMS to have a better view on the current state of the art regarding patent applications around those topics, when I found a fairly recent pending application from Oracle named:&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;&lt;br /&gt;"Processing xml data stream(s) using continuous queries in a data stream management system".&lt;/span&gt;&lt;br /&gt;The patent application is available &lt;a href="http://appft1.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&amp;amp;Sect2=HITOFF&amp;amp;d=PG01&amp;amp;p=1&amp;amp;u=%2Fnetahtml%2FPTO%2Fsrchnum.html&amp;amp;r=1&amp;amp;f=G&amp;amp;l=50&amp;amp;s1=%2220080120283%22.PGNR.&amp;amp;OS=DN/20080120283&amp;amp;RS=DN/20080120283"&gt;online&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It was filed in Nov. 17, 2006, published in May 22, 2008, and also claims to be related to a DBMS SQL/XML related patent filed in 2005 (is that an attempt to claim for anteriority?).&lt;br /&gt;&lt;br /&gt;As far as I can sum it up, it organizes its claim around three fundamental findings:&lt;br /&gt;&lt;span style="font-size:78%;"&gt;(usual disclaimer here - this is my own view etc)&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;CQL or SQL-alike continuous event processing languages fall short on dealing with &lt;span style="font-weight: bold;"&gt;structured &lt;/span&gt;data streams&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;especially &lt;span style="font-weight: bold;"&gt;XML&lt;/span&gt;&lt;/li&gt;&lt;li&gt;both as &lt;span style="font-weight: bold;"&gt;input &lt;/span&gt;event stream and as &lt;span style="font-weight: bold;"&gt;output &lt;/span&gt;event streams (out of the continuous query).&lt;/li&gt;&lt;/ol&gt;f.e. support for&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;SELECT RStream(count(*)) FROM StockTradeXMLStream AS&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;sx [RANGE 1 Hour SLIDES 5 minutes] WHERE XMLExists( ‘/TradeRecord[TradeSymbol = “ORCL” and&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;TradePrice &gt;= 14.00 and TradePrice &lt;= 16.00]’ PASSING VALUE(sx))&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;I was a bit surprised by this patent because there is an interesting positionning dilemna. Oracle has publicly advertised &lt;a href="http://avasseur.blogspot.com/2008/09/cep-standard-really.html"&gt;its wishes to standardize CQL&lt;/a&gt; in some ways, and this patent is now an advertised intent to lock a subset of it.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Is it a good way toward standardization consensus?: I don't think so - it blurs your motivation for standardization ("leave XML out, it's patented - more value in my own product and more FUD to yours")&lt;/li&gt;&lt;li&gt;Is it a good way to quickly empower the user? I don't think so - more locking deep down to the language (remember all the messy ANSI SQL derivatives right?)&lt;/li&gt;&lt;li&gt;Is it a good way to innovate? I don't think so - bring it to end users and call for participation&lt;/li&gt;&lt;/ul&gt;As to know if there is anteriority or not - let's list some of XML support in different DSMS / CEP products:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Coral8, back in &lt;a href="http://www.ebizq.net/news/7290.html"&gt;Sept. 2006&lt;/a&gt;, support the same XMLAgg, XMLTable and alike - see also their &lt;a href="http://www.coral8.com/system/files/assets/pdf/Coral8XMLCookbook.pdf"&gt;XML cookbook&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Esper, back in &lt;a href="http://esper.codehaus.org/esper/history/history.html"&gt;August 2006&lt;/a&gt;, supports for XML events. The Esper EPL actually does a very nice job at &lt;span style="font-weight: bold;"&gt;not&lt;/span&gt; exposing XPath or XML in the EPL and automates the &lt;a href="http://esper.codehaus.org/esper-2.3.0/doc/reference/en/html/event_representation.html#eventrep-xml-dom"&gt;XPath plumbing&lt;/a&gt; - so that the EPL is actually event representation agnostic. I think that is a superior design&lt;br /&gt;&lt;/li&gt;&lt;li&gt;As a generalization, Esper, since day 1 (somewhere in 2005), supports &lt;span style="font-weight: bold;"&gt;Object structured event streams&lt;/span&gt; - which is a generalization of xml structured streams obviously.&lt;/li&gt;&lt;li&gt;iSpheres (now at Avaya) - can't even have a date but likely 2003 or so&lt;/li&gt;&lt;/ul&gt;And I could keep the list growing...&lt;br /&gt;I am not saying patents are good or evil or a bit of both - that's no the point here. But this one just strikes me for what it is. I'd be curious to hear from Coral8 folks as well as others.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-1446333239401632438?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/1446333239401632438/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=1446333239401632438' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/1446333239401632438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/1446333239401632438'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2008/11/cep-and-patents.html' title='CEP and patents'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-7431910249219552204</id><published>2008-10-29T15:31:00.006+01:00</published><updated>2008-10-29T23:55:07.725+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CEP'/><title type='text'>SOA, EDA and CEP</title><content type='html'>There has been some coverage in the &lt;a href="http://soa-eda.blogspot.com/2008/10/eda-versus-cep-once-again.html"&gt;blogosphere&lt;/a&gt; on how SOA, EDA and CEP relate to each others.&lt;br /&gt;&lt;blockquote style="font-style: italic; color: rgb(0, 0, 102);"&gt;"So CEP is not EDA, EDA is more than CEP. Promoting CEP as being EDA is far too simple. And yet that is what is happening in the current IT space."&lt;br /&gt;"Especially the vendors of event processors focus too much on CEP as being EDA".&lt;/blockquote&gt;&lt;a href="http://streambase.typepad.com/streambase_stream_process/2008/10/eda-and-cep-wheres-the-beef.html"&gt;Mark Palmer&lt;/a&gt; from StreamBase answered some&lt;br /&gt;&lt;blockquote style="font-style: italic;"&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;"CEP, in fact, is a really important element of an effective EDA.  It's not a required element, but it sure makes it better"&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;That's how I presented it at &lt;a href="http://streambase.typepad.com/streambase_stream_process/2008/10/eda-and-cep-wheres-the-beef.html"&gt;JavaOne back summer 2007&lt;/a&gt;, and this still happens to be true - no matter how vendors are mashing up various concepts about it to try to differentiate one from each other (CEP and Grid, CEP and Web2.0, CEP and DDS, CEP and edge processing, CEP and SOA, CEP and BRMS, CEP and XTP etc.).&lt;br /&gt;Here are two excerpts from the presentation I delivered with Thomas Bernhardt from &lt;a href="http://www.espertech.com/"&gt;Esper/EsperTech&lt;/a&gt; fame:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_easBGwiqqSs/SQh5fj3sWpI/AAAAAAAAAGc/LmR3jdgmAMQ/s1600-h/eda_1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 241px;" src="http://1.bp.blogspot.com/_easBGwiqqSs/SQh5fj3sWpI/AAAAAAAAAGc/LmR3jdgmAMQ/s320/eda_1.png" alt="" id="BLOGGER_PHOTO_ID_5262589747694164626" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_easBGwiqqSs/SQh5rYv_BbI/AAAAAAAAAGk/A_Io1CM94xY/s1600-h/eda_2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 242px;" src="http://3.bp.blogspot.com/_easBGwiqqSs/SQh5rYv_BbI/AAAAAAAAAGk/A_Io1CM94xY/s320/eda_2.png" alt="" id="BLOGGER_PHOTO_ID_5262589950867473842" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you talk to folks using CEP (build or buy - does not matter) in some industries such as investment banking, they'll tell you this has nothing to do with SOA but has to do with XTP.&lt;br /&gt;&lt;br /&gt;It's time to learn from past history.&lt;br /&gt;&lt;br /&gt;A similar debates occurred not that long time ago around the SOA and ESB terms &lt;a href="http://www.computerworld.com/managementtopics/management/story/0,10801,104285,00.html"&gt;(2005 article on ComputerWorld)&lt;/a&gt;. For the record, &lt;a href="http://www.google.com/search2001/search?q=%22enterprise+service+bus%22&amp;amp;hl=en&amp;amp;btnG=Search"&gt;back in 2001 ESB and SOA did not even existed&lt;/a&gt;. Yet, some visionaries such as Sonic folks introduced ESB as a COTS product, despite established or maturing MOMs presence such as TibcoRV, MQ, or JMS-based/J2EE MOMs and a whole set of in house built solutions.&lt;br /&gt;&lt;br /&gt;With no surprise, in 2008, I'd be curious to hear someone that would disagree with the statement below, which is in fact a copy/paste/replace from comments happening right now in the blogosphere rel. CEP and EDA as stated at the beginning of this post:&lt;br /&gt;&lt;blockquote style="color: rgb(0, 0, 102); font-style: italic;"&gt;An ESB is not SOA, SOA is more than ESB. Promoting ESB as being SOA is far too simple. And yet that is what happened in the early days (back in 2001).&lt;/blockquote&gt;Got it now? Here is mine bold claim:&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);font-size:130%;" &gt;&lt;blockquote&gt;A CEP engine is to EDA what an ESB is to SOA.&lt;br /&gt;(And it's also more than just that)&lt;br /&gt;&lt;/blockquote&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-7431910249219552204?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/7431910249219552204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=7431910249219552204' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7431910249219552204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7431910249219552204'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2008/10/soa-eda-and-cep.html' title='SOA, EDA and CEP'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_easBGwiqqSs/SQh5fj3sWpI/AAAAAAAAAGc/LmR3jdgmAMQ/s72-c/eda_1.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-940008942054555967</id><published>2008-10-29T11:06:00.002+01:00</published><updated>2008-10-29T11:27:56.095+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CEP'/><title type='text'>Esper - course on DSMS at University of Oslo</title><content type='html'>The University of Oslo, Norway, is running for 2008 some courses on Data Stream Management Systems (DSMS) - some of it based on &lt;a href="http://esper.codehaus.org"&gt;Esper&lt;/a&gt;.&lt;br /&gt;DSMS was the term coined by academic work as opposition to DBMS (database) in the "early days" before the more marketed Complex Event Processing CEP acronym was introduced. CEP is now more widely used by vendors, press and analysts as productization and real world deployment is taking place.&lt;br /&gt;&lt;br /&gt;Some course materials are available online, and it is worth the read because it recaps on the key concepts, fit for purpose, and mechanics of DSMS/CEP engines such as TelegraphCQ, Stream, Borealis and Esper.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.uio.no/studier/emner/matnat/ifi/INF5090/v08/undervisningsmateriale/INF5090-Introduction-2008-Oslo.pdf"&gt;Introduction&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.uio.no/studier/emner/matnat/ifi/INF5090/v08/undervisningsmateriale/INF5090-DSMS-1-2008-Oslo.pdf"&gt;DSMS part 1&lt;/a&gt; - Applications Concepts and Systems&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.uio.no/studier/emner/matnat/ifi/INF5090/v08/undervisningsmateriale/INF5090-DSMS-2-2008-Oslo.pdf"&gt;DSMS part 2&lt;/a&gt; - Sensor Networks (less interesting unless you are in this area)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.uio.no/studier/emner/matnat/ifi/INF5090/v08/undervisningsplan.xml"&gt;Course catalog&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;There are also 2 &lt;a href="http://www.uio.no/studier/emner/matnat/ifi/INF5090/v08/undervisningsmateriale/2008_UiO-lab_assigin_detail.pdf"&gt;project assignments&lt;/a&gt; that plan to leverage Esper - which is an excellent illustration of how open source can be leveraged in the academic world.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Extending a DSMS benchmark&lt;/li&gt;&lt;li&gt;Online analysis of medical sensor data with the Esper Event Stream Processing System&lt;/li&gt;&lt;/ul&gt;There is obviously great confidence that the Esper project will not be closed down anytime soon for monetization purpose - unlike what happened with other such DSMS projects (if not all...). The direction around &lt;a href="http://esper.codehaus.org"&gt;Esper&lt;/a&gt; and &lt;a href="http://www.espertech.com"&gt;enterprise open source&lt;/a&gt; is already crystal clear and that's definitely a win-win for both academics, community, and enterprise practitioners.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-940008942054555967?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/940008942054555967/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=940008942054555967' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/940008942054555967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/940008942054555967'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2008/10/esper-course-on-dsms-at-university-of.html' title='Esper - course on DSMS at University of Oslo'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-3949644705833203948</id><published>2008-10-16T16:25:00.008+02:00</published><updated>2008-10-18T22:04:55.383+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CEP'/><title type='text'>Complex Event Processing and Data Fusion - Esper demo</title><content type='html'>I have put together a &lt;span style="font-weight: bold;"&gt;live demo of a CEP track and trace application&lt;/span&gt; based on &lt;a href="http://esper.codehaus.org/"&gt;Esper Complex Event Processing&lt;/a&gt; (CEP).&lt;br /&gt;&lt;br /&gt;The entire scenario has been designed and developed by &lt;a href="http://www.dfrc.ch/"&gt;Data Fusion Research Center AG&lt;/a&gt;, a Switzerland based company &lt;span style="font-style: italic;"&gt;"that is quickly becoming a leading center of knowledge, research, and development in the field of geospatial data fusion and analysis"&lt;/span&gt;. DFRC has chosen Esper for their CEP solution, and has kindly made preliminary results of their work available. I have rewrapped their application bits into a single Java WebStart package so that you can run it securely in a sandboxed environment without installing anything.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;The Scenario&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;The scenario illustrates:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Edge computing&lt;/span&gt;, with raw events coming from radio sensors or ground based radars at the boundaries of a classical IT infrastructure&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Complex Event Processing&lt;/span&gt;, an automated way for deriving coarse events out of real-time event streams, using advanced concepts such as time driven computations and causality concepts. A CEP solution typically comes with an abstracted programming model or event processing language so as to empowers the application developers with a &lt;span style="font-style: italic;"&gt;continuous query &lt;/span&gt;paradigm.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Data Fusion&lt;/span&gt;, a "set of techniques that combine data from multiple sources and gather that information in order to achieve inferences, which will be more efficient and potentially more accurate than if they were achieved by means of a single source" (&lt;a href="http://en.wikipedia.org/wiki/Data_fusion"&gt;wikipedia&lt;/a&gt;). Data Fusion can sometime appear as a conceptual superset of CEP. In the DFRC application, the CEP algorithm can be tuned in several ways - which directly maps to the "potentially more accurate" goal of the Data Fusion approach.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Rich client application&lt;/span&gt;, to empower the business user and represent CEP / Data Fusion derived information in the most efficient way (in this case a satellite map with real time moving icons for identified aircrafts). CEP + BAM or CEP + BI - it all comes down to materializing real-time information out of the CEP / Data Fusion engine.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;The Problem&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Assume ground radars are pushing position events from disparate non-identified sources flying all around (friends or foo, UFO, noise, doesn't matter):&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;blockquote style="color: rgb(0, 0, 102);"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;PointEvent {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    latitude&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    longitude&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;For the example app, the events are simulated from a raw flat file:&lt;br /&gt;&lt;blockquote  style="color: rgb(0, 0, 102);font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;46.5    7.2&lt;br /&gt;47      7.2&lt;br /&gt;46      7.2&lt;br /&gt;46.5    7.2&lt;br /&gt;47      7.2&lt;br /&gt;46.3    7.2&lt;br /&gt;...&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;The challenge is to &lt;span style="font-weight: bold;"&gt;identify all the flight paths in real time and eliminate noise, so as to figure out where are the aircrafts, what are their flight path&lt;/span&gt;, and determine if further investigation has to be performed by humans or downstream systems.&lt;br /&gt;&lt;blockquote style="font-style: italic;"&gt;&lt;span style="font-size:130%;"&gt;It is all about turning real-time raw event streams into situational awareness.&lt;/span&gt;&lt;/blockquote&gt;A flight path is a directed sequence of position events that is extremely likely to represent a real aircraft trajectory. It will be displayed on an interactive map, and specific tresholds of the data fusion detection algorithm can be tuned in the client side application.&lt;br /&gt;Relying on CEP and Data Fusion concepts ensures we can scale to a large number of aircrafts, a high troughput of position events, and truely empowers the business users, turning a raw stream of latitute/longitude tuples into a rich system.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_easBGwiqqSs/SPdbcfVIEcI/AAAAAAAAAGQ/Jr8uz8AF37g/s1600-h/screen_resize.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_easBGwiqqSs/SPdbcfVIEcI/AAAAAAAAAGQ/Jr8uz8AF37g/s400/screen_resize.JPG" alt="" id="BLOGGER_PHOTO_ID_5257771634982916546" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;The Solution&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The solution is implemented using &lt;a href="http://esper.codehaus.org/"&gt;Esper&lt;/a&gt;. Esper combines&lt;br /&gt;&lt;ol&gt;&lt;li&gt;A full featured &lt;span style="font-weight: bold;"&gt;EPL - &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;event processing language&lt;/span&gt;. It can be for simplicity considered as an SQL-look-alike language augmented with time and causality. Main point here: this is a continuous query paradigm, and not a repeatedly executed query, and there is no database.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;An efficient, feature rich CEP engine&lt;/span&gt;, implemented in Java (also available in .Net/C#). Refer to the &lt;a href="http://esper.codehaus.org/esper/documentation/documentation.html"&gt;docs&lt;/a&gt;, &lt;a href="http://esper.codehaus.org/tutorials/tutorial/presentations.html"&gt;presentations&lt;/a&gt; and &lt;a href="http://www.espertech.com/"&gt;website&lt;/a&gt; for more details and usage scenarios.&lt;/li&gt;&lt;li&gt;An &lt;span style="font-weight: bold;"&gt;open middleware&lt;/span&gt; platform with open APIs, leveraging existing standards, that can be integrated into an existing infrastructure.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;The &lt;span style="font-weight: bold;"&gt;algorithm&lt;/span&gt; designed by DFRC can be summarized as below (from their case study). Key capabilities, such as reusing existing geodesic distance and azimuth delta computation libraries straight into the Esper EPL language are also key capabilities being leveraged.&lt;br /&gt;&lt;blockquote style="font-style: italic; color: rgb(0, 0, 102);"&gt;&lt;span style="font-size:100%;"&gt;"Basically the algorithm was written to correlate events that are &lt;span style="font-weight: bold;"&gt;close enough together in distance and direction&lt;/span&gt; during a specific time frame.&lt;br /&gt;Those events are considered as a potential flight path. Once it correlates events, it builds a flight path between connected events.&lt;br /&gt;&lt;br /&gt;The algorithm compares flight paths, if any two paths share start or end points, which would mean that we have a &lt;span style="font-weight: bold;"&gt;longer flight path containing 3 points&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;It then checks any 3 point flight path &lt;span style="font-weight: bold;"&gt;measuring the azimuth difference&lt;/span&gt; from the 1st to 2nd and the 2nd to 3rd. If difference is less than a predetermined number of degrees we consider it an &lt;span style="font-weight: bold;"&gt;identified aircraft&lt;/span&gt;."&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Demonstration and Conclusion&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://dist.codehaus.org/esper/EsperDataFusion.jnlp"&gt;Run the live demo (Java WebStart)&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;    Quick howto:&lt;br /&gt;Accept the Java Web Start security dialog&lt;br /&gt;The rich client application launches and display a satellite map&lt;br /&gt;Click the &lt;span style="font-style: italic;"&gt;Start&lt;/span&gt; Button&lt;br /&gt;Blue dots on the map are the raw position events. Red lines are the flight paths identified out of the raw data. Green arrows are the identied aircrafts&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dfrc.ch/esper/"&gt;Read more from DFRC AG case study&lt;/a&gt;&lt;br /&gt;&lt;a href="http://esper.codehaus.org/"&gt;Read more about Esper&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The demo is entirely databaseless and serverless and fits in just 3 MB binaries. The very same concepts implemented here with Esper can of course be pushed out to the real world, with entire control of the architecture, its scalability and integration with fully fledged sensors/server/client setup.&lt;br /&gt;Congratulations to DFRC for putting it together.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-3949644705833203948?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/3949644705833203948/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=3949644705833203948' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/3949644705833203948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/3949644705833203948'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2008/10/complex-event-processing-and-data.html' title='Complex Event Processing and Data Fusion - Esper demo'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_easBGwiqqSs/SPdbcfVIEcI/AAAAAAAAAGQ/Jr8uz8AF37g/s72-c/screen_resize.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-972012299473073474</id><published>2008-10-13T16:09:00.007+02:00</published><updated>2008-10-14T21:52:32.817+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CEP'/><title type='text'>Complex Event Processing with Esper making its way to Java community</title><content type='html'>There has been some nice coverage around &lt;a href="http://esper.codehaus.org/"&gt;Esper&lt;/a&gt; and Complex Event Processing (CEP) in the Java community recently:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.dzone.com/links/complex_event_processing_with_esper_2.html"&gt;Complex Event Processing with Esper&lt;/a&gt;, on DZone and published by OCI Inc.' Paul Jensen. A nice introductory article that covers the basics of Esper 2.x.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.manning.com/davis/"&gt;Open Source SOA&lt;/a&gt; upcoming book at Manning, due for availability in March 2009 by Jeff Davis - see interview on &lt;a href="http://www.developerzone.com/articles/interview-with-jeff-davis-auth"&gt;DZone&lt;/a&gt;. The book will cover CEP with Esper, alongside ESB, SCA, BRMS, and BPM all with open source solutions.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;&lt;/b&gt;&lt;blockquote style="font-style: italic;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;"Jeff&lt;/b&gt;: Complex Event Processing is a somewhat emerging technology, at least in the open source space. With CEP, real-time business events are sent to the engine, which can then use correlation and pattern matching rules to determine whether any anomalies are occurring within your enterprise. The real-time analytical engine is what differentiates CEP from other more traditional BI vendors, which tend to evaluate events after-the-fact. CEP is very exciting, and can be used for anything from compliance, monitoring service levels, to real-time trending."&lt;/span&gt;&lt;/blockquote&gt;It's great to see that after the core Esper team - including myself - spent time doing some evangelization for the last 2 years with articles all around on &lt;a href="http://www.onjava.com/pub/a/onjava/2007/03/07/esper-event-stream-processing-and-correlation.html"&gt;OReilly&lt;/a&gt;, &lt;a href="http://www.theserverside.com/tt/articles/article.tss?l=ComplexEventProcessing"&gt;The Server Side&lt;/a&gt;, &lt;a href="http://www.infoq.com/news/Esper--ESP-CEP"&gt;InfoQ&lt;/a&gt; and &lt;a href="http://esper.codehaus.org/tutorials/tutorial/presentations.html"&gt;Java One&lt;/a&gt;, it is now being taken to the next level thru autonomic contributions. That is one of the great outcome of making things available under an open source model.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-972012299473073474?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/972012299473073474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=972012299473073474' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/972012299473073474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/972012299473073474'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2008/10/complex-event-processing-with-esper.html' title='Complex Event Processing with Esper making its way to Java community'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-8319736658457569104</id><published>2008-09-08T22:30:00.009+02:00</published><updated>2008-09-10T13:57:18.108+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CEP'/><title type='text'>CEP standard, really?</title><content type='html'>The recently published paper by Oracle and StreamBase has triggered some deep echo in the CEP blogosphere.&lt;br /&gt;The paper "Towards A Streaming SQL Standard" which was promoted in &lt;a href="http://www.finextra.com/fullpr.asp?id=23024"&gt;a StreamBase sponsored press release&lt;/a&gt; first appeared from the &lt;a href="https://www.cs.auckland.ac.nz/research/conferences/vldb08/index.php/Accepted_Papers"&gt;VLDB&lt;/a&gt; / &lt;strong style="font-weight: normal;"&gt;Very Large Data Base Conference which took place &lt;/strong&gt;on August 28, 2008 and is a joint work from Oracle, StreamBase and Stanford/Cornell universities (&lt;a href="http://www.cs.brown.edu/%7Eugur/streamsql.pdf"&gt;full paper&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Marc Adler from the user camp posted twice &lt;a href="http://magmasystems.blogspot.com/2008/08/brief-thoughts-on-standardized.html"&gt;here&lt;/a&gt; and &lt;a href="http://magmasystems.blogspot.com/2008/08/more-on-towards-streaming-sql-standard.html"&gt;there&lt;/a&gt; on that matter, also asking Coral8 vendor to comment, which &lt;a href="http://www.coral8.com/blogs/blog-entry/streaming-sql-standards"&gt;they did&lt;/a&gt;, and few days later, Apama also commented &lt;a href="http://apama.typepad.com/my_weblog/2008/09/sql-standards-.html"&gt;here&lt;/a&gt; although trying to move the debate "to mine (event processing language) is better than yours".&lt;br /&gt;&lt;br /&gt;Overall, the comments are a mix of&lt;br /&gt;&lt;ul&gt;&lt;li&gt;"how that can be call standardization effort ?"&lt;/li&gt;&lt;li&gt;"how much an end user does care about the differences between X and Y engines as long as each engine documentation is clear about its behavior"&lt;br /&gt;&lt;/li&gt;&lt;li&gt;"how a new SPREAD operator would be more of a solution than an output clause" - a so called "big switch" approach that is available in Coral8, Esper, and likely others.&lt;/li&gt;&lt;/ul&gt;It all sounds like the title of the paper ("... standards") and its context (publication in a mostly academic conference (not a user conference)) got disconnected - on purpose or not.&lt;br /&gt;&lt;br /&gt;There are some facts I would like to remind everyone:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Standards are not driven by having 2 actors work or study together (whatever there respective market caps or marketing loudness). &lt;span style="font-weight: bold;"&gt;Standards are driven by acceptance&lt;/span&gt; - which is in itself a de-jure or a de-facto acceptance. To date, neither StreamBase nor Oracle advertise a product that implements what they advocate.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;This is an academic work&lt;/span&gt; ie mostly R&amp;amp;D from Oracle. This is not claimed as going toward product direction change for Oracle nor StreamBase. I think this is far from whatever road a company like Oracle would follow for a standardization effort and this is more close to StreamBase hooking on the elephant to issue a press release that ranks #4 on Google when searching "Oracle CEP".&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Oracle itself has more than one event processing language and implementation&lt;/span&gt;. The one from WebLogic Event Server (which comes from BEA acquisition hence inherits from Esper capabilities given the relationship between &lt;a href="http://www.espertech.com/"&gt;EsperTech&lt;/a&gt; and BEA) does have the so called "big switch" approach that is illustrated in the paper. See docs from &lt;a href="http://download.oracle.com/docs/cd/E11036_01/wlevs20/epl_guide/clauses.html#wp1016865"&gt;Oracle site&lt;/a&gt; about the &lt;a href="http://www.oracle.com/technology/software/products/cep/index.html"&gt;Oracle Complex Event Processing 2.0&lt;/a&gt; (ie rebranded WebLogic Event Server 2.0)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;The Oracle product doc itself precisely illustrates this big switch like this:&lt;br /&gt;&lt;span style="font-style: italic; color: rgb(51, 0, 153);"&gt;    SELECT *  FROM StockTickEvent RETAIN 5 EVENTS  OUTPUT EVERY 90 SECONDS&lt;/span&gt;&lt;br /&gt;which in &lt;a href="http://esper.codehaus.org/"&gt;Esper&lt;/a&gt; would be&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="color: rgb(51, 0, 153);"&gt;select * from StockTickEvent.win:length(5) output every 1.5 minutes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;A better title in that regards would have been "&lt;span style="font-weight: bold;"&gt;Unifying tuple based and time based processing in event streaming engines&lt;/span&gt;" (far less attractive), or simply the one used by complexevents.com &lt;a href="http://complexevents.com/?p=408"&gt;to announce&lt;/a&gt; the paper "StreamBase and Oracle team on CEP research" (although not a suitable title for an academic publication) - nothing more, nothing less - and blogosphere should take some wisdom reacting to such an initiative. Collaboration is always a good thing, and obviously always starts with 2 actors.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-8319736658457569104?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/8319736658457569104/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=8319736658457569104' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/8319736658457569104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/8319736658457569104'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2008/09/cep-standard-really.html' title='CEP standard, really?'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-5838101987667405777</id><published>2008-08-06T11:15:00.002+02:00</published><updated>2008-08-06T11:42:27.738+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CEP'/><title type='text'>Complex Event Processing meets Business Intelligence: CEP BI</title><content type='html'>&lt;a href="http://www.espertech.com/"&gt;EsperTech&lt;/a&gt; has announced a technology agreement with Business Objects, an SAP company. The &lt;a href="http://www.espertech.com/news/20080730_bo.php"&gt;news describes:&lt;/a&gt;:&lt;br /&gt;&lt;span style="font-style: italic;"&gt;    "EsperTech (...) unveiled that Business Objects, an SAP company and the world's leading provider of business performance optimization solutions, will incorporate EsperTech's Esper product, for evaluation, into Business Objects Labs' "Event Driven BI" prototype"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Beyond the headlines, you can actually download and run  &lt;a href="http://labs.businessobjects.com/edbi/default.asp"&gt;the real world prototype from Business Objects Labs that integrates  BusinessObjects XI 3.0 ( XCelsius 2008, InfoView, BI Widgets) with Esper&lt;/a&gt;, and also access a recorded demo.&lt;br /&gt;&lt;br /&gt;This is a really great combination, and it's great to see how BO worked on abstracting the Esper CEP into Business Intelligence semantics that is known by their user base and target audience rather than creating yet another CEP engine or claiming "we do CEP too" without true innovation.&lt;br /&gt;&lt;br /&gt;Also interesting, &lt;a href="http://www.coral8.com/"&gt;Coral8&lt;/a&gt; has also announced &lt;a href="http://www.coral8.com/news/pr/256.html"&gt;a "Marketing and Technology" agreement with Actuate&lt;/a&gt;. Actuate is a fairly smaller BI player, but well know for beeing the maker of the open source Eclipse hosted BIRT platform.&lt;br /&gt;&lt;br /&gt;I am really a big fan of CEP + BI/real time dashboard integration, and it is great to see those  two announcements, that further bring CEP into the hands of business users through various level of visual and semantics abstractions.&lt;br /&gt;&lt;br /&gt;There are also some great side comments to draw from those 2 news showing up at roughly the same time:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Business Objects, Actuate (who are competitors), are probably right in their approach, and so are EsperTech and Coral8 (who are competitors): rising tide raises all boats.&lt;/li&gt;&lt;li&gt;It (again) demonstrates EsperTech has grown well beyond its initial BEA OEM relationship (Esper powers WebLogic Event Server / now Oracle), up to the point of beeing used by an Oracle top competitor: SAP.&lt;/li&gt;&lt;li&gt;If you haven't done so, checkout EsperTech &lt;a href="http://www.espertech.com/products/esperjdbc.php"&gt;EsperJDBC&lt;/a&gt; - a bridge between Esper CEP and any JDBC compliant tool. It shipped in May 2008 and includes a nice demo that is using ... BIRT!&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;EsperJDBC &lt;a href="http://www.espertech.com/community/esperjdbc.php"&gt;Sample code&lt;/a&gt; and &lt;a href="http://www.espertech.com/resources/index.php"&gt;recorded demo&lt;/a&gt; (follow the &lt;span style="font-style: italic;"&gt;"EsperJDBC and Business Intelligence reporting and charting with Eclipse BIRT"&lt;/span&gt; demo link) available.&lt;br /&gt;&lt;br /&gt;It seems that while EsperTech worked early in that area, beyond technology, Coral8 secured some more marketing ;-) Well done folks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-5838101987667405777?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/5838101987667405777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=5838101987667405777' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/5838101987667405777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/5838101987667405777'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2008/08/complex-event-processing-meets-business.html' title='Complex Event Processing meets Business Intelligence: CEP BI'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-556076929946404939</id><published>2008-04-06T11:48:00.000+02:00</published><updated>2008-04-07T12:01:11.369+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CEP'/><title type='text'>On CEP and SaaS</title><content type='html'>There has been a few announcements recently around CEP solutions delivered as SaaS.&lt;br /&gt;The first one to my knowledge is &lt;a href="http://www.datacomplex.net/index.html"&gt;DataComplex&lt;/a&gt;, which is itself build upon Esper (read announcement &lt;a href="http://complexevents.com/?p=333"&gt;here&lt;/a&gt;).&lt;br /&gt;The second one seems to be &lt;a href="http://www.rulecore.com/"&gt;RuleCore&lt;/a&gt;, which as far as I recall from previous posts from his lead is build upon the Mule open source ESB and Oracle BerkeleyDB.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.datacomplex.net/index.html"&gt;DataComplex&lt;/a&gt; is pretty open on its capabilities and you can sign up for a free trial. It is also interesting that the focus is "business users", with f.e. google doc integration (ie a line in a google doc sheet (excel like) can be an event in itself), and other interesting things to come out of it.&lt;br /&gt;The pricing is well aligned on any SaaS business. It is a mix of per user and technical capabilities:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;account number (access to management console)&lt;/li&gt;&lt;li&gt;number of event stream types (not event count)&lt;/li&gt;&lt;li&gt; unlimited statements and events count (up to the point you overload your instance)&lt;/li&gt;&lt;li&gt;given memory size for the server instance&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;The price range from $10/month to $400/month&lt;br /&gt;(details &lt;a href="http://www.datacomplex.net/pricing.html"&gt;here&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;RuleCore on the opposite is really vague on its exact solution despite rants like &lt;span style="font-style: italic;"&gt;"for situation detection I actually think we are one of the leaders among the CEP vendors"&lt;/span&gt;. You cannot access any docs, screenshot, architecture diagram, customer reference, or any trial at all. It is thus difficult to figure out who is the target user, but it seems the only supported transport is JMS - so a fairly technical requirement.&lt;br /&gt;Despite low &lt;a href="http://rulecore.com/CEPblog/?p=306"&gt;advertised&lt;/a&gt; prices at 0.0001 euro/event there is actually a 500 euro/month fixed subscription.&lt;br /&gt;Otherwise you can stick to a 50 times more expensive pricing per event for a 50 euro/month fixed subscription.&lt;br /&gt;The model does not provides any details about actual technical capabilities (shared platform or dedicated instance like DataComplex, etc)&lt;br /&gt;(details &lt;a href="http://rulecore.com/content/view/16/35/"&gt;here&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;In both cases I think such offerings are worth tracking but without clear business user value and clear abstraction of the entire technical details, the value proposition is seriously impacted.&lt;br /&gt;&lt;br /&gt;DataComplex is definitely well ahead RuleCore on building out a value proposition. There are certainly benefits in putting CEP based solution as SaaS offering, but I believe it makes sense when you empower your business users almost immediately. It is not about being affordable as RuleCore seems to argue around, it is about IT agility and business alignment. This is what successful SaaS vendors do: SalesForces, Postini (acquired by Google), etc. SaaS is not just about externalizing hosting.&lt;br /&gt;&lt;br /&gt;You might want to read &lt;a href="http://en.wikipedia.org/wiki/Software_as_a_Service"&gt;here&lt;/a&gt; for some basics&lt;br /&gt;&lt;br /&gt;If you are like RuleCore a technology provider more than a SaaS provider, you certainly should consider do what Microsoft just announced: provide new licenses on a per CPU/month or per Subscriber/month basis for the real SaaS business focused vendors themselves.&lt;br /&gt;(details &lt;a href="http://www.microsoft.com/serviceproviders/saas/default.mspx"&gt;here&lt;/a&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-556076929946404939?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/556076929946404939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=556076929946404939' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/556076929946404939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/556076929946404939'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2008/04/on-cep-and-saas.html' title='On CEP and SaaS'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-2313821800520266240</id><published>2008-03-31T15:35:00.004+02:00</published><updated>2008-04-07T12:02:05.789+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CEP'/><title type='text'>Esper maturity and open source maturity models</title><content type='html'>&lt;a href="http://esper.codehaus.org/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Esper&lt;/span&gt;&lt;/a&gt; has definitely reached an exciting maturity already. There are many things happening, both controlled and uncontrolled, and this is what makes open source so powerful to widespread new paradigms such as &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;CEP&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;There has been some thoughts and criteria on what makes an open source project or product mature or not. The common &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;criterias&lt;/span&gt; are:&lt;br /&gt;&lt;b&gt;On the community side&lt;/b&gt; (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;ie&lt;/span&gt; widespread interest and growing number of knowledgeable people around it)&lt;br /&gt;&lt;ul&gt;&lt;li&gt;coverage in leading conference, by the core team (somewhat sponsored then) or by virtually any volunteer speaker ("raise your hand if you have some smart thing to say")&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;use by/integration with/ other open source projects or initiatives in a loosely controlled/sponsored way ("innovation happens elsewhere" kind of effect)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;coverage in good old technical books&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;On the enterprise side&lt;/b&gt; (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;ie&lt;/span&gt; more and more real-world deployments)&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;existence in a supported form, with full &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;IP&lt;/span&gt; liability and possibly enterprise level certifications and features&lt;/li&gt;&lt;br /&gt;&lt;li&gt;actual real world use in such a form&lt;/li&gt;&lt;br /&gt;&lt;li&gt;apparition in technical requirements for job descriptions&lt;/li&gt;&lt;br /&gt;&lt;li&gt;actual &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;roadmap&lt;/span&gt; and feature delivery&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Here are some links of maturity models with such &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;criterias&lt;/span&gt;:&lt;br /&gt;&lt;a href="http://www.qsos.org/?page_id=3"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;QSOS&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.navicasoft.com/pages/osmm.htm"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;OSMM&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://alexfletcher.typepad.com/all_bets_off/2007/08/five-phases-of-.html"&gt;industry analyst views&lt;/a&gt;&lt;br /&gt;&lt;a href="https://fossbazaar.org/?q=content/applicable-subset-open-source-maturity-model"&gt;HP content&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;All those maturity &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;criterias&lt;/span&gt; are matched today by &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;Esper&lt;/span&gt;, and this is very exciting to watch and act upon this.&lt;br /&gt;Here is what I can already wrap up:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;dedicated coverage in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;JavaOne&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;TheServerSide&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;NoFluffJustStuff&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;JAX&lt;/span&gt; conference, and more coming. Half of the coverage was from volunteer speakers: Brian &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;Sletten&lt;/span&gt; (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;Zepheira&lt;/span&gt;) and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;Papick&lt;/span&gt; G. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;Taboada&lt;/span&gt;. Links are:&lt;br /&gt;&lt;a href="http://esper.codehaus.org/tutorials/tutorial/presentations.html"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;Esper&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;slideware&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.nofluffjuststuff.com/speaker_topic_view.jsp?topicId=1237"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;NoFluffJustStuff&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://jax.de/konferenzen/wjax07/sessions.php?tid=596#session-19"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;JAX&lt;/span&gt; 2007&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;integration prototype with Apache &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;WS&lt;/span&gt;02 by Paul &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;Fremantle&lt;/span&gt; (Co-Founder and VP of Technical Sales at &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;WSO&lt;/span&gt;2), and Apache/IONA Camel/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;ActiveMQ&lt;/span&gt; by James &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;Strachan&lt;/span&gt; (Technical Director at IONA), David &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29"&gt;Greco&lt;/span&gt; and team. There is way more to do on that area of course.&lt;br /&gt;See &lt;a href="http://pzf.fremantle.org/2007/07/advanced-open-source-collage.html"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_30"&gt;WSO&lt;/span&gt;2&lt;/a&gt;  and &lt;a href="http://macstrac.blogspot.com/2008/02/using-apache-camel-activemq-and-esper.html"&gt;Apache Camel&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;dedicated chapter in "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_31"&gt;OSWorkflow&lt;/span&gt;" by Diego Adrian &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_32"&gt;Naya&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_33"&gt;Lazo&lt;/span&gt;, available on Amazon bookstore and any good bookstore. It covers Event Driven &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_34"&gt;SOA&lt;/span&gt;, Event Driven &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_35"&gt;BPM&lt;/span&gt; and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_36"&gt;Esper&lt;/span&gt; enabled &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_37"&gt;BAM&lt;/span&gt; in a dedicated chapter!&lt;br /&gt;Here at &lt;a href="http://www.packtpub.com/OSWorkflow-Java-open-source-Business-Process-Management/book"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_38"&gt;Packt&lt;/span&gt;&lt;/a&gt;  or on &lt;a href="http://www.amazon.com/o/ASIN/1847191525/105-2169855-7435661"&gt;Amazon&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;growth of &lt;a href="http://www.espertech.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_39"&gt;EsperTech&lt;/span&gt;&lt;/a&gt; as a company with a dual licensing and professional support model, including a wider product portfolio with f.e. &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_40"&gt;EsperHA&lt;/span&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;more &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_41"&gt;OEM&lt;/span&gt; agreements, more supported customers (see a few &lt;a href="http://www.espertech.com/partners/partners.php"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_42"&gt;referencable&lt;/span&gt; names&lt;/a&gt;)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;apparition in job descriptions f.e. here by &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_43"&gt;SunGard&lt;/span&gt; / &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_44"&gt;Finetix&lt;/span&gt;&lt;br /&gt;Here on &lt;a href="http://jobs.myspace.com/a/ms-jobs/list/q-Esper"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_45"&gt;MySpace&lt;/span&gt;&lt;/a&gt; or from &lt;a href="http://jobs-finetix.icims.com/finetix_jobs/jobs/candidate/job.jsp?jobid=1280&amp;amp;mode=view"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_46"&gt;Finetix&lt;/span&gt; directly&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_47"&gt;Esper&lt;/span&gt; is now in version 2.0, with 2.1 at the corner, with a version about every 3 months with a chunk of features that is most often here to match real-world demand&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;On the common things I hear is that &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_48"&gt;NEsper&lt;/span&gt;, the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_49"&gt;Esper&lt;/span&gt; .Net/C# version is &lt;span style="font-style: italic;"&gt;"lagging a bit &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_50"&gt;behind&lt;/span&gt;"&lt;/span&gt;. For one reason this is because the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_51"&gt;NEsper&lt;/span&gt; team is somewhat iterating on it as a port initiative thus always slightly with a version &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_52"&gt;behind&lt;/span&gt;, and for another reason is perhaps that the .Net community is not as large and disparate as the Java community to digest new concepts somewhat that fast (and so is it with &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_53"&gt;NHibernate&lt;/span&gt;, Spring Net, and a bunch of other products initially started in the Java world)&lt;br /&gt;&lt;br /&gt;I am really looking forward to 2008 and beyond!&lt;br /&gt;and I am already pleased to announce that &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_54"&gt;Esper&lt;/span&gt; will get coverage at &lt;b&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_55"&gt;JAX&lt;/span&gt; India 2008&lt;/b&gt; (nice job &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_56"&gt;Papick&lt;/span&gt;) - abstract available &lt;a href="http://www.sda-india.com/conferences/2008/JAX-INDIA/sessions.php#session29"&gt;here&lt;/a&gt; and that Tom' &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_57"&gt;TheServerSide&lt;/span&gt; Symposium 2008 &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_58"&gt;Las&lt;/span&gt; Vegas slides are available &lt;a href="http://esper.codehaus.org/tutorials/tutorial/presentations.html"&gt;online&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-2313821800520266240?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/2313821800520266240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=2313821800520266240' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/2313821800520266240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/2313821800520266240'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2008/03/esper-maturity-and-open-source-maturity.html' title='Esper maturity and open source maturity models'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-3092775377332034740</id><published>2008-03-13T11:34:00.002+01:00</published><updated>2008-03-13T11:44:06.633+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CEP'/><title type='text'>Esper adds HA, local cache and resiliency to CEP with EsperHA</title><content type='html'>&lt;a href="http://www.espertech.com"&gt;EsperTech&lt;/a&gt; has released its first non open source product &lt;a href="http://www.espertech.com/products/esperha.php"&gt;EsperHA&lt;/a&gt;.&lt;br /&gt;EsperHA is an extension to &lt;a href="http://esper.codehaus.org"&gt;Esper&lt;/a&gt; the leading open source ESP/CEP event processing engine for Java. It essentially adds key features to match common enterprise deployments requirements:&lt;br /&gt;- continuous query results can be made resilient and recovered if a crash occurs&lt;br /&gt;- they can deal with large data window with an overflow / page out to disk option (f.e. keep a 20 days moving average VWAP, or find causality between events over long periods of time - countless of use cases)&lt;br /&gt;- can simply make EPL statement durable so that they are re instantiated upon recovery / restart&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;From the &lt;a href="http://forum.complexevents.com/viewtopic.php?f=17&amp;t=61"&gt;announcement&lt;/a&gt; there is much more to look at, and the fact that all this comes at no code change, with fine level statement-level and stream-level configuration means that one can scale up or down its Esper applications with minimal effort.&lt;br /&gt;By contrast, Esper keeps everything in live memory which provides excellent throughput and low latency (see some figures &lt;a href="http://avasseur.blogspot.com/2007/08/esper-performance-more-than-500-000.html"&gt;here&lt;/a&gt;) but is 1/ bounded (few G or more likely 32G to 128G in real deployments) and 2/ is dropped upon shutdown / crash.&lt;br /&gt;EsperHA ensures one can trade-off low latency, high throughput and full resiliency in one system.&lt;br /&gt;&lt;br /&gt;This is an interesting crossroad for EsperTech as a company as it further strengthen its positioning and readiness for real world deployments, and nicely complements its so far professional open source / dual license model with a classic &lt;span style="font-style:italic;"&gt;software vendor&lt;/span&gt; one.&lt;br /&gt;There was already great evidence of Esper fit for purpose in real world situations, as &lt;a href="http://www.espertech.com/partners/partners.php"&gt;OEM and actual deployments demonstrated&lt;/a&gt; so far, but having this HA / resiliency option will certainly reinforce this.&lt;br /&gt;&lt;br /&gt;There is common FUD from classic / elephant vendors thrown at open source software - essentially saying that it is not enterprise ready, not operable, as it is made by a bunch of volunteers that don't care about production reliability. This seems EsperHA and EsperTech proof point how much of FUD are that kind of claims.&lt;br /&gt;&lt;br /&gt;You can sign up for a free trial and gain access to the download, docs and samples &lt;a href="http://www.espertech.com/products/esperha_evaluation.php"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-3092775377332034740?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/3092775377332034740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=3092775377332034740' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/3092775377332034740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/3092775377332034740'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2008/03/esper-adds-ha-local-cache-and.html' title='Esper adds HA, local cache and resiliency to CEP with EsperHA'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-8648566793526835260</id><published>2008-02-26T22:41:00.002+01:00</published><updated>2008-02-26T22:56:54.501+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CEP'/><title type='text'>Lab49 - have you looked at Esper?</title><content type='html'>Lab49 folks have been quite verbose in the Complex Event Processing (CEP) arena for financial services. They basically ended up partnering with pretty much anyone and almost every single month, skip to another CEP vendor to partner with.&lt;br /&gt;Nice but certainly tough to build up and scale up product expertise especially given there is no much standard in the CEP arena so far - but that definitely gives them a nice view on each products.&lt;br /&gt;&lt;br /&gt;To complete their 360° they should definitely look at &lt;a href="http://esper.codehaus.org"&gt;Esper&lt;/a&gt; and &lt;a href="http://www.espertech.com"&gt;EsperTech&lt;/a&gt; offering, including also &lt;a href="http://esper.codehaus.org"&gt;NEsper&lt;/a&gt; as they seem to be quite involved in .Net as well. They probably know where to reach out for that, and will certainly hear about it anyway as the number of deployments of (N)Esper in financial services is growing nicely.&lt;br /&gt;&lt;br /&gt;Few history on Lab49 ' somewhat fuzzy logic about partners:&lt;br /&gt;- February 2008 - &lt;a href="http://www.ebizq.net/news/9042.html"&gt;Aleri and Lab49 Partner on Tool to Visualize Market Liquidity&lt;/a&gt;&lt;br /&gt;- January 2008 - &lt;a href="http://newyorkscot.wordpress.com/2008/01/14/bea-intel-lab49-whitepaper-on-cep-in-capital-markets/"&gt;BEA-Intel-Lab49&lt;/a&gt; Whitepaper on CEP in Capital Markets (you can also find a more recent much vendor influenced podcast)&lt;br /&gt;- November 2007 - &lt;a href="http://www.streambase.com/newsevents-trading-networking-event.htm"&gt;Real-Time Trading and Industry Networking Event with Lab49 at StreamBase&lt;/a&gt;&lt;br /&gt;- June 2007 - &lt;a href="http://www.coral8.com/news/pr/149.html"&gt;Coral8 and Lab49 Partner&lt;/a&gt; to Provide Algorithmic Trading Framework on the Microsoft Software Platform&lt;br /&gt;&lt;br /&gt;Now you know what &lt;span style="font-style:italic;"&gt;partner&lt;/span&gt; means. We are all partners to make the point that CEP brings business value, and Lab49 does it well in financial services I think.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-8648566793526835260?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/8648566793526835260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=8648566793526835260' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/8648566793526835260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/8648566793526835260'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2008/02/lab49-have-you-looked-at-esper.html' title='Lab49 - have you looked at Esper?'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-7586288629678198907</id><published>2008-01-28T16:54:00.000+01:00</published><updated>2008-01-28T17:10:36.293+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CEP'/><title type='text'>Open Source ESBs and Esper CEP</title><content type='html'>Stefan Ried, a former SoftwareAG now at Forrester has given an interesting take on &lt;a href="http://www.stefan-ried.de/?p=17"&gt;possible strategies for Open Source ESBs&lt;/a&gt; during a recent Expert Meeting on BPM/BAM/CEP/SOA/EDA.&lt;br /&gt;&lt;br /&gt;You can read it from there.&lt;br /&gt;It is interesting to see CEP in the ESB capabilities list for 2008 (as a reminder 2008 is this year). This trend is definitely an interesting one, and folks like &lt;a href="http://wso2.com/"&gt;WSO2/Synapse&lt;/a&gt; have actually already done some prototype work with &lt;a href="http://esper.codehaus.org/"&gt;Esper&lt;/a&gt; - as described &lt;a href="http://pzf.fremantle.org/2007/07/event-stream-processing-in-synapse.html"&gt;here on Paul' blog&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You can definitely bet you'll hear much more about those ESBs / CEP integration with Esper throughout this year, despite it is already doable without federating capabilities in one server but using an ESB and an Esper event server bridged together with any kind of transport(JMS f.e.). This has the benefit of keeping the ESB stateless, rather than making it stateful (I consider CEP to be of a stateful kind) but certainly makes the architecture slightly more advanced so I am sure either ways will find their fans.&lt;br /&gt;&lt;br /&gt;Open Source Event-Driven SOA is right on Esper' track and WSO2/Synapse has definitely made some good steps forward already despite productization is not yet there right now. Let's wish Mule and JBossESB catch up so as to provide users choices yet consistent CEP semantics  - thru Esper of course!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-7586288629678198907?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/7586288629678198907/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=7586288629678198907' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7586288629678198907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7586288629678198907'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2008/01/open-source-esbs-and-esper-cep.html' title='Open Source ESBs and Esper CEP'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-3477018581456675028</id><published>2008-01-07T12:00:00.000+01:00</published><updated>2008-01-07T12:08:23.687+01:00</updated><title type='text'>Backup your data with MirrorFolder</title><content type='html'>I thought I'd blog about a great affordable piece of Windows Software: MirrorFolder. It  provides a software level real-time RAID-1 mode that can backup files in real time, and I am also largely using the option to auto-synchronize my backups upon connection of my USB hard drives. There is also a whole bunch of options for fine grained configuration.&lt;br /&gt;&lt;br /&gt;The 4.x version now includes a centralized GUI that is a great complement to the Windows shell integration (right click on a folder to configure its backup strategy).&lt;br /&gt;Get it from &lt;a href="http://www.techsoftpl.com/backup/index.php"&gt;Techsoft&lt;/a&gt;. It's 39 US$ so close to just 20 euros these days. Lucky me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-3477018581456675028?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/3477018581456675028/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=3477018581456675028' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/3477018581456675028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/3477018581456675028'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2008/01/backup-your-data-with-mirrorfolder.html' title='Backup your data with MirrorFolder'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-1663212238502202994</id><published>2008-01-04T10:19:00.000+01:00</published><updated>2008-01-04T11:02:09.992+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CEP'/><title type='text'>CEP vendors: RIP Kaskad, new Pion, and same IBM</title><content type='html'>End of 2007 has been an interesting time for the Complex Event Processing (CEP) ecosystem.&lt;br /&gt;First, Kaskad adds itself to the RIP list and closes business as reported by &lt;a href="http://magmasystems.blogspot.com/2007/12/farewell-kaskad.html"&gt;Marc&lt;/a&gt; and confirmed by Kaskad former CTO Colin Clark. This was 16 employees. So for those who would argue that a company with 16 employees is going to sustain better than one with less than 5 in the same market, well, not that obvious.&lt;br /&gt;I am not surprised by the news. Back in February 2007, Kaskad &lt;a href="http://www.redorbit.com/news/technology/856175/kaskad_technology_to_open_source_its_korreleratm_reg_nms_surveillance/index.html"&gt;had announced&lt;/a&gt; it would open source part of it offering. I had asked them for more details both privately and &lt;a href="http://tech.groups.yahoo.com/group/CEP-Interest/message/1418"&gt;publicly&lt;/a&gt; several time as I found the news interesting especially from an &lt;a href="http://esper.codehaus.org"&gt;Esper&lt;/a&gt; and &lt;a href="http://www.espertech.com"&gt;EsperTech&lt;/a&gt; perspective but never got any answer from Kaskad team. I wonder if they weren't already dead back that time...&lt;br /&gt;&lt;br /&gt;Other news I could spot thanks to &lt;a href="http://rulecore.com/CEPblog/?p=281"&gt;Marco&lt;/a&gt;: some Californians have started to chase the CEP market with an open source approach ala Esper - &lt;a href="http://atomiclabs.com/index.php"&gt;Pion&lt;/a&gt; from AtomicLabs: &lt;span style="font-style:italic;"&gt;Our goal is to build the world's #1 open source platform for complex event processing&lt;/span&gt;.&lt;br /&gt;It is actually quite far to compare to Esper, might be implemented in C++ and not Java / .Net, and has yet to be proven and most importantly has yet to expose some real CEP features especially some Event Processing Language (EPL). Data or event processing is not CEP. Welcome aboard guys and good license choice by the way (Affero GPL will ensure SaaS customers will have to buy something from them as well).&lt;br /&gt;&lt;br /&gt;Finally, IBM just woke up with WebSphere CTO saying &lt;a href="http://searchsoa.techtarget.com/qna/0,289202,sid26_gci1288485,00.html"&gt;CEP is SOA next big thing&lt;/a&gt;. Once again few notes here... What Jerry Cuomo says is actually &lt;span style="font-style:italic;"&gt;...I really believe it's the next big thing in SOA, and that's event processing.&lt;/span&gt; So he jumps on the CEP wagon but in fact extends its scope to event processing to make the point. Well, who would disagree with that then?&lt;br /&gt;I actually talked about the CEP - SOA - Event Processing relationship in my &lt;a href="http://esper.codehaus.org/tutorials/tutorial/presentations.html"&gt;JavaOne Esper presentation&lt;/a&gt; back early 2007.&lt;br /&gt;I am really looking forward to see what IBM will &lt;span style="font-weight:bold;"&gt;really deliver&lt;/span&gt; in that space, beyond research, research, research, forward looking announcements like &lt;a href="http://www.b-eye-network.com/view/6536"&gt;SystemS&lt;/a&gt; or tiny limited features additions here and there (see &lt;a href="http://www-128.ibm.com/developerworks/wikis/display/objectgridprog/Hello+World+stream+query+example"&gt;ObjectGrid CEP&lt;/a&gt; f.e.).&lt;br /&gt;I bet the next CTO will finally acknowledge that XTP meets SOA precisely through CEP and this one is really the next big thing - ie CEP is far from being just in SOA.&lt;br /&gt;For some reason Jerry forgot to add XTP to his mix ;-)&lt;br /&gt;&lt;br /&gt;2008 is going to be an interesting transition year for the CEP space as everyone is basically working on it growth, be it with open source, evangelizing, use case solving, or SOA bandwagon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-1663212238502202994?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/1663212238502202994/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=1663212238502202994' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/1663212238502202994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/1663212238502202994'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2008/01/cep-vendors-rip-kaskad-new-pion-and.html' title='CEP vendors: RIP Kaskad, new Pion, and same IBM'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-7948632437700633534</id><published>2007-11-21T14:59:00.000+01:00</published><updated>2007-12-19T11:47:36.351+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CEP'/><title type='text'>The 1 million events per second CEP</title><content type='html'>BEA has finally published some paper on WebLogic Event Server performance.&lt;br /&gt;It is available &lt;a href="http://response.bea.com/forms/WWWWW_WL_EVS_PERFORMA_XX_WP_08NV?tg=WWWWW.WL_EVS_PERFORMAGN.RE.WP.BE.08NV.X.RES"&gt;here&lt;/a&gt; (registration required).&lt;br /&gt;&lt;br /&gt;They finally jump in the vendor dance of the &lt;span style="font-style: italic;"&gt;1 million events per second ESP/CEP&lt;/span&gt; claim that I had blogged about before &lt;a href="http://avasseur.blogspot.com/2007/08/esper-performance-more-than-500-000.html"&gt;here&lt;/a&gt;, thus catching up with EsperTech' Esper and all others - unfortunately only as far as these performance claims mean.&lt;br /&gt;&lt;br /&gt;What is nice is that BEA provides details on the actual scenario, continuous queries and hardware used although the kit is not available for one to run on his own. To date Esper is still the only one to be completely open in the CEP performance area with full disclosure of results but also actual performance kit source code (see &lt;a href="http://esper.codehaus.org/esper/performance/performance.html"&gt;here&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Giving it a quick read, here is what I can sum up:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_easBGwiqqSs/R2j2nf0RdNI/AAAAAAAAAAU/9CTAuRd94F4/s1600-h/comments.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_easBGwiqqSs/R2j2nf0RdNI/AAAAAAAAAAU/9CTAuRd94F4/s400/comments.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5145633732686869714" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;!--&lt;br /&gt;&lt;small&gt;&lt;br /&gt;&lt;table border="1"&gt;&lt;br /&gt;&lt;tbody&gt;&lt;tr&gt;&lt;br /&gt;&lt;th&gt;What&lt;/th&gt;&lt;br /&gt;&lt;th&gt;BEA Event Server + RealTime JVM&lt;/th&gt;&lt;br /&gt;&lt;th&gt;Esper + classic JVM&lt;/th&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;th&gt;core total&lt;/th&gt;&lt;br /&gt;&lt;td&gt;16 x 2.93GHz (latest quad core)&lt;/td&gt;&lt;br /&gt;&lt;td&gt;4 x 2 GHz (classic dual core)&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;th&gt;events / s&lt;/th&gt;&lt;br /&gt;&lt;td&gt;1 000 000&lt;/td&gt;&lt;br /&gt;&lt;td&gt;410 000 (network bottleneck reached)&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;th&gt;latency&lt;/th&gt;&lt;br /&gt;&lt;td&gt;avg 67.3us, 99.99% &lt;&gt;&lt;br /&gt;&lt;td&gt;avg 2.8us, 99.99% &lt;&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;th&gt;events / s / GHz&lt;/th&gt;&lt;br /&gt;&lt;td&gt;21 330&lt;/td&gt;&lt;br /&gt;&lt;td&gt;51 250&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;th&gt;CPU usage &lt;/th&gt;&lt;br /&gt;&lt;td&gt;?? not disclosed&lt;/td&gt;&lt;br /&gt;&lt;td&gt;65% (100Mbit network bottleneck reached)&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;th&gt;EPL statements count&lt;/th&gt;&lt;br /&gt;&lt;td&gt;400, for 200 symbols&lt;/td&gt;&lt;br /&gt;&lt;td&gt;1000 for 1000 symbols&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;th&gt;Stream window kind&lt;/th&gt;&lt;br /&gt;&lt;td&gt;2 or 3 events depth per symbol&lt;/td&gt;&lt;br /&gt;&lt;td&gt;1000 events depth per symbol&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;th&gt;Stream computation kind&lt;/th&gt;&lt;br /&gt;&lt;td&gt;trend up/down between 2 or 3 events&lt;/td&gt;&lt;br /&gt;&lt;td&gt;volume weighted average over 1000 events&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/small&gt;&lt;br /&gt;--&gt;&lt;br /&gt;(both use a &lt;span style="font-style: italic;"&gt;one thread per connection&lt;/span&gt; model to avoid context switching)&lt;br /&gt;&lt;br /&gt;So obviously the BEA Event Server performs well, no doubt on that. This said there are a few immediate comments:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The Esper benchmark somewhat set the stage, with a platform more than 4 times smaller (all ratio preserved, Esper appears almost 2.5 times faster though we cannot really compare things).&lt;/li&gt;&lt;li&gt;The Esper benchmark EPL statements are more complex, especially regarding memory profile: they keep sliding windows of 1000 events where the BEA benchmark keeps 2 or 3 events.&lt;/li&gt;&lt;li&gt;The Esper benchmark runs with more statements (1000 instead of 400). This is interesting as running more statement likely means less statement-level contention - so I am wondering why BEA is not running more statements here.&lt;/li&gt;&lt;li&gt;The BEA benchmark does not disclose CPU usage, and for some reason the average latency is high compared to the 99.99% latency (ie the worst case latency must be high). There are probably differences in the way the two benchmarks actually measure latency (total run, post warm up, snapshots etc).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Unfortunately, I haven't a quad CPU quad core Intel Caneland box in my lab to play further with this. &lt;span style="font-weight: bold;"&gt;This being said, the two benchmarks are completely meaningless as the use cases are highly specifics and narrowed down, so you should really read all this as vendor &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;standard &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;claims, or run your own benchmark for your own business meaningful scenario.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Welcome BEA in the 1 million events per second CEP category, and kudos to them for disclosing (almost) all the details.&lt;br /&gt;&lt;br /&gt;I also encourage you to read what &lt;a href="http://epthinking.blogspot.com/2007/11/mark-on-bench-and-mythical-event-per.html"&gt;Opher Etzion&lt;/a&gt; from IBM say on this, or also read what &lt;a href="http://www.bobsguide.com/guide/news/2007/Dec/12/Intel,_StreamBase_and_DSAL_powering_real-time_event_processing.html"&gt;StreamBase&lt;/a&gt; published recently on their own benchmark to understand why all those claims are... really just claims up until the point you do your own evaluation!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-7948632437700633534?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/7948632437700633534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=7948632437700633534' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7948632437700633534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7948632437700633534'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2007/11/1-million-events-per-second-cep.html' title='The 1 million events per second CEP'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_easBGwiqqSs/R2j2nf0RdNI/AAAAAAAAAAU/9CTAuRd94F4/s72-c/comments.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-6303445480449271484</id><published>2007-11-06T17:08:00.001+01:00</published><updated>2007-11-06T17:15:30.354+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CEP'/><title type='text'>on GPL and dual licensing</title><content type='html'>&lt;a href="http://www.db4o.com"&gt;db4o&lt;/a&gt; has just published a paper written by a law firm &lt;span style="font-style: italic;"&gt;Greenberg Traurig &lt;/span&gt;on GPL and dual licensing. This is core of their community and commercial business model, just as it is for &lt;a href="http://esper.codehaus.org"&gt;Esper &lt;/a&gt;and &lt;a href="http://www.espertech.com"&gt;EsperTech&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;That is one of the best and most of to date resources on GPL and dual licensing I have ever read, and I 'd encourage anyone working and using GPL code to read and understand it. It also does cover GPL and hosted projects (Application Service Provider), work for hire and distributor (of course) situation.&lt;br /&gt;&lt;br /&gt;You may read there: &lt;span style="font-style: italic;"&gt;You may hear people argue about whether the GPL is a contract or not. The important thing to understand is that whether it is or not, if you accept code under GPL terms you must abide by the GPL. If you breach the GPL, your rights under GPL license terminate, and you have no right to use the code at all. If this happens, you will be infringing the licensor’s copyright, and copyright infringement puts you at risk of civil damages or even criminal culpability with the possibility of heavy fines.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Read it &lt;a href="http://www.db4o.com/about/productinformation/whitepapers/#gpl"&gt;from there&lt;/a&gt; or PDF &lt;a href="http://www.db4o.com/about/productinformation/whitepapers/db4o%20Whitepaper%20-%20db4objects%20and%20the%20Dual%20Licensing%20Model.pdf"&gt;here&lt;/a&gt; directly from db4o website.&lt;br /&gt;&lt;br /&gt;If you want to read further on GPL and dual licensing, the following &lt;a href="http://lawandlifesiliconvalley.blogspot.com/"&gt;law blog&lt;/a&gt; is quite interesting as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-6303445480449271484?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/6303445480449271484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=6303445480449271484' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/6303445480449271484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/6303445480449271484'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2007/11/on-gpl-and-dual-licensing.html' title='on GPL and dual licensing'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-4714723390587088516</id><published>2007-09-26T18:15:00.000+02:00</published><updated>2007-09-26T23:21:35.922+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Middleware'/><title type='text'>Price per CPU is foolish and price per core reaches its end</title><content type='html'>I have been scratching my head recently on software vendors policies regarding pricing and multi core pricing. The game is completely foolish and hopefully will reach its end soon, as more and more vendors will show up pricing per user to best serve the SaaS model of their customers, or pricing per instance (read JVM instance, or software server instance in a generic fashion).&lt;br /&gt;&lt;br /&gt;Lets give it some background first and take the example of a small software vendor selling a distributed in-memory cache - aka Tangosol now owned by Oracle. Up until very recently before the Oracle acquisition, Tangosol had public price on its website, on a "per CPU" (in clear text) basis.&lt;br /&gt;In August 2007 they shipped a minor version of their software (now owned by Oracle) and announced a new price of about twice more expensive. I dare to raise the issue and Cameron (Tangosol former CEO now at Oracle) kindly dare to answer it: Tangosol &lt;em&gt;&lt;strong&gt;was priced per core and not per CPU despite advertised as per CPU on their web site...&lt;/strong&gt;&lt;/em&gt; Due to Oracle policies regarding CPU and core pricing, they had to go thru this price change.&lt;br /&gt;&lt;a href="http://www.infoq.com/news/2007/08/cohrence33#view_9325"&gt;Read it here&lt;/a&gt;.&lt;br /&gt;(no offense to Tangosol, it's great stuff and I am glad they clarified this).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Conclusion 1: Don't trust advertised per CPU prices.&lt;/strong&gt; Anyone advertising per CPU price without disclosing complete details regarding CPU and core policies is lying to defer the price debate, and brings complexity in a TCO comparison if they are in a competitive situation.&lt;br /&gt;&lt;br /&gt;Next step, let's recap on vendor policies regarding CPU and cores...&lt;br /&gt;&lt;br /&gt;You already know that you cannot buy single core x86 (Intel/AMD) chips anymore, that the norm is dual core, and that quad core per chip (read per socket on the mother board, with 1 socket = 1 CPU) will be the default in a 6 months timeframe (go check on dell.com, you can already buy quad CPU quad core servers).&lt;br /&gt;&lt;br /&gt;(disclaimer: this data is from searching in public sources):&lt;br /&gt;&lt;strong&gt;For Oracle,&lt;/strong&gt; you can read that each core accounts for either 0.5 or 0.75 CPU depending if it is a total dual core or quad core. So a double core costs 1.5 CPU units and a quad core costs 2 CPU units.&lt;br /&gt;Read it &lt;a href="http://www.theregister.co.uk/2005/07/15/oracle_core_pricing/"&gt;here&lt;/a&gt; and &lt;a href="http://www.gcn.com/print/26_22/44931-1.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;strong&gt;A quad CPU quad core costs 8 CPU units at Oracle.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;For BEA&lt;/strong&gt;, you can read that each core accounts for 0.25 CPUstarting at the 3rd core in a single CPU. So a dual core costs 1 CPU unit and a quad core costs 1.5 CPU units.&lt;br /&gt;Read details &lt;a href="http://www.gcn.com/print/26_22/44931-1.html"&gt;here&lt;/a&gt;. &lt;br /&gt;&lt;strong&gt;A quad CPU quad core costs 6 CPU units at BEA.&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;For IBM&lt;/strong&gt;, they switched to a proprietary defined Processor Value Unit that is assumed to better assess various processor architectures. In fact this is quite similar to what Oracle does if you look &lt;a href="http://www.channelregister.co.uk/2006/07/27/ibm_pvu/"&gt;here&lt;/a&gt; and on &lt;a href="http://www-306.ibm.com/software/lotus/passportadvantage/pvu_licensing_for_customers.html"&gt;IBM site here&lt;/a&gt;.&lt;br /&gt;&lt;strong&gt;A quad CPU quad core costs 8 CPU units at IBM&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;For RedHat / JBoss&lt;/strong&gt; (this is a subscription based business model but still), you can read half about it on RedHat site &lt;a href="https://www.redhat.com/apps/store/jboss/app_platform.html"&gt;here&lt;/a&gt; and look at the &lt;a href="http://www.redhat.com/promo/migration/calc.html"&gt;JBoss TCO calculator here&lt;/a&gt;.&lt;br /&gt;It works thru 4 CPU packs, but I could not find any information on what their CPU means... so let's exclude it for now...&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;All in all, you can get a 25% price difference just by considering this CPU unit. &lt;/strong&gt;Oracle can tell you its stuff is 25% cheaper compared to BEA, you'll give them exactly the same amount of money in the end on a quad CPU quad core hardware.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Fair enough you said ??&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Lets consider a few points:&lt;br /&gt;- do the business project people and admins know how many cores total they will need to run on, currently run on?&lt;br /&gt;- do they instead perfectly know &lt;strong&gt;how many server instances and apps they have to start stop operate and monitor?&lt;/strong&gt;&lt;br /&gt;- should your software license price be directly impacted if an application increases or decreases in overall throughput because business project owners asked this and that new feature to be added?&lt;br /&gt;- did you already over-provisionned your hardware platforms to hide this fact?&lt;br /&gt;- did you took time to ask the vendor policies regarding &lt;strong&gt;virtualisation&lt;/strong&gt;? What if you turn the 4 CPU quad core box in 8 virtual 4 (virtual) CPU ""quad core""(they are virtualized now right?) system to maximize its utilization?&lt;br /&gt;- do you have a virtualization or resource brokering project (read dynamic intelligent real time throw in on-demand adaptive capacity) and you are close to the day you'll click a button to move an app instance running on this old 2 CPU dual core to your new 4 CPU quad core hardware when it is on peak load (heard about VMotion and XenMotion already right?) and with no downtime. &lt;strong&gt;Did you thought on how you'll be able to optimize or even plan your per CPU license costs in such a scheme?&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;It's obvious a &lt;strong&gt;per instance model (per JVM instance, per server software instance) brings simple answers to all these questions &lt;/strong&gt;and is perfectly aligned with what IT and project people are held accountable for running real world apps.&lt;br /&gt;&lt;br /&gt;The problem for switchers (BEA, IBM, Oracle and all /CPU vendor) is that it will lead them to fairly complex discussions with their switching customers, and the best exit is likely to start selling a (time limited) enterprise wide (project limited) licenses that does not account anything anymore (until you realize it - hey it's a sell/buy game!). The pain the vendor put on you to manage and account all these licenses even becomes part of its value proposition.&lt;br /&gt;... up until a billback system is put in place to enable &lt;strong&gt;&lt;em&gt;a pay for what you used&lt;/em&gt; model fully aligned on your own business running costs and ROI targets.&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-4714723390587088516?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/4714723390587088516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=4714723390587088516' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/4714723390587088516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/4714723390587088516'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2007/09/price-per-cpu-is-foolish-and-price-per.html' title='Price per CPU is foolish and price per core reaches its end'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-8208837421348184590</id><published>2007-08-14T14:30:00.000+02:00</published><updated>2007-08-14T14:45:08.540+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CEP'/><title type='text'>Esper performance: more than 500 000 event/second</title><content type='html'>The &lt;a href="http://esper.codehaus.org"&gt;Esper &lt;/a&gt;team has published performance results for its Esper event processing engine.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;"Esper exceeds over &lt;span style="color: rgb(255, 0, 0);"&gt;500 000 event/s &lt;/span&gt;on a dual CPU 2GHz Intel based hardware, with engine latency below 3 microseconds average (below 10us with more than 99% predictability) on a VWAP benchmark with &lt;span style="color: rgb(255, 0, 0);"&gt;1000 statements&lt;/span&gt; registered in the system - this tops at 70 Mbit/s at &lt;span style="color: rgb(255, 0, 0);"&gt;85% CPU&lt;/span&gt; usage."&lt;/span&gt;&lt;br /&gt;Read more starting from &lt;a href="http://esper.codehaus.org/esper/performance/performance.html"&gt;the doc&lt;/a&gt; and the &lt;a href="http://docs.codehaus.org/display/ESPER/Esper+performance"&gt;Esper wiki&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I have been working on this as I basically wrote the performance kit that is available to anyone under a GPL license, and whose client side (which is not Esper specific) can also be used to test other solutions - and I am glad to see those results.&lt;br /&gt;&lt;br /&gt;ESP/CEP has been a common place for vague information around performance in a &lt;span style="font-style: italic;"&gt;mine is bigger than yours&lt;/span&gt; attitude from all vendors to date (no one ever published publicly a detailled benchmark). As almost everyone claims hundreds of thousands of event per second, this &lt;span style="font-style: italic;"&gt;just&lt;/span&gt; shows Esper is enterprise grade ready and capable of the same kind of performance results.&lt;br /&gt;&lt;br /&gt;In the meantime there are a few extra comments to draw from this&lt;br /&gt;- the benchmark app includes a NIO/TCP based Esper event server that can also make use of a staged (read highly concurrent and multithreaded) architecture. This shows how easy it is to set up something like that with Esper. The code is about 5 classes.&lt;br /&gt;- for some really odd reasons, BEA WebLogic Event Server, that does make use of Esper as announced &lt;a href="http://home.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&amp;newsId=20070717005725&amp;amp;newsLang=en"&gt;here&lt;/a&gt;, was said to top at only 50 000 event/second ie 10x slower (read &lt;a href="http://www.infoworld.com/article/07/05/28/bea-events_1.html"&gt;here&lt;/a&gt;). I wish someone from BEA would shed some more light on this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-8208837421348184590?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/8208837421348184590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=8208837421348184590' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/8208837421348184590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/8208837421348184590'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2007/08/esper-performance-more-than-500-000.html' title='Esper performance: more than 500 000 event/second'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-7924386448452925376</id><published>2007-08-12T14:28:00.001+02:00</published><updated>2007-08-12T14:47:23.617+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CEP'/><title type='text'>Coral8 and IBM - how does it compares to Esper (Tech) and BEA agreement?</title><content type='html'>Tim has commented about the &lt;a href="http://www.coral8.com/system/files/assets/pdf/Coral8_Release_080907.pdf"&gt;Coral8 announcement&lt;/a&gt; in his &lt;a href="http://thecepblog.com/2007/08/10/coral8-gives-a-free-ride-to-all-ibm-rfid-customers/"&gt;blog&lt;/a&gt;.&lt;br /&gt;Beehind the announcement, the fact that Coral8 and IBM have an agreement in place in the Event Processing arena, is not really comparable to what exists between &lt;a href="http://www.espertech.com/news/20070717_bea.php"&gt;Esper(Tech) and BEA&lt;/a&gt; for the WebLogic Event Server (I had blogged about it &lt;a href="http://avasseur.blogspot.com/2007/07/bea-weblogic-esper-event-server.html"&gt;here&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;The fundamental differences are:&lt;br /&gt;- IBM WebSphere RFID includes an &lt;span style="font-style: italic;"&gt;adapter &lt;/span&gt;to the Coral8 Event Processing engine. It is not an OEM agreement such as between EsperTech and BEA.&lt;br /&gt;- The agreement is limited to one product in one vertical marke - while the EsperTech and BEA agreement is not tied to any vertical market in particular.&lt;br /&gt;- It's unclear what does "Coral8 provides a free deployment license to all IBM WebSphere RFID customer" means ... you likely need to consider support, size of target deployment platform, pre-production environnement etc. Where free ends?&lt;br /&gt;&lt;br /&gt;This said, congrats to Coral8 team for that. The Event Processing market has much to win from alliances like that one that help brings Event Processing to mainstream.&lt;br /&gt;In the meantime I am wondering how hard would it be to have an Esper adapter for IBM WebSphere RFID ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-7924386448452925376?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/7924386448452925376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=7924386448452925376' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7924386448452925376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7924386448452925376'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2007/08/coral8-and-ibm-how-does-it-compares-to.html' title='Coral8 and IBM - how does it compares to Esper (Tech) and BEA agreement?'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-1911792429660841569</id><published>2007-08-12T14:24:00.000+02:00</published><updated>2007-08-12T14:26:57.633+02:00</updated><title type='text'>This is my new blog</title><content type='html'>I finally decided to move by blog here on blogger.&lt;br /&gt;My old blog at &lt;a href="http://blogs.codehaus.org/people/avasseur/"&gt;http://blogs.codehaus.org/people/avasseur&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;/&lt;/a&gt; was not fun enough to edit and customize.&lt;br /&gt;&lt;br /&gt;I have imported all my old posts in this blog although for the oldest ones, the comments are closed.&lt;br /&gt;&lt;a href="http://blogs.codehaus.org/people/avasseur/"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-1911792429660841569?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/1911792429660841569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=1911792429660841569' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/1911792429660841569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/1911792429660841569'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2007/08/this-is-my-new-blog.html' title='This is my new blog'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-5530410599087576799</id><published>2007-07-20T23:42:00.000+02:00</published><updated>2007-10-08T18:13:32.263+02:00</updated><title type='text'>BEA WebLogic (Esper?) Event Server</title><content type='html'>There has been quite a lot of rumors these last weeks regarding the new &lt;a href="http://www.bea.com/"&gt;BEA WebLogic Event Server&lt;/a&gt; which set the date of the entry of BEA into the Complex Event Processing arena.&lt;br /&gt;&lt;p&gt;&lt;br /&gt;As official facts and news can now be read by everyone, I thought it was a good time for a recap and for a few comments and thoughts. You may find this post quite long to read, but well ... this is my industry viewpoint!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;(1) Facts&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Rumors were all at rage trying to figure out if BEA "ripped off" the &lt;a href="http://esper.codehaus.org/"&gt;Esper&lt;/a&gt; ESP/CEP open-source GPL licensed engine, which has been in the arena for more than two years, release after release, commercially supported by &lt;a href="http://www.espertech.com/"&gt;EsperTech&lt;/a&gt; - hence the title of an hypothetical &lt;span style="font-style: italic;"&gt;BEA WebLogic (Esper?) Event Server&lt;/span&gt; of this post.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Now we know, BEA is using Esper to bring to the market its WebLogic Event Server and has an agreement in place with EsperTech, the dual licensing company behind Esper and NEsper.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Now is time to shed some light on that topic. But first, let's recap...&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;b&gt;(1 continued) Facts&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;So it first started on InfoQ with the public beta announcement of BEA product. Guillaume from Groovy fame immediately wondered if Esper is used under the hood.&lt;br /&gt;&lt;a href="http://www.infoq.com/news/2007/06/bea-realtime2-eventserver#view_7300"&gt;Read on on InfoQ&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Some weeks after, Coral8 did the same analysis and it seriously tried to lower the BEA value proposition - which is sort of expected from a BEA competitor and Esper competitor:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;i&gt;"all BEA did was OEM an open-source product called Esper and put it inside their product"&lt;/i&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;This forced BEA marketing folks to answer in the same article with an interesting quote, shedding some light on the BEA and Esper / EsperTech agreement.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;a href="http://www.intelligententerprise.com/blog/archives/2007/06/event_processin.html"&gt;Read it on Intelligent Enterprise&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;The same news was discussed again by Philip Howard, from Bloor Research, who has been following the Complex Event Processing space for a while, in an article where he describes some more the BEA Time and Event Driven (TED) product family that includes this rumored WebLogic Event Server.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;"There has been some speculation that TED is based around the open source Esper event processing engine in part (...)"&lt;/i&gt;&lt;br /&gt;&lt;a href="http://www.it-director.com/technology/applications/content.php?cid=9625"&gt;Read it on IT Director&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Finally, right after the BEA product went out from beta to be generally available truth as finally been spread by EsperTech - the company that provides support, services and OEM licenses around Esper and NEsper (its .Net counterpart) which was founded by Esper' founder:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://home.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&amp;amp;newsId=20070717005725&amp;amp;newsLang=en"&gt;Read the EsperTech press release&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;(2) So how far Esper and BEA WebLogic Event Server are different?&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;At that stage all those rumors and this finally official press release don't shed light on how far Esper is modified by BEA as it seems to be the case, to make it his own. I'll certainly give a shot to this. For now here are some findings:&lt;br /&gt;&lt;code&gt;&lt;br /&gt; Esper: select avg(price) from Stock:win.time(1 min)&lt;br /&gt; BEA  : select avg(price) from Stock retain 1 min&lt;br /&gt; Esper: every (A -&gt; B)&lt;br /&gt; BEA  : every (A followed by B)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Part of the documentation is the same f.e. for explaining the core capabilities:&lt;br /&gt;&lt;a href="http://esper.codehaus.org/esper-1.9.0/doc/reference/en/html/outputmodel.html#outputmodel_lengthwindow"&gt;Esper doc&lt;/a&gt;&lt;br /&gt;&lt;a href="http://edocs.bea.com/wlevs/docs20/epl_guide/overview.html#wp1016324"&gt;WebLogic Event Server doc&lt;/a&gt;&lt;br /&gt;Or for providing a number of use cases:&lt;br /&gt;&lt;a href="http://esper.codehaus.org/tutorials/tutorial/feedmonitor_casestudy.html"&gt;Market data Feed Monitor Case Study&lt;/a&gt;&lt;br /&gt;&lt;a href="http://edocs.bea.com/wlevs/docs20/epl_guide/overview.html#wp1017020"&gt;Use cases&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;(3) Open questions&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;At that stage, this raises a few interesting points and speculations going further:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Esper is at version 1.10. There are tremendous improvements brought versions after versions such as deterministic behavior with statement pipelines, performance improvement, bug fixes, extended APIs and so on.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;How the BEA product will catch up if they modify their own version in various ways thru refactoring and such while Esper keeps being improved?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;How the two products will distinguish each others going further, what will make each one attractive to who? Low price point, a la carte, higher price point , same ESP/CEP capabilities, off the shelf experience ... all interact. Will we see open-source stacking up an Esper Event Server as well?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Esper has the very same client API and event processing language that its counterpart NEsper. This means Esper / NEsper / EsperTech is the only one to give choice with same semantics across platforms. Will BEA move to .Net as well?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Esper GPL license explains why BEA had to go over a dedicated agreement with EsperTech so as to redistribute the product. This proof points the dual licensing model and shows that a GPL/LGPL based open source/dual license is one among the many viable open source model, especially when geared toward both OEMs and end-users.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Will open source purists argue this means BEA is using open source and contributing back on some areas (those very one would argue they are already commoditized by far), but that BEA is also ready to buy open source to get the right to tailor it without giving much back so as to build a competitive advantage? On the other hand, other will argue GPL or LGPL is not business friendly (if you think you can get for free into a bar and also get free beer then you will). From there this starts to make sense to buy a foundation from which you can build a competitive advantage in your journey - does it?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;But does this means Oracle or IBM or RedHat or IONA or SUN could do the same and enter an agreement with Esper? Those big ones have yet to enter the Complex Event Processing space beyond announcements or lab projects. New startups are poping up all around at the same time so decision is far from simple, especially as BEA moved first around such a blend.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Does this means that BEA decided to leverage Esper and acquire a license instead of spending 20 to 100 M$ in acquiring one of the other startup in this field (or entering an OEM agreement with one of them)? We can assume BEA has done carreful due diligence, both on the IP, the technical excellence and the extensibility options of Esper before taking such a decision.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;No doubt everyone will have various rumbling about all this!&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;(4) Esper provides choice, BEA provides off the shelf&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Most important to recap, the BEA WebLogic Event Server is not good or bad in its way it does (or don't) interacts / extends the Esper project and the open source community around it depending who you ask. What is striking is that:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;The ESP/CEP innovation came from Esper and open source in the first place (as far as Esper goes, of course ESP/CEP come a long way in academic works before Esper and at other startups). The full Java ESP/CEP engine around a POJO centric model and open API, plus the real convergence between ESP and CEP capabilities was introduced by Esper and truly driven by the community around it. And now it is also available for .Net with NEsper.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;BEA WebLogic Event Server adds a server model, with deployment capabilities, Spring wiring, security, real time JRockit JVM integration, all based on a very innovative OSGi based lightweight kernel build upon other open source blocks (Eclipse Equinox f.e. for the OSGi core). The open source and commercial blend goes far beyond Esper (Jetty and Spring are in there). You may likely find more open source LOCs than BEA LOCs in this product if you were to count everything - simply because this is how modern software is build. Would you rather build it, buy it or license things and blend it instead?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;BEA offering shines because it is an off the shelf platform with its own server component which is not a JEE app server but a completely new one. How would it compare f.e. to a classic WebLogic Server (the JEE one) with Esper hooked a JMS consumer/producer, both in terms of features but also investment and learning curve?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Esper is obviously the best option to integrate into other BEA technologies such as WebLogic Server (thru JMS as I said), but also if you are not a BEA shop, running application server / ESB from open source or big vendors. It also brings affordable ESP/CPE compared to other startup-high-license-cost in this rather new market. It also has a significantly increased flexibility as there is no target server model. You can also get support from the source through EsperTech (professional open source a la JBoss). And if you want real-time capabilities, you can run it on a real time JVM, from BEA, but also from Sun or IBM, or even inside an Azul box. &lt;b&gt;This is a la carte event processing&lt;/b&gt; as Tom explains in the press release. A number of analysts have already started to argue around the fact that a la carte event processing may make more sense for the industry so I am sure we'll see more of that blend.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;b&gt;Congrats to Esper and EsperTech for their success with BEA, and congrats to BEA for this new product offering that truly shakes the complex event processing arena - perhaps not in what it does but more in how it was assembled and engineered - with a best of breed approach all the way up.&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;small&gt;&lt;br /&gt;As I was just about to publish this, another news came out: &lt;a href="http://home.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&amp;amp;newsId=20070717005856&amp;amp;newsLang=en"&gt;&lt;br /&gt;SL Corporation&lt;/a&gt; Helps BEA Extend Real-time Monitoring and Visualization of WebLogic Event Server. This increases the feature set of WebLogic Event Server, by a new blend. Interestingly, Progress Apama (another Esper and now BEA competitor), is using just the same as announced &lt;a href="http://www.sl.com/sl_press_011007.html"&gt;here&lt;/a&gt; and already mentioned by &lt;a href="http://eventprocessing.wordpress.com/2007/05/29/bea-enters-the-cep-market-with-weblogic-event-server/"&gt;Tim Bass&lt;/a&gt;, from Tibco (did I said Tibco also plays in the ESP/CEP space and has a very close relationship with SL Corporation (see &lt;a href="http://slgms.com/sl_press_051012.html"&gt;here&lt;/a&gt;). That said this does not surface yet in WebLogic Event Server 2.0 final release.&lt;br /&gt;&lt;/small&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Interesting and exciting times in the software industry isn't it? Who said it is build vs buy? You need to think build vs buy vs license vs assemble.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-5530410599087576799?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/5530410599087576799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=5530410599087576799' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/5530410599087576799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/5530410599087576799'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2007/07/bea-weblogic-esper-event-server.html' title='BEA WebLogic (Esper?) Event Server'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-544089675080579928</id><published>2007-07-13T18:06:00.000+02:00</published><updated>2007-08-08T11:16:08.731+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CEP'/><title type='text'>Esper brings Complex Event Processing (CEP) to mainstream</title><content type='html'>There has been two interesting posts recently regarding &lt;a href="http://esper.codehaus.org"&gt;Esper&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;One from Tim Bass, from Tibco, reporting from the &lt;a href="http://www.informationsecurityasia.com/v2/conference/conference-programme1.htm"&gt;InformationSecurityAsia2007&lt;/a&gt;.&lt;br /&gt;Tim reports in &lt;a href="http://thecepblog.com/2007/07/10/extrusion-detection-is-ripe-for-cep/"&gt;his blog&lt;/a&gt; that complex event processing solutions like Esper can be used for extrusion detection (that is inverse of intrusion detection in a network where you want to track malicious users and software acting from inside, zombi machines etc.).&lt;br /&gt;Tim reports Esper is already known from several experts in the field and is beeing considered for such use cases. Glad to hear and thanks Tim for the info.&lt;br /&gt;&lt;br /&gt;The second interesting news appears in &lt;a href="http://www.intelligententerprise.com/print_article.jhtml?articleID=199902891"&gt;Intelligent Enterprise&lt;/a&gt; where Esper is beeing quoted as the only &lt;i&gt;active open-source project for CEP&lt;/i&gt; - both for Java and .Net platforms (what, you never heard about NEsper? Bet you will !).&lt;br /&gt;&lt;br /&gt;Esper is quoted separately from the so called more commercial solutions like Apama, StreamBase, Coral8, Tibco etc. Especially because Esper is a great initiative to bring CEP to mainstream thru innovative, affordable and &lt;i&gt;a la carte&lt;/i&gt; approach as quoted here:&lt;br /&gt;&lt;br /&gt;&lt;quote&gt;&lt;br /&gt;Not For Big Companies Only.&lt;br /&gt;With the ranks of CEP practitioners including big government, big finance and big telco, you might think the technology is accessible only to giants . That's not the case, however, as there's an active open-source CEP project called Esper that offers both Java and .NET components.&lt;br /&gt;&lt;/quote&gt;&lt;br /&gt;&lt;br /&gt;It 's nice to see Esper quoted, although I am not sure I would do such a difference between Esper and the others solutions available for the following reasons:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Esper is commercially backed and supported - checkout Esper' founder company &lt;a href="http://www.espertech.com"&gt;EsperTech&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Esper users include major investment banks already and other big shops - checkout the mailing list if you want to get a taste&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Of course I can't say if those guys are evaluating Esper or if they run some of their production system with it already - so you never know who is a user evaluating software and who is ready / has already entered the commercial relationship with commercially backed open source software unless you ask and they dare to reveal it.&lt;br /&gt;&lt;br /&gt;There's trully no difference in fact when you look at that from a community point of view.&lt;br /&gt;When you are building open source software (which I have been doing for years now) there is only one thing that matters: &lt;b&gt;the community&lt;/b&gt;.&lt;br /&gt;The community rules the use cases and drives the product direction in unanticipated ways accross industries of all kind and size.&lt;br /&gt;&lt;br /&gt;This is a typical mistake regularly done when trying to compare open source software and commercial software as two fundamentally different things. Would you start saying Linux is for small companies and Windows for the big ones...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-544089675080579928?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/544089675080579928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=544089675080579928' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/544089675080579928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/544089675080579928'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2007/07/esper-brings-complex-event-processing.html' title='Esper brings Complex Event Processing (CEP) to mainstream'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-1844109872740264623</id><published>2007-05-29T17:21:00.000+02:00</published><updated>2007-08-08T11:16:08.731+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CEP'/><title type='text'>Event Driven Application Servers - BEA is in</title><content type='html'>BEA has started to spread the news about the fact they'll enter the &lt;a href="http://blogs.codehaus.org/people/avasseur/archives/001563_esper_at_javaone_on_event_driven_application_server_and_xtp.html"&gt;Event Driven Application Server&lt;/a&gt; area - which I covered during my JavaOne 2007 session (with a bias on the first and only Java and .Net container for event-driven applications aka &lt;a href="http://esper.codehaus.org"&gt;(N)Esper&lt;/a&gt;). The product name is &lt;a href="http://www.bea.com/framework.jsp?CNT=index.htm&amp;amp;FP=/content/products/weblogic/event_server/"&gt;WebLogic Event Server 2.0&lt;/a&gt; (go figure what happened to 1.0!?), slatted for a public beta in the next few days.&lt;br /&gt;&lt;br /&gt;Tim from Tibco wraps up the news in his &lt;a href="http://eventprocessing.wordpress.com/2007/05/29/bea-enters-the-cep-market-with-weblogic-event-server/"&gt;blog&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Stay tuned.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-1844109872740264623?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/1844109872740264623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=1844109872740264623' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/1844109872740264623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/1844109872740264623'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2007/05/event-driven-application-servers-bea-is.html' title='Event Driven Application Servers - BEA is in'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-7682611806967438847</id><published>2007-05-02T22:51:00.000+02:00</published><updated>2007-08-08T11:16:08.731+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CEP'/><title type='text'>Esper at JavaOne, on Event Driven Application Server and XTP</title><content type='html'>I am pleased to be back at this year &lt;b&gt;JavaOne 2007&lt;/b&gt; as a speaker on "Event-Driven Application Servers". I'll showcase ESP/CEP technology to the Java community and industry, San Francisco, on Friday May 11th, 12:10.&lt;br /&gt;&lt;br /&gt;The session that I co-lead with Tom, &lt;a href="http://esper.codehaus.org"&gt;Esper&lt;/a&gt; and &lt;a href="http://www.espertech.com"&gt;EsperTech&lt;/a&gt; founder, will introduce the audience with &lt;b&gt;Event Driven Architectures (EDA), Event Stream Processing (ESP) and Complex Event Processing (CEP)&lt;/b&gt;. We will showcase the why, what and how on event-driven application servers, going from simple integration over JEE platforms to tailored off-the-shelf leading edge solutions playing in the &lt;b&gt;eXtreme Transaction Processing (XTP)&lt;/b&gt; field.&lt;br /&gt;&lt;br /&gt;This has implication in various areas such as investment banking, RFID, monitoring, compliance management and many more (up to this good old SOA...).&lt;br /&gt;&lt;br /&gt;If you attend the event or are in the bay area and want to meet up, ping me or leave me a comment!&lt;br /&gt;&lt;br /&gt;The session id is TS-1911 and if you happen to attend JavaOne this year you can already add it to your session schedule or click below to connect with me for the event.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://javaone2007.leveragesoftware.com/profile_view.aspx?customerid=avasseur"&gt;&lt;img src="http://javaone2007.leveragesoftware.com/businesscard.aspx?customerid=avasseur" border="0" alt="Join Me at the 2007 JavaOne Conference Event Connect Tool!" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I hope to see you there and see a whole bunch of long time friends there.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://esper.codehaus.org"&gt;Esper&lt;/a&gt;&lt;br /&gt;&lt;a href="http://java.sun.com/javaone/sf/index.jsp"&gt;JavaOne 2007&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-7682611806967438847?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/7682611806967438847/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=7682611806967438847' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7682611806967438847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7682611806967438847'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2007/05/esper-at-javaone-on-event-driven.html' title='Esper at JavaOne, on Event Driven Application Server and XTP'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-8834922573517609483</id><published>2007-03-12T12:01:00.000+01:00</published><updated>2007-08-08T11:16:08.731+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CEP'/><title type='text'>Esper tutorial on OReilly ONJava</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;It's live!&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;Event-driven architectures turn a traditional data-driven application's architecture upside-down. Instead of storing the data and running queries against stored data, Esper allows applications to store queries and run the data through.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;This article introduces Esper, a lightweight ESP/CEP engine written in Java.&lt;/i&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;This Esper tutorial is now available online at OReilly ' ONJava. The tutorial illustrates an airport self-service terminal that we monitor and improve with real-time customer relationship management by using both ESP and CEP capabilities of Esper.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;It includes a fully functional yet simple to run bundled application and also includes Eclipse configuration files so that you can start practicing right away (if you are an Eclipse user...).&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;I hope this will help get those blooming ESP/CEP concepts to mainstream. The tutorial should give you enough ground to understand where we come from and enough details to get started in your own project right away.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;If the EPL snips below does not sound familiar to you&lt;br /&gt;&lt;code language="java"&gt;&lt;br /&gt;select avg(price) from StockTick.win:time(30 sec)&lt;br /&gt;where symbol='GOOG'&lt;br /&gt;&lt;br /&gt;select type, count(*)&lt;br /&gt;from BaseTerminalEvent.win:time(10 minutes)&lt;br /&gt;group by type&lt;br /&gt;output all every 1 minutes&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.onjava.com/pub/a/onjava/2007/03/07/esper-event-stream-processing-and-correlation.html "&gt;Read it online at ONJava&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;or read more about &lt;a href="http://esper.codehaus.org"&gt;Esper&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-8834922573517609483?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://avasseur.blogspot.com/feeds/8834922573517609483/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3100335968062348807&amp;postID=8834922573517609483' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/8834922573517609483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/8834922573517609483'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2007/03/esper-tutorial-on-oreilly-onjava.html' title='Esper tutorial on OReilly ONJava'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-3804789555323573277</id><published>2007-03-10T13:08:00.000+01:00</published><updated>2007-08-08T11:14:28.407+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>Terracotta' Jonas &amp; Eugene on AOP at AOSD 2007</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;Jonas and Eugene from &lt;a href="http://terracottatech.com/"&gt;Terracotta&lt;/a&gt; - the Naturally Clustered Java provider and maker of OpenTerracotta - have published a very interesting paper on industry use of AOP and point out some limitations present in current AOP frameworks: &lt;i&gt;"Clustering the Java Virtual Machine using Aspect-Oriented Programming"&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Excerpt:&lt;br /&gt;&lt;i&gt;"application startup time with AspectJ load-time weaving [which I partly authored] was ... slower and memory overhead was ... bigger ... when comparing with similar transformations done with either the Terracotta runtime or the AspectWerkz AOP engine [which I authored with my friend and former coworker Jonas]."&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;This comes to no surprise to me as AspectJ is born for build time weaving and Eclipse integration and AspectWerkz was born for load time and runtime weaving. As author of both (as we joint forces from AspectWerkz to AspectJ back mhh.. 2 years ago) I was unable to get the best of both world in one engine as we initially focussed on features integration - such as thru the @AspectJ style that is annotation-defined and driven AOP. Since that time my open source bandwith has been drawned due to work engagements. That is unfortunate as I believe there are no technical reasons for this multi-weaving-optimized engine to not happen. Fortunately AspectJ is strong on runtime performance which is something you really have to consider as well.&lt;br /&gt;&lt;br /&gt;Their paper is available online on &lt;a href="http://www.aosd.net/2007/program/industry/I1-ClusteringJVMUsingAOP.pdf"&gt;AOSD 2007&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-3804789555323573277?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/3804789555323573277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/3804789555323573277'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2007/03/terracotta-jonas-eugene-on-aop-at-aosd.html' title='Terracotta&apos; Jonas &amp; Eugene on AOP at AOSD 2007'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-1882622375726213840</id><published>2006-01-13T16:26:00.000+01:00</published><updated>2007-08-08T11:08:53.747+02:00</updated><title type='text'>Free as Open Source they said?</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;It's interseting to follow the different strategies around Open Source these days.&lt;br /&gt;&lt;b&gt;Can Open Source be FOSS at all?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I have been myself leading a project for some time with &lt;a href="http://www.jonasboner.com"&gt;Jonas Bonér&lt;/a&gt; in the AOP field, and we more than once had potential corporate users willing to be helped or supported (thus charged) with some more formal ways than classic user mailing lists and "fix it yourself / wait for the community to fix it" attitude.&lt;br /&gt;&lt;br /&gt;BEA's &lt;b&gt;blended strategy&lt;/b&gt; of certifying and supporting 24/7 major open source components (like Spring) is well echoed by several facts these last weeks.&lt;br /&gt;&lt;br /&gt;First some post on &lt;a href="http://www.theserverside.com/news/thread.tss?thread_id=38021"&gt;TheServerSide "Developping J2EE without xxx? Why?"&lt;/a&gt;, xxx beeing your perhaps favorite open source framework, (xxx and yyy abstracted for the purpose of this blog article).&lt;br /&gt;&lt;br /&gt;Some various comments from this thread:&lt;br /&gt;&lt;i&gt;&lt;br /&gt;"xxx is good"&lt;br /&gt;"Don' t look from the developer angle only"&lt;br /&gt;"Couple of years down the track, if xxx goes bust or I can't find developers who want to work with old technology like xxx as everyone has moved on to yyy_standard or something similar, and my application breaks for certain reason, where will I get support or resource to maintain my application?"&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;More interesting, a &lt;a href="http://www.lemondeinformatique.fr/entretiens/lire-todd-delaughter-hp-software-11.html"&gt;recent quote&lt;/a&gt; from &lt;b&gt;HP Software head Todd DeLaughter&lt;/b&gt; (translated from French):&lt;br /&gt;"We could do something with Open Source. It will depend on the market evolution. [..] Today the problem is that sooner or later customers are asking their software provider to certify and support the stack, and provide services around. That won't change any time soon."&lt;br /&gt;&lt;br /&gt;Obviously it would then be intersting to look at the cost of Open Source, beyond the FOSS zero acquisition cost.&lt;br /&gt;&lt;br /&gt;It's not secret that &lt;b&gt;JBoss is now selling software (not free, with trial copy and commercial license)&lt;/b&gt; and doing marketing around it - see the last JBoss newsletter and the messages around JBoss ON "JBoss Operating Network", the what sounds to be administration solution of JBoss app servers (see f.e. &lt;a href="http://labs.jboss.com/file-access/default/members/jbosslabs/freezone/roadmaps/files/JBossON-Intro.pdf"&gt;here&lt;/a&gt;).&lt;br /&gt;Quoting the newsletter:&lt;br /&gt;&lt;i&gt;"JBoss is holding a series of workshops [...] will include hands-on training on JBoss ON (trial copies of the software will be provided)"&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Deploying stuff on an Open Source stack is end to end is definitely not free at the end. FOSS is just one view on one single phase in a project: development.&lt;br /&gt;&lt;br /&gt;Left aside the training cost for the young developers themselves.&lt;br /&gt;In a recent &lt;a href="http://opensource.sys-con.com/read/169006.htm"&gt;post&lt;/a&gt;, Yakov Fain calculates that if you follow introduction trainings on Spring, Hibernate and JBoss, which seems today' minimum to get started on a so called FOSS stack, you'll have to travel some accross the globe, and afford a total of $9000.&lt;br /&gt;&lt;br /&gt;Obviously, we then should take into account support prices, and possible performance gaps between each stacks, meaning all in all you'll need more CPU and hosting power here and there to run your beast. And CPU is never free.&lt;br /&gt;&lt;br /&gt;I'd be pleased to see the debate around the Java community shift from programming practices and tech buzzwords (IoC AOP ligthweight whatever is best implemented here things) to some from the trench real project end to end considerations.&lt;br /&gt;Obviously lightweight approaches and Open Source do play a key role in the whole picture, both with pros and cons.&lt;br /&gt;&lt;br /&gt;So FOSS - free as in free beer? Really? The world is obviously more complex than that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-1882622375726213840?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/1882622375726213840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/1882622375726213840'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2006/01/free-as-open-source-they-said.html' title='Free as Open Source they said?'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-495288217771579477</id><published>2005-12-29T17:48:00.000+01:00</published><updated>2007-08-08T11:14:28.407+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>Microsoft goes AOP?</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;While AOP has reached a decent maturity level in the Java platform, thanks to several iniatives from different players with different priorities and goals (IBM, BEA, JBoss, Spring, and individuals like Bob Lee to name a few), Microsoft seems to be willing to move beyond that.&lt;br /&gt;&lt;br /&gt;Last year at AOSD they were hosting a session on Phoenix, an interesting building block in the .Net CLR labs to help enable AOP frameworks. The community in .Net around AOP is fairly active as well, and Microsoft did &lt;a href="http://research.microsoft.com/ur/us/fundingopps/Phoenix-RFP_awards.aspx"&gt;awarded&lt;/a&gt; some of the projects, like Alan Cyment' &lt;a href="http://docs.codehaus.org/display/SETPOINT/Home"&gt;SetPoint&lt;/a&gt; hosted on CodeHaus, the home of AspectWerkz.&lt;br /&gt;&lt;br /&gt;Recently (Nov. 2005) Microsoft has set up a &lt;a href="http://research.microsoft.com/workshops/aop/"&gt;research event&lt;/a&gt; to emulate discussions around &lt;b&gt;the best way to have good AOP solutions in the .Net platform&lt;/b&gt;. Several key .Net AOP project leads and folks from the AOP research academia were invited for a full day event at Redmond.&lt;br /&gt;&lt;br /&gt;As far as I know Sun never set up such an event to try to understand AOP from its roots, and most of the discussion on the field has been driven by individual to individual networking and the &lt;a http="http://aosd.net"&gt;AOSD&lt;/a&gt; annual conference.&lt;br /&gt;&lt;br /&gt;I am eager to see where .Net ends up in that field in 2 years from now. There are certainly interesting architectures and concepts that we have implemented in Java based AOP that could be ported rightaway to .Net, though .Net luminaries have certainly several new ideas that 'd be worth exploring from Java luminaries point of view - and possibly standardizing on - obviously outside the JCP - unless Sun suddenly cares more about AOP.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-495288217771579477?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/495288217771579477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/495288217771579477'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2005/12/microsoft-goes-aop.html' title='Microsoft goes AOP?'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-8772973988746057814</id><published>2005-12-23T10:57:00.000+01:00</published><updated>2007-08-08T11:07:26.803+02:00</updated><title type='text'>Spring 2.x -  innovation or maturity?</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Last week I had the pleasure to discuss some more with the Spring team at &lt;a href="http://www.javapolis.com"&gt;JavaPolis&lt;/a&gt;, and I was thus given a quick informal update on what they are heading at in Spring 2.x,  especially on the AOP side, discussing with &lt;a href="http://blog.springframework.com/rod/"&gt;Rod&lt;/a&gt; and &lt;a href="http://blog.springframework.com/rob/"&gt;Rob&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Spring AOP in Spring 1.x has been easy to use - though missing a good pointcut language. This simplicity is well described in a recent article on dev2dev by &lt;a href="http://dev2dev.bea.com/pub/a/2005/12/spring-aop-with-ejb.html"&gt;Eugene&lt;/a&gt;, and I had debated this issue and tried to solve it with &lt;a href="http://blogs.codehaus.org/people/avasseur/archives/000961_spring_pointcut_on_steroids.html"&gt;Spring pointcuts on steroids with AspectWerkz&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;In Spring 2.x, with the help of newly appointed excellent &lt;a href="http://www.aspectprogrammer.org/blogs/adrian/"&gt;Adrian Coyler&lt;/a&gt; as chief scientist, my AspectJ lead peer, Spring AOP will unleash AspectJ and &lt;a href="http://eclipse.org/aspectj/doc/released/adk15notebook/ataspectj.html"&gt;@AspectJ&lt;/a&gt; that I spent quite some time on this year as per our engagement to merge best of breed AspectWerkz with AspectJ.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;But going beyond, Spring 2.x also introduces a way to define aspects in your spring bean xml files directly f.e.:&lt;br /&gt;&lt;code language="java"&gt;&lt;br /&gt;        &lt;aop:aspect id="countAgeCalls" ref="countingAdvice"&gt;&lt;br /&gt;            &lt;aop:pointcut id="setCalls" expression="execution(* *..ITestBean.set*(..))"&gt;&lt;br /&gt;            &lt;aop:advice pointcut="execution(* *..ITestBean.set*(..))" method="myBeforeAdvice" kind="before"&gt;&lt;br /&gt;            &lt;aop:advice ref="setCalls" method="myAfterAdvice" kind="after"&gt;&lt;br /&gt;            &lt;aop:advice ref="setCalls" method="myAroundAdvice" kind="around"&gt;&lt;br /&gt;        &lt;/aop:aspect&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;This is actually a really nice feature that I started playing with 2 years ago when implementing AspectWerkz with &lt;a href="http://www.jonasboner.com"&gt;Jonas&lt;/a&gt;. So there is not much innovation there.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;There might actually be some issues and hard work going forward. By having aspects defined this way, the AspectJ runtime that is used when your are using the excellent &lt;a href="http://www.eclipse.org/ajdt/"&gt;AJDT Eclipse Plugin for AspectJ&lt;/a&gt; will not take those into account (whilst regular @AspectJ ones are fully supported).&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;This means there 'll be definitely a need to open-up some more AJDT and have some extension point in it so that the Spring IDE can leverage it and have the AJDT crosscutting view display the Spring xml defined aspect.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Wups - &lt;a href="http://blogs.codehaus.org/people/jboner/archives/000065_aspectwerkz_ruthlessly_refactored.html"&gt;xml defined aspect&lt;/a&gt; I have said - just like this June 2003' Jonas article introduces, back in AspectWerkz 0.6.3&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Maturity - finally!&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-8772973988746057814?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/8772973988746057814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/8772973988746057814'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2005/12/spring-2x-innovation-or-maturity.html' title='Spring 2.x -  innovation or maturity?'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-4832136726695905079</id><published>2005-10-20T11:22:00.000+02:00</published><updated>2007-08-08T11:14:28.408+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>JRockit powered AOP prototype available</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;It's there !&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;I am very pleased to announce the prototype version of JRockit that includes our AOP API is available. It will drive you far far away from current bytecode instrumentation techniques to a world of &lt;b&gt;plain Java API, complete runtime control for hot deployment and undeployment, agnostic from the programming model you like for your aspects&lt;/b&gt;.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;If you are involved in the AOP field, bytecode instrumentation field, APM field, and did not heard from us recently, please drop me an email and I 'll consider your participation in evaluating this technology to help us drive it to reality.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;You can read the official announcement and some background information in our &lt;a href="http://forums.bea.com/bea/forum.jspa?forumID=600000004"&gt;BEA dev2dev dedicated forum&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-4832136726695905079?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/4832136726695905079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/4832136726695905079'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2005/10/jrockit-powered-aop-prototype-available.html' title='JRockit powered AOP prototype available'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-1113994411741765180</id><published>2005-10-10T13:30:00.000+02:00</published><updated>2007-08-08T11:14:28.408+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>Synchronized block join points (v2)</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;Back in July Jonas suggested some semantics for a &lt;a href="http://blogs.codehaus.org/people/jboner/archives/001134_semantics_for_a_synchronized_block_join_point.html"&gt;synchronized block join point&lt;/a&gt;. The discussion was interesting but I am wondering if we actually came up with the right question.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;What if we simply think in terms of &lt;b&gt;"is this type listening to locking events ?"&lt;/b&gt; instead of trying to come up with a pointcut expression that defines the semantics of a &lt;i&gt;synchronized&lt;/i&gt; block - as done in Jonas discusion?&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;Lets draft some code:&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;Consider the program:&lt;br /&gt;&lt;code language="java"&gt;&lt;br /&gt;class Bar {&lt;br /&gt;  synchronized void foo() {&lt;br /&gt;    ..&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  static synchronized void statfoo() {&lt;br /&gt;    ..&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  void stuff() {&lt;br /&gt;     ..&lt;br /&gt;     synchronized(bar) {&lt;br /&gt;       ..&lt;br /&gt;     }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;So the deal is to listen to lock events - mainly:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;waiting the lock&lt;/li&gt;&lt;br /&gt;&lt;li&gt;just acquired the lock&lt;/li&gt;&lt;br /&gt;&lt;li&gt;just released the lock (or perhaps about to release it - but this does not matter much for this discussion)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;I argue that instead of defining semantics, the issue should be narrowed to a type pattern ie something as simple as &lt;i&gt;Bar&lt;/i&gt; (or more fancy variations based on type hierarchy or annotation - you bet it).&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;Given that we can define this interface:&lt;br /&gt;&lt;code language="java"&gt;&lt;br /&gt;interface Lockable {&lt;br /&gt;  void waiting();&lt;br /&gt;  void acquired();&lt;br /&gt;  void released();&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;As a user you can then implement this interface on your own types, use some sort of AOP or proxy to have it introduced where you want, etc.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;So what should happen to make that work?&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;First based on the type pattern, we simply &lt;b&gt;introduce&lt;/b&gt; &lt;i&gt;Lockable&lt;/i&gt; to &lt;i&gt;Bar&lt;/i&gt;. This can be done manually, by the mean of AOP if f.e. I was writing &lt;i&gt;@Distributed class Bar { .. }&lt;/i&gt; and so on - depends on the use case.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;Second the interface must then be &lt;b&gt;implemented by Bar&lt;/b&gt;.&lt;br /&gt;The user can provide one if implemented manually, or the system (AOP f.e.) can provide an &lt;b&gt;empty one&lt;/b&gt; ie something like (depends on the AOP system but you get the idea)&lt;br /&gt;&lt;code language="java"&gt;&lt;br /&gt;@Introduce("Bar")&lt;br /&gt;class LockableNOOP implements Lockable {&lt;br /&gt;  void waiting() {}&lt;br /&gt;  void acquired() {}&lt;br /&gt;  void released() {}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;Last we need to &lt;b&gt;transform the program&lt;/b&gt; so that the synchronized block or the Bar' synchronized method are triggering event to that.&lt;br /&gt;This is not that hard since we just need to look at the type hierarchy for non static synchronized method and given that an instance synchronized method can be rewritten (by the system) as a synchronized(this) block we end up to something like that:&lt;br /&gt;&lt;br/&gt;Replace all synchronized blocks like that:&lt;br /&gt;&lt;br/&gt;Given&lt;br /&gt;&lt;code language="java"&gt;&lt;br /&gt;synchronized(stuff) {&lt;br /&gt;  ..&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;to&lt;br /&gt;&lt;code language="java"&gt;&lt;br /&gt;if (stuff instanceof Lockable) {&lt;br /&gt;  Lockable lockable = (Lockable)stuff;&lt;br /&gt;  lockable.waiting();&lt;br /&gt;  synchronized(stuff) {&lt;br /&gt;    lockable.acquired();&lt;br /&gt;    ..// unchanged body&lt;br /&gt;  }&lt;br /&gt;  lockable.released();&lt;br /&gt;} else {&lt;br /&gt;  synchronized(stuff) {&lt;br /&gt;    ..// unchanged body&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Fairly easy.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;So far, nothing will happen, as we have a LockableNOOP implementation, unless the user (you) explicitly provided some implementation.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;Last part: configure the system so that &lt;b&gt;it advises Lockable' methods&lt;/b&gt;, so that you can add your behavior there (f.e. distribute lock, or trace them for some application performance system). There, usual AOP stuff can be used.&lt;br /&gt;&lt;br/&gt;You can now access the enclosing static join point information if you need - which gives you &lt;b&gt;if you really need it&lt;/b&gt;, the rich semantics Jonas was looking for:&lt;br /&gt;&lt;code language=""&gt;&lt;br /&gt;call(Lockable.waiting()) &amp;&amp;amp; withincode(....) &amp;&amp;amp; target(t) &amp;&amp;amp; cflow(...) .....&lt;br /&gt;// t is the locked object&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;There are two interesting things to solve now:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;What if I want to &lt;b&gt;kick out the synchronized() block&lt;/b&gt; ?(f.e. for distributed lock). I think a small variation of Lockable can solve that - f.e. &lt;i&gt;boolean shouldUseJavaLocks()&lt;/i&gt;, and a tiny change for the transformed program.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;What about the &lt;i&gt;static synchronized statfoo() {..}&lt;/i&gt; in &lt;i&gt;Bar&lt;/i&gt;? For that one, the transformation would have to be a bit more compex so that we f.e. lock on an introduced static field. That said, the Lockable interface is not handy anymore. Any suggestion for that one? Should we define three methods like &lt;i&gt;static void lockable_waiting()&lt;/i&gt; that ones would implement or introduce to adress this use case?&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;On a more high level perspective, this send us back to a recurrent set of problems in the AOP / bytecode transformation space:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;to achieve API transparency, we have a very intrusive transformation engine (though the one described here can be quite fast)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;by changing the bytecode we break the visibility another system may require to work properly (as f.e. we add if blocks, change synchronized method into synchronized blocks etc).&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;There is thus a set of open questions:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;So should that belongs to the JVM directly, and in which form?&lt;br /&gt;(as f.e. JVMTI already provides monitor entry / exit events, that should be fairly easy).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Should those 3 Lockable' methods (or 6 if we include the static versions) belong to &lt;i&gt;java.lang.Object&lt;/i&gt; direclty?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Would an hybrid system that changes the synchronize blocks using bytecode transformation but then relies on JVM level support for AOP such as we do in JRockit be enough to listen for lock events?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Is the cost of the introduced &lt;i&gt;instanceof&lt;/i&gt; acceptable?&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;Happy thinking!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-1113994411741765180?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/1113994411741765180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/1113994411741765180'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2005/10/synchronized-block-join-points-v2.html' title='Synchronized block join points (v2)'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-1279029705742605426</id><published>2005-09-28T11:08:00.000+02:00</published><updated>2007-08-08T11:14:28.408+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>How will nextgen AOP looks like?</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;This last days I have been thinking some about how next gen AOP implementations may look like in say 4 years from now in the Java landscape.&lt;br /&gt;&lt;br /&gt;As you may known, 5 years ago &lt;a href="http://aspectj.org"&gt;AspectJ&lt;/a&gt; was not based on bytecode manipulation but was based on source code transformation.&lt;br /&gt;As of today, full blown AOP like AspectJ and JBoss AOP are usually build on top of really heavy bytecode manipulation, while more lightweight approach like Spring AOP are build on top of proxy (which under the hood can use bytecode generation technology ie JDK or CGlib proxy).&lt;br /&gt;&lt;br /&gt;In the next few days we will start spreading the prototype implementation of AOP support in &lt;a href="http://www.jrockit.com"&gt;JRockit JVM&lt;/a&gt; which allows to implement all of the AOP interceptions features without even touching the bytecode but with a more abstracted subscription based API. If you missed the dev2dev series you can read more about it &lt;a href="http://dev2dev.bea.com/pub/a/2005/08/jvm_aop_2.html"&gt;there&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This technology is definitely a breakthrough in the field, but does not address the introduction/mixin features ie capability to add method / field / annotation / change the object hierarchy of the object model in a crosscutting manner.&lt;br /&gt;This means that f.e. to implement AspectJ as it is on top of the new JVM based technology we need to wether&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;remove the feature from AspectJ - this is dumb as introduction are an important part of AOP&lt;/li&gt;&lt;br /&gt;&lt;li&gt;do that in the VM - well, perhaps but unlikely from my perspective as it would mean changing the Java language itself else ones would not be able to call the introduced members from regular code&lt;/li&gt;&lt;br /&gt;&lt;li&gt;use an hybrid bytecode / VM based AOP approach - why not but it looks a lot like going back to the old bytecode based implementation complexity&lt;/li&gt;&lt;br /&gt;&lt;li&gt;do it in another way!&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;My thoughts on that is that we will likely do it in another way - and perhaps going back to source code transformation. This year Sun' folks presented the &lt;a href="http://weblogs.java.net/blog/tball/archive/2005/06/project_jackpot.html"&gt;Jackpot&lt;/a&gt; project at JavaOne - which is sort of a rule driven source transformation engine. If that ones goes mainstream somewhere with Java 7, ones will have a fairly great technology set to rethink the way we implement AOP in Java, mixing nextgen APT (that will expose the full AST), Jackpot and JVM weaving.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-1279029705742605426?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/1279029705742605426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/1279029705742605426'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2005/09/how-will-nextgen-aop-looks-like.html' title='How will nextgen AOP looks like?'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-888631543906313113</id><published>2005-08-10T12:18:00.000+02:00</published><updated>2007-08-08T11:14:28.408+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>AOP weavers - are we doing it wrong?</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;These last days I have been prototyping around an interesting idea.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;As you know we have been working on an API to add &lt;a href="http://dev2dev.bea.com/pub/a/2005/08/jvm_aop_2.html"&gt;JVM support for AOP in JRockit&lt;/a&gt;. The prototype will be available any time soon.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;The nice thing about it is that you don't manipulate the bytecode anymore and that you are using only well known &lt;b&gt;java.lang.reflect.*&lt;/b&gt; API to tell the JVM if your pointcut is matching or not. This is somehow similar to what ones can do with Spring AOP - as this one is proxy based (see f.e. &lt;a href="http://fisheye.cenqua.com/viewrep/springframework/spring/src/org/springframework/aop/MethodMatcher.java?r=1.10"&gt;MethodMatcher&lt;/a&gt; API in Spring).&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;The immediate benefit of it is that first there is no need to have another in-memory representation of classes beeing weaved (before they get loaded) that is backed by some expensive (both memory and CPU) bytecode analysis.&lt;br /&gt;This advantage is detailled in our JVM support for AOP &lt;a href="http://dev2dev.bea.com/pub/a/2005/08/jvm_aop_1.html"&gt;part1&lt;/a&gt; article.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;As a consequence it is really easy to query the method annotation, generics properties, and such - something that is extremely complex to achieve with acceptable overhead in regular bytecode based weaver such as AspectJ or AspectWerkz (actually more complex than changing some bytecode instruction).&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;So what is that idea I had ?&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;Having AOP support in JRockit is nice, but it will take some time before that gets mainstream (with eventually a JSR etc). In this transition period, there must be a way to implement a better bytecode based weaver that will perform way better than current weavers (both AspectJ and AspectWerkz), that will be easier to implement, and whose only requirement is Java 5 (well off course, it won't be as good as JRockit JVM support for AOP - so it is still a transition technology).&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;I have thus been sketching on an hybrid system that makes extensive use of the hotswap API, and whose actual weaver relies only on pointcut matching backed by the java.lang.reflect.* API ie does not build any kind of equivalent structure backed by bytecode analysis.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;As such the memory overhead is zero, and the CPU overhead is way less than current AspectJ and AspectWerkz.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;The overall idea is quite simple and consists in 2 phases:&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;&lt;b&gt;Phase 1&lt;/b&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;A first weaver is changing the bytecode in some   stable way - such that &lt;b&gt;all&lt;/b&gt; classes are transformed (lets say prepared) &lt;b&gt;the same way&lt;/b&gt; - while not introducing any dependancies on any kind of AOP, and while not adding any kind of performance overhead (ie no changes in the execution flow such as introduced by wrappers method and such usually used when implementing instrumentation needed for around advice).&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;All classes thus get loaded as expected with a very limited time overhead and no memory overhead at all (thanks to the excellent &lt;a href="http://asm.objectweb.org/"&gt;ASM&lt;/a&gt; performance).&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;b&gt;Phase 2&lt;/b&gt;&lt;br/&gt;&lt;br /&gt;Then when an actual class gets loaded (as per regular application behavior) I get a small callback invoked when this class &lt;b&gt;has just been loaded&lt;/b&gt; and just before anything else happens (ie the class static initializer invoked by the JVM). Current &lt;i&gt;load time&lt;/i&gt; weavers do things "just before the class gets loaded" and as such cannot access the java.lang.reflect representation of what they weave.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;This callback can then perform the actual weaving by relying entirely on the &lt;b&gt;java.lang.reflect.*&lt;/b&gt; API to match the pointcuts. It then constructs the instrumented version of the class and hotswap it thanks to the Java 5 API. The JVM eats this one and goes on.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;The first prepare phase is needed as the hotswap API does forbids change in the schema (ie cannot add or remove methods or fields).&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;A nice extra side effect is that at any point in time any class can be exposed to the AOP layer thru a simple API. This can be handy for some cases where there are some circular references in the dependancies (f.e. the instrumentation needs the java.lang.reflect.Method class to match against the pointcuts so if I want to add aspects to the Method class, I cannot do it until I have a representation of this class ie there 's no way to have it working by simply invoking the callback from the prepared Method class itself).&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;This might seems like gory details, especially when compared to what we do in the JRockit JVM support for AOP, but I am sure there are some concepts worth digging there - as memory usage and weaving overhead as been reported more than once as a major problem (see f.e. use case with AspectJ reported by Ron Bodkin where the system takes 4 minutes to start instead of less than a minute without any weaver &lt;a href="http://rbodkin.blogs.com/ron_bodkins_blog/2005/03/nearinfinity_ao.html"&gt;here&lt;/a&gt;)&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;This makes it also very easy to add aspects even to java.* classes (though it's not generally a good idea unless you know what you are doing).&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;This sample is an actual code snip of the actual AOP transformation (part of phase 2). As you can see it relies on the java.lang.reflect API.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;code language="java"&gt;&lt;br /&gt;    public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {&lt;br /&gt;        if (!filter(access, name)) {//fast filter for f.e. clinit method as we look for method execution join points&lt;br /&gt;            // see if we get a match for this join point&lt;br /&gt;            // only java.lang.reflect.* API is used here&lt;br /&gt;            Member method = ReflectQuery.getMethod(m_klass, name, desc);&lt;br /&gt;            Class thisClass = m_klass;&lt;br /&gt;            Class targetClass = null;&lt;br /&gt;            Member withinCode = null;&lt;br /&gt;            //do matching&lt;br /&gt;            if (match(method, thisClass, targetClass, withinCode)) {&lt;br /&gt;                //change the bytecode but don't change the schema for hotswap purpose&lt;br /&gt;            } else {&lt;br /&gt;                return super.visitMethod(access, name, desc, signature, exceptions);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;Finally I must say this idea is not 100% new as I wrote a paper on it for AOSD 2004 (read my paper &lt;a href="http://aspectwerkz.codehaus.org/downloads/papers/aosd2004-daw-aspectwerkz.pdf"&gt;here&lt;/a&gt;). At that time though I was not doing the pointcut matching based on the java.lang.reflect API - as the purpose was to enable dynamic AOP in AspectWerkz 1.0) ie I was not solving the problem of the memory and CPU overhead of the actual weaver.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;What do you think? Are those ideas worth digging more?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-888631543906313113?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/888631543906313113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/888631543906313113'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2005/08/aop-weavers-are-we-doing-it-wrong.html' title='AOP weavers - are we doing it wrong?'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-7423267257096053669</id><published>2005-08-02T09:34:00.000+02:00</published><updated>2007-08-08T11:14:28.408+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>JVM support for AOP in BEA JRockit</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;We have plublished a follow-up to our &lt;a href="http://java.sun.com/javaone/"&gt;JavaOne 2005&lt;/a&gt; session that describes with some more details the &lt;b&gt;JVM support for AOP that is beeing designed within the BEA JRockit JVM&lt;/b&gt;.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;This first article introduces the problems that usually happen with current weavers (in the Java land) and briefly described the proposed solution.&lt;br/&gt;&lt;br /&gt;The next part to appear in the following weeks will give more details and code samples.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;a href="http://dev2dev.bea.com/pub/a/2005/08/jvm_aop_1.html"&gt;Read the article&lt;/a&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;table border="1"&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;a href="http://dev2dev.bea.com/pub/a/2005/08/jvm_aop_1.html"&gt;JRockit JVM Support For AOP, Part 1&lt;/a&gt; by Jonas Bonér and Alexandre Vasseur, Joakim Dahlstedt -- AOP is all the rage, but how do you implement it? In this article, Jonas, Alexandre, and Joakim show that the current approaches to implementing AOP suffer from many problems, making scalability an issue. Moreover, they indicate that the traditional approach to aspect weaving duplicates efforts that the JVM already performs.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;We are currently working on making the prototype implementation available for further evaluation.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;If you could not attend JavaOne 2005, the slides are available from the &lt;a href="http://java.sun.com/javaone/"&gt;JavaOne&lt;/a&gt; web site, and they are also available &lt;a href="http://blogs.codehaus.org/people/avasseur/download/TS-7659.pdf"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;The full webcast of the JavaOne session is &lt;a href="http://dev2dev.bea.com/pub/e/721"&gt;also available on dev2dev&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-7423267257096053669?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7423267257096053669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7423267257096053669'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2005/08/jvm-support-for-aop-in-bea-jrockit.html' title='JVM support for AOP in BEA JRockit'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-4451129000210247915</id><published>2005-08-01T14:48:00.000+02:00</published><updated>2007-08-08T11:14:28.409+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>AspectJ 5 load time weaving with Java 1.3 using ... AspectWerkz</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;&lt;code language="java"&gt;&lt;br /&gt;**** Introduction&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;p/&gt; &lt;br /&gt;As development of &lt;a href="http://aspectj.org"&gt;AspectJ 5&lt;/a&gt; and the merger with &lt;a href="http://aspectwerkz.codehaus.org"&gt;AspectWerkz&lt;/a&gt; making good progress, several users have started to wonder how the load time weaving under Java 1.3 / 1.4 VM be enabled.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;Despite the name, AspectJ 5 is not at all tied to Java 5. I have already explained in &lt;a href="http://blogs.codehaus.org/people/avasseur/archives/001121_aspectj_aspect_and_java_13.html"&gt;this post&lt;/a&gt; how to write plain Java aspects using JavaDoc annotation and &lt;a href="http://backport175.codehaus.org"&gt;Backport175&lt;/a&gt;.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;In this post I 'll explain how to &lt;b&gt;enable load time weaving for Java 1.3/1.4 for AspectJ... by using AspectWerkz !&lt;/b&gt; ie that AspectJ will sit on top of the very low level layer of AspectWerkz.&lt;br /&gt;&lt;p/&gt; &lt;br /&gt;&lt;code language="java"&gt;&lt;br /&gt;**** Some background&lt;br /&gt;&lt;/code&gt; &lt;br /&gt;&lt;p/&gt; &lt;br /&gt;In AspectWerkz we enable load time weaving to happen thru a wide range of options that user can choose:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Java 5 agent&lt;/li&gt;&lt;br /&gt;&lt;li&gt;JRockit specific integration with JRockit agent&lt;/li&gt;&lt;br /&gt;&lt;li&gt;bootclasspath family&lt;/li&gt;&lt;br /&gt;&lt;li&gt;hotswap family&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;I have integrated the most important ones in the AspectJ 5 code base already - ie the first two - but some of them won't be integrated - hence this post.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;When running Java 5 or JRockit (java 1.3 / 1.4 / 1.5) you don't need to read further and can stick to what's provided out of the box in AspectJ 5. Else... continue reading.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;The AspectWerkz low level layer named &lt;i&gt;aspectwerkz-core&lt;/i&gt; is actually a generic load time weaving layer. It comes with one interface that one has to implement - very similar to the &lt;i&gt;JSR-163&lt;/i&gt; instrumentation agent: the &lt;b&gt;org.codehaus.aspectwerkz.hook.ClassPreProcessor&lt;/b&gt;.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;This core layer comes with a set of tools that allows to turn this one on into the environment. The most easiest to use is what we called the &lt;i&gt;"prepared bootclasspath"&lt;/i&gt; where you basically run a little script that will patch the &lt;i&gt;java.lang.ClassLoader&lt;/i&gt; to hook in the agent, and will give you back a jar. This jar file can then be used first in the classpath when you start your JVM so that the agent gets called.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;You can read more about all the options in the AspectWerkz doc &lt;a href="http://aspectwerkz.codehaus.org/weaving.html#Overview_of_options_for_online_weaving"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;code language="java"&gt;&lt;br /&gt;**** Running AspectJ by using AspectWerkz for load time weaving&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;I describe here the implementation of the agent, but you can use directly the one I ship with this post if you are not interested in the details. You can assume this one is LGPL, as AspectWerkz is.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;The implementation of the ClassPreProcessor to use AspectJ on top of AspectWerkz core is straightforward and looks like that:&lt;br /&gt;&lt;code language="java"&gt;&lt;br /&gt;package org.aspectj.ext.ltw13;&lt;br /&gt;&lt;br /&gt;public class ClassPreProcessorAdapter implements&lt;br /&gt;// implements the AspectWerkz core interface&lt;br /&gt;org.codehaus.aspectwerkz.hook.ClassPreProcessor {&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * Concrete preprocessor we delegate to&lt;br /&gt;     * This one sits in org.aspectj.weaver.loadtime.*&lt;br /&gt;     */&lt;br /&gt;    private static ClassPreProcessor s_preProcessor;&lt;br /&gt;&lt;br /&gt;    static {&lt;br /&gt;        try {&lt;br /&gt;            s_preProcessor = new Aj();&lt;br /&gt;            s_preProcessor.initialize();&lt;br /&gt;        } catch (Exception e) {&lt;br /&gt;            throw new ExceptionInInitializerError("could not initialize preprocessor due to: " + e.toString());&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void initialize() {&lt;br /&gt;        ;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public byte[] preProcess(String className, byte[] bytes, ClassLoader classLoader) {&lt;br /&gt;        // skip bootCL&lt;br /&gt;        if (classLoader == null) {&lt;br /&gt;            return bytes;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        // skip AJ weaver well know stuff to avoid circularity&lt;br /&gt;        if (className != null) {&lt;br /&gt;            String slashed = className.replace('.', '/');&lt;br /&gt;            if (slashed.startsWith("org/aspectj/weaver/")&lt;br /&gt;                || slashed.startsWith("org/aspectj/bridge/")&lt;br /&gt;                || slashed.startsWith("org/aspectj/util/")&lt;br /&gt;                || slashed.startsWith("org/aspectj/apache/bcel")&lt;br /&gt;                || slashed.startsWith("org/aspectj/lang/")&lt;br /&gt;            ) {&lt;br /&gt;                //System.out.println("SKIP " + className);&lt;br /&gt;                return bytes;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        // do the weaving using AspectJ weaver&lt;br /&gt;        return s_preProcessor.preProcess(className, bytes, classLoader);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;By using the AspectWerkz &lt;i&gt;Plug&lt;/i&gt; utility we generate our load time weaving enabled java.lang.ClassLoader in &lt;i&gt;awaj-boot.jar&lt;/i&gt; (see AspectWerkz doc for other options, that might be more license friendly if you care). This can be done thru Ant:&lt;br /&gt;&lt;code language="java"&gt;&lt;br /&gt;        &lt;java classname="org.codehaus.aspectwerkz.hook.Plug" fork="true" failonerror="true"&gt;&lt;br /&gt;            &lt;classpath&gt;&lt;br /&gt;                &lt;pathelement path="${java.home}/../lib/tools.jar"&gt;&lt;br /&gt;                &lt;path refid="aw.path"&gt;&lt;br /&gt;            &lt;/classpath&gt;&lt;br /&gt;            &lt;arg line="-target _boot/awaj-boot.jar"&gt;&lt;br /&gt;        &lt;/java&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;The last step consists in starting the JVM with this one, passing in a specific option to say what is the ClassPreProcessor implementation we want to use (the default one beeing AspectWerkz).&lt;br /&gt;Starting a sample with Ant will thus looks like this - the important details are int he &lt;i&gt;jvmarg&lt;/i&gt; option&lt;br /&gt;&lt;code language="java"&gt;&lt;br /&gt;    &lt;target name="test" depends="compile.test, compile, prepare"&gt;&lt;br /&gt;        &lt;java classname="test.ltw13.Sample" fork="true" failonerror="true"&gt;&lt;br /&gt;            &lt;classpath&gt;&lt;br /&gt;                .....&lt;br /&gt;            &lt;/classpath&gt;&lt;br /&gt;            &lt;jvmarg line="&lt;br /&gt;      -Daj5.def=test/aop.xml&lt;br /&gt;      -Xbootclasspath/p:_boot/awaj-boot.jar&lt;br /&gt;      -Xbootclasspath/a:D:/aw/cvs_aw/aspectwerkz4/lib/aspectwerkz-core-2.0.jar&lt;br /&gt;                         -Daspectwerkz.classloader.preprocessor=org.aspectj.ext.ltw13.ClassPreProcessorAdapter&lt;br /&gt;            "/&gt;&lt;br /&gt;        &lt;/java&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;p/&gt; &lt;br /&gt;&lt;code language="java"&gt;&lt;br /&gt;****  Sample project&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;p/&gt; &lt;br /&gt;I am attaching the complete source code, along with a sample Aspect in a zip.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;This sample further use Backport175 so that the project is 100% Java 1.3 - without any of the AspectJ specific extra keyword to defines aspects that would disturb your regular javac compiler.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;Off course, this load time weaving can be used for any kind of aspects, so adapt it for using AJC if you have some &lt;i&gt;.aj&lt;/i&gt; files to compile.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;b&gt;Note: this zip does not include AspectWerkz jars, Backport175 jars, and AspectJ jars needed. You will have to get those and fix the Ant build.xml for your environment. See the build.xml file in the zip.&lt;/b&gt; (the sample is also refering to AspectWerkz 2.1RC1 - so change it to AspectWerkz 2.0  / sorry about those minor details).&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;It may also happen that you will need a SAX XML parser has Java 1.3 does not ships one. You may read more about that in the AspectWerkz FAQ for example&lt;br /&gt;&lt;a href="http://aspectwerkz.codehaus.org/faq.html#other_java_1_3"&gt;here (read  "Does AspectWerkz support Java 1.3?")&lt;/a&gt;. This is not contained in the sample project neither.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;a href="http://blogs.codehaus.org/people/avasseur/downloads/ltw13.zip"&gt;Get AspectJ load time weaving on Java 1.3 enabled by AspectWerkz !&lt;/a&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;You will need AspectWerkz 2.0 for it. &lt;a href="http://aspectwerkz.codehaus.org"&gt;Get it there&lt;/a&gt;.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;To run the sample, you will also need AspectJ and Backport and the Backport175 AspectJ extension. See build.xml on how to get those.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-4451129000210247915?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/4451129000210247915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/4451129000210247915'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2005/08/aspectj-5-load-time-weaving-with-java.html' title='AspectJ 5 load time weaving with Java 1.3 using ... AspectWerkz'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-2357355456465789908</id><published>2005-07-13T13:02:00.000+02:00</published><updated>2007-08-08T11:14:28.409+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>Opt-out AOP: good or evil ?</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;There is an interesting option in &lt;a href="http://aspectj.org"&gt;AspectJ&lt;/a&gt; that is named &lt;b&gt;-Xreweavable&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;br /&gt;When turned on using any kind of compilation/weaving mode (compiling with &lt;b&gt;ajc&lt;/b&gt;, within Eclipse AJDT, doing bynary weaving, or using loadtime weaving), each weaved class keeps track of&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;the aspects that are affecting it&lt;/li&gt;&lt;br /&gt;&lt;li&gt;its state before the weaving happened (ie its bytecode without aspects)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;br /&gt;This option is very handy when you plan to weave more than once your application (because f.e. this is a library that you distribute), and when you want to make sure everyone will be able to add some more aspects in there.&lt;br/&gt;&lt;br /&gt;Actually, discussions are taking place if this should be the default.&lt;br /&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;br /&gt;An interesting consequence is that it is fairly easy to implement an &lt;b&gt;opt-out AOP engine&lt;/b&gt; that simply restores the state prior to weaving, and thus &lt;b&gt;kicks out all the aspects from the application !&lt;/b&gt;&lt;br/&gt;&lt;br /&gt;There are of course realistic use-cases for it :&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;sanity check if production is very scared about use of AspectJ, knowing that the developpers team is using it for their own needs (declare error / warning f.e. and tracing in QA stage etc)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;obtain some more info about which aspect is in, and is affecting the application, to increase the trust everyone gets in using the technology&lt;/li&gt;&lt;br /&gt;&lt;li&gt;introspect some third parties libraries and see if they actually use aspects&lt;/li&gt;&lt;br /&gt;&lt;li&gt;add some more reporting features on the go, to be able to have at any time the list of aspects that are in the system f.e. thru some sort of web console&lt;/li&gt;&lt;br /&gt;&lt;li&gt;enforcing that some key section of the system are not allowed to be advised by anything, or only by some sort of well know and certified aspect(s)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;br /&gt;A small amout of code is required for it, the trick is mainly to add another Java 5 agent or loadtime weaver that will check for this &lt;i&gt;reweavable&lt;/i&gt; state and do the reporting.&lt;br/&gt;&lt;br /&gt;This is actually very easy to do when using f.e. &lt;a href="http//aspectwerkz.codehaus.org"&gt;AspectWerkz&lt;/a&gt;-core as the backend to hook this one in and have it work as well on Java 1.3, and using &lt;a href="http://asm.objectweb.org/"&gt;ASM&lt;/a&gt; for the bytecode details.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here is a sample output (I am using AspectJ loadtime weaving to do the weaving first, but that could be done using post compilation with AJC, or compilation from within Eclispe AJDT etc)&lt;br /&gt;&lt;code language="java"&gt;&lt;br /&gt;// in this sample, start the app with AspectJ loadtime weaving (could have been compiled with ajc instead)&lt;br /&gt;// and pipe with the UndoAspectJ opt-out engine using the AspectWerkz core&lt;br /&gt;// as a backend&lt;br /&gt;#java -javaagent:aspectjweaver.jar -Daj5.def=test/aop.xml&lt;br /&gt;       -javaagent:aspectwerkz-jdk5-2.0.jar&lt;br /&gt;       -Daspectwerkz.classloader.preprocessor=&lt;br /&gt;          org.aspectj.ext.undoaspectj.ClassPreProcessor&lt;br /&gt;       test.undoaspectj.Sample&lt;br /&gt;&lt;br /&gt;weaveinfo Type 'test.undoaspectj.Sample' (Sample.java:28) advised by&lt;br /&gt;   around advice from 'test.undoaspectj.Sample$TestAspect' (Sample.java)&lt;br /&gt;&lt;br /&gt;// here is the opt-out message&lt;br /&gt;UndoAspectJ - test/undoaspectj/Sample was affected by&lt;br /&gt;    test.undoaspectj.Sample$TestAspect&lt;br /&gt;&lt;br /&gt;// execution without any aspect takes place:&lt;br /&gt;Sample.target&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code language="java"&gt;&lt;br /&gt;// without the opt-out we would see the aspect executing:&lt;br /&gt;&lt;br /&gt;weaveinfo Type 'test.undoaspectj.Sample' (Sample.java:28) advised by&lt;br /&gt;   around advice from 'test.undoaspectj.Sample$TestAspect' (Sample.java)&lt;br /&gt;&lt;br /&gt;// execution with aspect takes place:&lt;br /&gt;Sample$TestAspect.around&lt;br /&gt;Sample.target&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;br /&gt;Though the first idea is quite odd and counter productive, this illustrates that ones could easily implement a security layer on top of AspectJ without even going deep in the AspectJ code base, to enforce security constraints about the use of AOP in the system and in the deployments at large.&lt;br /&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;br /&gt;So is opt-out AOP good or evil ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-2357355456465789908?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/2357355456465789908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/2357355456465789908'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2005/07/opt-out-aop-good-or-evil.html' title='Opt-out AOP: good or evil ?'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-248634464151888992</id><published>2005-07-05T13:32:00.000+02:00</published><updated>2007-08-08T11:14:28.409+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>@AspectJ in AJDT - a world premiere !</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;I am happy to announce that the &lt;b&gt;@AspectJ support within Eclipse AJDT&lt;/b&gt; will appear in the next build snapshots, ie very soon !&lt;br /&gt;&lt;br /&gt;That is an important step that brings to the &lt;a href="http://aspectwerkz.codehaus.org"&gt;AspectWerkz&lt;/a&gt; and &lt;a href="http://aspectj.org"&gt;AspectJ&lt;/a&gt; merger all its meaning, by providing a plain Java syntax (based on annotations) to write AspectJ aspects (aka @AspectJ) while still providing excellent support for it in Eclipse AJDT plugin - just as it exists for the well know AspectJ style (code style).&lt;br /&gt;&lt;br /&gt;In the list of things to already expect, that will officially ship as of AspectJ 1.5 M3 in the following days:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;error checking for pointcuts (even though those looks like strings within an annotation)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;warnings when @AspectJ annotations are misused (f.e. used in a class that is not annotated with an @Aspect annotation etc)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;advised by view&lt;/li&gt;&lt;br /&gt;&lt;li&gt;advises view and cross-reference view&lt;/li&gt;&lt;br /&gt;&lt;li&gt;and off course AJC integration (ie weaving happens behind the scene as compilation is done)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;As a world premiere, here is a snapshot of an @AspectJ aspect in AJDT !&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.codehaus.org/people/avasseur/archives/download/aj-ajdt-worldpremiere.html" onclick="window.open('http://blogs.codehaus.org/people/avasseur/archives/download/aj-ajdt-worldpremiere.html','popup','width=1400,height=964,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"&gt;&lt;img alt="@AspectJ in AJDT" src="http://blogs.codehaus.org/people/avasseur/archives/download/aj-ajdt-worldpremiere_resize.jpg" width="290" height="200" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;For those of you using AspectWerkz, you may wish to give it a try very soon, as it is already much better that &lt;a href="http://blogs.codehaus.org/people/avasseur/archives/000923_aspectwerkz_aop_eclipse_plugin.html"&gt;the Eclipse plugin I had written for AspectWerkz&lt;/a&gt;, and as it will help you to get started with the @AspectJ syntax in your favorite IDE.&lt;br /&gt;&lt;br /&gt;Start your download engines to get the next build snapshots and the upcoming AspectJ 1.5 M3 with your fresh Eclipse 3.1 final !&lt;br /&gt;&lt;br /&gt;(Many thanks to Andrew and Mik for answering my questions to get that bits working)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-248634464151888992?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/248634464151888992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/248634464151888992'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2005/07/aspectj-in-ajdt-world-premiere.html' title='@AspectJ in AJDT - a world premiere !'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-6516907589117930264</id><published>2005-06-23T11:31:00.000+02:00</published><updated>2007-08-08T11:14:28.409+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>AspectJ, @Aspect and Java 1.3</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;Following the &lt;a href="http://backport175.codehaus.org"&gt;Backport175&lt;/a&gt; release that Jonas and I have done some days ago, and since &lt;a href="http://aspectj.org"&gt;AspectJ 1.5&lt;/a&gt; upcoming &lt;b&gt;M3&lt;/b&gt; and especially the &lt;b&gt;@Aspect&lt;/b&gt; style is starting to take shape after some month of hard work on my side, I think it is a good timing to also explain that this @Aspect sytle, despite its name tied to these Java 5 annotations, is not at all tied to Java 5, and will bring the &lt;b&gt;plain Java aspect&lt;/b&gt; concept to all of you using &lt;b&gt;Java 1.3 and 1.4&lt;/b&gt; (from the real world).&lt;br /&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;br /&gt;The &lt;b&gt;@Aspect style&lt;/b&gt; is also referred as @AJ, or annotation style, or this way to write aspect with annotation that we came up with thru &lt;a href="http://aspectwerkz.codehaus.org"&gt;AspectWerkz&lt;/a&gt;.&lt;br /&gt;It mainly means that AspectJ allows you to write an aspects using wether the well known &lt;b&gt;code style&lt;/b&gt; or the AspectWerkz like &lt;b&gt;annotation style&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;br /&gt;&lt;code language="java"&gt;&lt;br /&gt;// code style&lt;br /&gt;public aspect SomeAspect {&lt;br /&gt;     void before() : execution(* Foo.bar()) {&lt;br /&gt;        // do some stuff&lt;br /&gt;        // use thisJoinPoint etc&lt;br /&gt;     }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;br /&gt;&lt;code language="java"&gt;&lt;br /&gt;// annotation style, here with Java 5&lt;br /&gt;@Aspect&lt;br /&gt;public class SomeAspect {&lt;br /&gt;     @Before("execution(* Foo.bar())")&lt;br /&gt;     void before(JoinPoint thisJoinPoint)  {&lt;br /&gt;        // do some stuff&lt;br /&gt;        // use thisJoinPoint etc&lt;br /&gt;     }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;br /&gt;And since Backport175 brings annotations to Java 1.3 while preserving the bytecode format that the Java 5 specification describes, it seamlessly allows you to use the very same AspectJ version to write @Aspect on Java 1.3 as well (but please don't call it the &lt;i&gt;doclet style&lt;/i&gt;!)&lt;br /&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;br /&gt;&lt;code language="java"&gt;&lt;br /&gt;// annotation style, backported to Java 1.3 or 1.4&lt;br /&gt;/**&lt;br /&gt; * @Aspect&lt;br /&gt; */&lt;br /&gt;public class SomeAspect {&lt;br /&gt;    /**&lt;br /&gt;      * @Before("execution(* Foo.bar())")&lt;br /&gt;      */&lt;br /&gt;     void before(JoinPoint thisJoinPoint)  {&lt;br /&gt;        // do some stuff&lt;br /&gt;        // use thisJoinPoint etc&lt;br /&gt;     }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;br /&gt;For the Java 1.3 to work, you just need an single little jar that contains the AspectJ defined annotations (like &lt;code&gt;@interface Aspect&lt;/code&gt;) backported to Java 1.3 in the form of regular interfaces (ie &lt;code&gt;interface Aspect&lt;/code&gt;) and then make sure you have those classes first when doing the weaving.&lt;br /&gt;Aside, since AJC (the AspectJ compiler) is not yet integrated in the doclet parsing pipeline, you need to follow a &lt;i&gt;binary weaving&lt;/i&gt; strategy ie:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;develop the aspect and the application with Java 1.3 (remember it's plain Java so you can use IntelliJ if you want)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;compile the sources with regular javac&lt;/li&gt;&lt;br /&gt;&lt;li&gt;post-compile with Backport175 to handle the annotations&lt;/li&gt;&lt;br /&gt;&lt;li&gt;binary weave with AJC&lt;/li&gt;&lt;br /&gt;&lt;li&gt;run&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;br /&gt;That sounds a bit cumbersome but some simple Ant script is of great help. Aside Backport175 comes with plugins for Eclipse and IntelliJ so you end up with just the binary weaving step - that is rather common.&lt;br /&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;br /&gt;I have made &lt;a href="http://blogs.codehaus.org/people/avasseur/downloads/aspectjrt-backport175.jar"&gt;this little AspectJ extension available here (that can be used with Java 1.3)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;br /&gt;You can also grab &lt;a href="http://blogs.codehaus.org/people/avasseur/downloads/ext-backport175-AspectJ-src.zip"&gt; the source code for it, that includes a small demo here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;br /&gt;Just set &lt;code&gt;aj.root&lt;/code&gt; in the &lt;code&gt;build.properties&lt;/code&gt; to the folder that contains &lt;code&gt;aspectjrt.jar&lt;/code&gt; and &lt;code&gt;aspectjtools.jar&lt;/code&gt; from a recent nightly build (will work for M3, does not for M2, so use a recent one!).&lt;br /&gt;Then run &lt;code&gt;ant clean test&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;br /&gt;Check the &lt;code&gt;build.xml&lt;/code&gt; file to understand how the different build steps are performed.&lt;br /&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;br /&gt;In the IDE it will also popup pretty well. See for example the little green&lt;br /&gt;&lt;code&gt;@&lt;/code&gt; signs in the margin in this IntelliJ screenshot.&lt;br /&gt;&lt;a href="http://blogs.codehaus.org/people/avasseur/downloads/aj-bp.html" onclick="window.open('http://blogs.codehaus.org/people/avasseur/downloads/aj-bp.html','popup','width=917,height=648,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false" alt="@AspectJ in IntelliJ, with Java 1.3"&gt;&lt;img alt="@AspectJ in IntelliJ, with Java 1.3" src="http://blogs.codehaus.org/people/avasseur/downloads/aj-bp.jpg" width="459" height="324" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;br /&gt;So now we have AspectJ @Aspect straight in IntelliJ.&lt;br /&gt;Off course, you'd better use &lt;a href="http://www.eclipse.org/ajdt/"&gt;Eclipse AJDT&lt;/a&gt; to benefit from the rich user experience that it provides when dealing with software modularity thru AOP and AspectJ.&lt;br /&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;br /&gt;Using Backport175 also allows to use custom annotations in the pointcuts under Java 1.3 to define stronger contract between the aspect and the application, as &lt;a href="http://www.aspectprogrammer.org/blogs/adrian/2005/03/the_new_holy_tr.html"&gt;Adrian describes here&lt;/a&gt; as the Holy Trinity (when you further add dependency injection)&lt;br /&gt;(the demo don't include that but I let you try it).&lt;br /&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;br /&gt;In a follow-up post I will also explain how the new AspectJ enhanced load time weaving ala AspectWerkz can work with Java 1.3 and 1.4 as well - since it has been a recurrent question.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-6516907589117930264?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/6516907589117930264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/6516907589117930264'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2005/06/aspectj-aspect-and-java-13.html' title='AspectJ, @Aspect and Java 1.3'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-4687428658382184701</id><published>2005-06-22T18:06:00.000+02:00</published><updated>2007-08-08T11:14:28.409+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>JavaOne 2005 - AOP, distributed Java, and more</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;I thought it would be interesting to post what kind of session and BOF I am planning to attend during &lt;a href="http://java.sun.com/javaone/"&gt;JavaOne 2005&lt;/a&gt; next week.&lt;br /&gt;&lt;br /&gt;There are indeed interesting trends going on, and needless to say I don't really want to hear that the EJB (3) XML deployment descriptors are back or that kind of things. Instead, AOP, Annotations and distributed architectures will get my interest.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;BOF-9888, Chasing 9s: Modeling and Measuring Availability of J2EE™ Applications (Sun, monday 7h30 PM)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;TS-7659, Runtime Aspects With JVM™ Support (BEA JRockit off course, Tuesday 11h AM - &lt;a href="http://blogs.codehaus.org/people/avasseur/archives/001107_jrockit_aop_and_aspectj_5_and_javaone_2005.html"&gt;don't miss it ! and meet us at the BEA and Eclipse booth&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;TS-7695, The Spring Framework: Introduction to Lightweight J2EE™ Architecture (Interface21, Tuesday 11h AM)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt; TS-7212, Clustering, Consistency, and Caching: An Implementor's View of JSR 107 [JCache] (BEA, Tuesday 01h30 PM)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;TS-7159, Java™ Platform Clustering: Present and Future (Sun, Tuesday 2h45 PM) (don't miss it, it is a sneak from Sun research labs, about transparent clustering)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;BOF-9385, Apt Usage of APT: When and How to Use the Annotation Processing Tool (Chariot Solutions, Tuesday 7h30 PM) (I know they will give a quote to &lt;a href="http://aspectj.org"&gt;AspectJ&lt;/a&gt;)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;BOF-9161, Exploring Annotation-Based Programming Through the APT and Mirror APIs (BEA/Sun, Tuesday 9h30 PM) (ha ! Annotations that drove &lt;a href="http://aspectwerkz.codehaus.org"&gt;AspectWerkz&lt;/a&gt; for a while)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;BOF-9441, Practical Application of Aspects in Everyday Development (ALTERthought, Tuesday 10h30 PM) (AOP from the users - an evidence of adoption phases as regards AOP)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;TS-5471, Jini™ and JavaSpaces™ Technologies on Wall Street (JPMorgan, GigaSpaces,others, Wednesday 11h AM)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;TS-7429, Speculative Locking: Breaking the Scale Barrier (Azul, Wednesday 4h PM)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;TS-7410, Network Attached Processing: Tapping 384-Way SMP, 256GB Java™ Technology Compute Bricks (Azul, Thursday 1h15 PM)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;TS-7339, Data Grids for J2EE™ Platform Cluster Deployments (GemStone, Thursday 3h45 PM)&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;See you there !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-4687428658382184701?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/4687428658382184701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/4687428658382184701'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2005/06/javaone-2005-aop-distributed-java-and.html' title='JavaOne 2005 - AOP, distributed Java, and more'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-7798476489602783490</id><published>2005-06-07T18:34:00.000+02:00</published><updated>2007-08-08T11:14:28.409+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>JRockit AOP and AspectJ 5 and JavaOne 2005</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://java.sun.com/javaone/"&gt;JavaOne 2005&lt;/a&gt; will be a good opportunity for you to have an update on the&lt;br /&gt;AOP field. Last year we presented &lt;a href="http://aspectwerkz.codehaus.org"&gt;AspectWerkz plain Java AOP&lt;/a&gt; and its&lt;br /&gt;J2EE integration facilities. This year, several sessions will include&lt;br /&gt;AOP related sections and give testimony of interesting use cases, and&lt;br /&gt;as Jonas recently announce we will for the first time present&lt;br /&gt;the &lt;a href="http://blogs.codehaus.org/people/jboner/archives/001094_jvm_support_for_aop_technical_session_at_javaone_2005.html"&gt;JRockit JVM support for AOP&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Make sure you attend this technical session on Tuesday June 28 (TS-7659, "Runtime Aspects With JVM Support") and have a&lt;br /&gt;sight at what's next in the AOP galaxy. If you can't make it, visit us&lt;br /&gt;at the BEA booth where we will be eager to show you the JRockit JVM&lt;br /&gt;AOP support thru live demos.&lt;br /&gt;&lt;br /&gt;You can also visit us at the Eclipse booth where we will show latest&lt;br /&gt;&lt;a href="http://aspectj.org"&gt;AspectJ 5 and AJDT versions&lt;/a&gt;. This includes &lt;b&gt;plain Java AOP&lt;/b&gt; and&lt;br /&gt;&lt;b&gt;load-time weaving ala AspectWerkz&lt;/b&gt; that I have been working on for some&lt;br /&gt;month since we merged with AspectJ, and many new things regarding Java&lt;br /&gt;5 support in AspectJ 5 (annotation matching, generics etc)&lt;br /&gt;&lt;br /&gt;Meet you there !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-7798476489602783490?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7798476489602783490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7798476489602783490'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2005/06/jrockit-aop-and-aspectj-5-and-javaone.html' title='JRockit AOP and AspectJ 5 and JavaOne 2005'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-2798833081256111520</id><published>2005-06-01T12:14:00.000+02:00</published><updated>2007-08-08T10:58:25.109+02:00</updated><title type='text'>Java Open Source playing with sharks</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;As a person largely involved in the Java Open Source landscape, I have been observing radical changes during the last 5 years in this area, and the &lt;a href="http://www.theserverside.com/news/thread.tss?thread_id=34249"&gt;5 years birthday of Struts&lt;/a&gt; makes me comment it some.&lt;br /&gt;&lt;br /&gt;Five years ago, I was starting my own Struts clone for PHP to try to bring an MVC model to the rather new PHP OO stack I was using on a customer site. This project ended up pretty much nowhere (e-php on SF) since, well..., I could luckily do something way more interesting.&lt;br /&gt;But back at that time it was rather simple to start a small Open Source project and try to have it grow. Some were actually even considering you as a strange beast when you happened to be part of that world, one of my former employer beeing the first.&lt;br /&gt;&lt;br /&gt;At that time, I also remember sales folks arguing that a Java developer had to have &lt;b&gt;"fluent in Struts"&lt;/b&gt; in their resume to actually be a good Java Joe developer (before that you had to have "fluent in Javascript" in their mind, so we had made a big progress for the IT consultants thanks to Struts ;-) )&lt;br /&gt;&lt;br /&gt;Most of the (good) Java Joe developers where using Apache projects from the Jakarta line mainly as their sole Open Source use in corporate projects, and Tomcat was pretty much the sole Open Source container that you could find in production.&lt;br /&gt;&lt;br /&gt;At that time JBoss started to change the game by grabbing several Open Source fames and projects on board (Tomcat, and then Hibernate to name the most famous).&lt;br /&gt;Back in 2002, it became fairly common to see &lt;b&gt;"JBoss knowledge is a plus"&lt;/b&gt; in job descriptions for IT consultants. Open Source had started to play with sharks, and you had to play with it, following the "fluent in Struts" move.&lt;br /&gt;&lt;br /&gt;Next in the pie, Eclipse went bigger and bigger, and Open Source projects that were used and presented in conferences were more and more backed by someone that could afford it.&lt;br /&gt;At that time I boosted &lt;a href="http://aspectwerkz.codehaus.org"&gt;AspectWerkz&lt;/a&gt; by joining Jonas' first iterations, all that on my spare time, unpaid, for the fun of it, as most of the OSS committers, bringing my little Open Source load time weaving framework that I had started some month before (beSee on SF).&lt;br /&gt;&lt;br /&gt;AOP and IoC started to gain in popularity, and Spring was doing its first moves. It became common to see &lt;b&gt;"fluent in Hibernate"&lt;/b&gt; in job description, and I remember the first time I actually noticed it was in february 2003.&lt;br /&gt;&lt;br /&gt;I have been pushing the AOP ball since that time as part of my BEA job, and  Open Source was more and more playing with sharks. AspectWerkz was backed by BEA, AspectJ revealed to be largely backed by IBM as an Eclipse technology project, and sucessfull projects that you could hear about in conferences where almost all backed by a shark - be it a big open source community like Apache, Eclipse, ObjectWeb that can afford its own events, or by a commercial vendor like BEA, IBM or JBoss.&lt;br /&gt;Even more, some projects happens to be backed by more than one shark. AspectWerkz and AspectJ is an evidence of it thru the &lt;a href="http://aspectj.org"&gt;AspectJ 5&lt;/a&gt; merger.&lt;br /&gt;&lt;br /&gt;Back in 2004 the Spring fame became a shark by its own thanks to a well shapped service model around Rod' Interface21, that obviously adressed (and still adresses) Java Joe developer needs.&lt;br /&gt;&lt;br /&gt;Last year I was wondering when I would see a &lt;b&gt;"fluent in Spring"&lt;/b&gt; requirement in an IT job description, and it happened this morning, on the same line as "Tomcat, JBoss, Hibernate" for a "challenging J2EE architect opportunity" (&lt;a href="http://offres.monster.fr/getjob.asp?JobID=30620015&amp;WT.mc_n=MKT000125"&gt;interested?&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;I have the feeling that Open Source will not be anymore this hectic group of people working for free for the fun of it as that sound to be back in 2000. Open Source is becoming more and more a distribution channel or a big thing to take into account when thinking about return on investment. If you look closely at some open source projects, you 'll also realize that it is rather common that 80% if not more of the workload is handled by a group of people sitting on the same open space.&lt;br /&gt;&lt;br /&gt;The recent &lt;a href="http://www-1.ibm.com/press/PressServletForm.wss?MenuChoice=pressreleases&amp;amp;TemplateName=ShowPressReleaseTemplate&amp;SelectString=t1.docunid=7658&amp;amp;TableName=DataheadApplicationClass&amp;SESSIONKEY=any&amp;amp;WindowTitle=Press+Release&amp;STATUS=publish"&gt;deal (backed by concrete M$) done around Geronimo&lt;/a&gt; (project that was already backed by Apache) is yet another evidence. Open Source is playing with sharks, so you'd better love that. And if you do want to kickstart an Open Source project, you'd better think which shark will play with you if you want your jewel idea to sustain.&lt;br /&gt;&lt;br /&gt;As a last evidence, almost every single IT service company in France finally spinned of an official department dedicated to Open Source, bridging  the gap with "SSLL" models (french acronym for open source service provider, doing consulting only on OSS stacks) . I have noticed this trend those last few months (Devoteam, Atos to name a few).&lt;br /&gt;This not to comment on the Eclipse phenomenon, with almost all software vendors joining it and shaping their product line in a new more or less anticipated direction.&lt;br /&gt;&lt;br /&gt;Open Source is not anymore the thing you use to maximize revenues, or to make sure you recruit uptodate brains. It's the thing you have to play with straight within your strategy, no matter if you are a software vendor or an IT service company.&lt;br /&gt;&lt;br /&gt;So what will be the next Open Source moves in the Java are(n)a ?&lt;br /&gt;Happy Open Source thoughts !&lt;br /&gt;&lt;br /&gt;(note: dates in that post are those I remember and might be approximations. Aside, the job opportunities I am talking about are all for the French market, so you may expect some delta)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-2798833081256111520?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/2798833081256111520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/2798833081256111520'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2005/06/java-open-source-playing-with-sharks.html' title='Java Open Source playing with sharks'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-7427460846051451061</id><published>2005-04-14T16:50:00.000+02:00</published><updated>2007-08-08T11:14:28.409+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>EJB 3 and AOP: the EJB interceptor dilemna</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;In this post I present an implementation a subset of the EJB 3 specification (JSR-220) : the EJB interceptors. As of today no EJB 3 preview brings an implementation that seamlessly integrates with AOP, despite the concept similarities.&lt;br/&gt;&lt;br /&gt;The proposed implementation is fully runnable out of any container, and introduce a specific extension to allow use of pointcut in EJB interceptors, thanks to AspectWerkz extensible AOP container.&lt;br/&gt;&lt;br /&gt;Wants to know more about EJB 3 interceptors,  and how they are closed to AOP or different from AOP ? Read more.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;b&gt;Should we consider EJB interceptor as AOP ?&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;As you may know, the &lt;a href="http://www.jcp.org/en/jsr/detail?id=220"&gt;EJB 3 specification (JSR-220)&lt;/a&gt; defines&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Interceptors for EJBs (stateless, statefull and message-driven)&lt;/b&gt;. If it might be a good idea to spread an answer&lt;br /&gt;&lt;br /&gt;for the need of addressing cross-cutting concerns in J2EE and EJBs in particular, it might be a bad idea to do it for&lt;br /&gt;&lt;br /&gt;those of us (more and more numerous) familiar with AOP implementations like &lt;a href="http://aspectj.org"&gt;AspectJ&lt;/a&gt; and&lt;br /&gt;&lt;br /&gt;&lt;a href="http://aspectwerkz.codehaus.org"&gt;AspectWerkz&lt;/a&gt;, especially because huge limitations of what the specification&lt;br /&gt;&lt;br /&gt;allows us to do with those interceptors - at first sight and excluding any vendor specific extension.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;The most anti-AOP concept in the specification is that the EJB that wants interceptor have to declare it explicitly&lt;br /&gt;&lt;br /&gt;using a @javax.ejb.Interceptor or @javax.ejb.Interceptors class level annotation - which breaks the obliviousness of&lt;br /&gt;&lt;br /&gt;aspects. That in favor of making things explicit, which might be good for J2EE users.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Further on, the EJB bean itself can have a method that intercept its own business method ie &lt;i&gt;the bean is the&lt;br /&gt;&lt;br /&gt;aspect&lt;/i&gt; (that sounds like marketing isn'it ?). Well. That's a specification and is interesting in the sense that it&lt;br /&gt;&lt;br /&gt;democratize a technology.&lt;br /&gt;So what can we do to democratize AOP as part of the EJB 3 specification ?&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;code language="java"&gt;&lt;br /&gt;@javax.ejb.Stateless&lt;br /&gt;@javax.ejb.Interceptor("test.ejb3.MyInterceptor")&lt;br /&gt;public class MyEJBIsTheAspect {&lt;br /&gt;&lt;br /&gt;    // business method&lt;br /&gt;    public int businessSum(int i, int j) {&lt;br /&gt;        return i + j;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // interceptor method within the bean (the bean is the aspect)&lt;br /&gt;    @javax.ejb.AroundInvoke&lt;br /&gt;    public Object interceptMySelf(InvocationContext ctx) throws Exception {&lt;br /&gt;        System.out.println("--&gt; MyEJBIsTheAspect.interceptMySelf");&lt;br /&gt;        System.out.println("  method: " + ctx.getMethod());&lt;br /&gt;        for (int i = 0; i &lt; ctx.getParameters().length; i++) {&lt;br /&gt;            Object o = ctx.getParameters()[i];&lt;br /&gt;            System.out.println("  args["+i+"]: " + o);&lt;br /&gt;        }&lt;br /&gt;        return ctx.proceed();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;b&gt;State of the art (not that much..) in JBoss and Oracle AS EJB 3 preview&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;After having a look at &lt;a href="http://jboss.org"&gt;JBoss EJB 3&lt;/a&gt; and &lt;a&lt;br /&gt;&lt;br /&gt;href="http://www.oracle.com/technology/tech/java/ejb30.html"&gt;OracleAS EJB 3&lt;/a&gt; previews, I was even more disapointed.&lt;br /&gt;&lt;br /&gt;Both of them are &lt;b&gt;using a reflective based approach to invoke the interceptors&lt;/b&gt;. This means that&lt;br /&gt;&lt;br /&gt;the performance of the interceptor will be bad, and that a &lt;a&lt;br /&gt;&lt;br /&gt;href="http://www.aip.org/history/heisenberg/p08.htm"&gt;Heisenberg&lt;/a&gt; effect will be inevitable and actually fairly big&lt;br /&gt;&lt;br /&gt;(no wonder that ones will use interceptor to gather performance metrics and thus as soon as you observe the bean, you&lt;br /&gt;&lt;br /&gt;are observing a different things than what actually happens).&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Ones may say this is a microscopic view. It is. But when thinking about EJB 2 stories in the past a sound idea would be&lt;br /&gt;&lt;br /&gt;to make sure we don't waste resources where we can avoid it. And thinking about JBoss history around AOP, that's rather&lt;br /&gt;&lt;br /&gt;suprising that the EJB 3 interceptors are not cleanly integrated in their AOP framework. I personnaly consider that we&lt;br /&gt;&lt;br /&gt;have enough technology around to make it far better, and far more consistent with AOP. Given the impact that AOP will&lt;br /&gt;&lt;br /&gt;continue to have, ones would better figuring out how to do that now with EJB 3 - assuming that EJB 3 succeeds.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;b&gt;AspectWerkz extensible container value proposal to EJB 3 interceptors&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;I decided to give it a try with the &lt;b&gt;AspectWerkz extensible container&lt;/b&gt;. As Jonas Bonér described it in a &lt;a&lt;br /&gt;&lt;br /&gt;href="http://www.theserverside.com/articles/article.tss?l=AspectWerkzP1"&gt;TSS article&lt;/a&gt;, AspectWerkz can be considered&lt;br /&gt;&lt;br /&gt;as a generic AOP runtime platform, in which ones can hook in any kind of AOP/AOP like programming model. AspectWerkz&lt;br /&gt;&lt;br /&gt;aspects are one, AspectJ aspects are another, and we have implementations for Spring AOP and AOP Alliance aspects. An&lt;br /&gt;&lt;br /&gt;&lt;i&gt;AspectModel&lt;/i&gt; answers three essential properties: &lt;i&gt;what is the life cycle of the aspect&lt;/i&gt;, &lt;i&gt;how to invoke&lt;br /&gt;&lt;br /&gt;it&lt;/i&gt; and &lt;i&gt;how the programming model exposes the closure with wich the user proceed&lt;/i&gt;.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;It happens that &lt;b&gt;the EJB 3 interceptor can be seen as a very simple AOP programming model&lt;/b&gt; in two ways:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;ones can define interceptor class. An interceptor (advice) is thus a @javax.ejb.AroundInvoke annotated method with a&lt;br /&gt;&lt;br /&gt;specific signature (no interface, no mandatory method name) within a class - the interceptor class (aspect).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;ones can define a @javax.ejb.AroundInvoke annotated method (advice) in the EJB itself (aspect): &lt;b&gt;the bean is the&lt;br /&gt;&lt;br /&gt;aspect !&lt;/b&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;the closure is defined with the interface javax.ejb.InvocationContext&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;code language="java"&gt;&lt;br /&gt;public interface javax.ejb.InvocationContext {&lt;br /&gt;    public Object getBean();&lt;br /&gt;    public Method getMethod();&lt;br /&gt;    public Object[] getParameters();&lt;br /&gt;    public void setParameters(Object[]);&lt;br /&gt;    public Context getEJBContext();&lt;br /&gt;    public java.util.Map getContextData();&lt;br /&gt;&lt;br /&gt;    public Object proceed() throws Exception;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;The value proposal I am bringing here with the AspectWerkz extensible container is the following:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;no reflection at all. See performance figure f.e at our &lt;a&lt;br /&gt;&lt;br /&gt;href="http://docs.codehaus.org/display/AW/AOP+Benchmark"&gt;benchmark site&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;seamless integration of the interceptors with the aspects. They are made "aspect" thanks to AspectWerkz and the&lt;br /&gt;&lt;br /&gt;other aspect model (AspectWerkz aspect, AspectJ aspect, whatever aspect model registered in the runtime) coexists&lt;br /&gt;&lt;br /&gt;nicely&lt;/li&gt;&lt;br /&gt;&lt;li&gt;easy points for vendor specific extension:&lt;ul&gt;&lt;br /&gt;    &lt;li&gt;real pointcut to narrow the matching of an interceptor method to a very precise set of bean methods&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;life cycle control for the interceptor class&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;supporting cflow(), args() and alike AOP semantics&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;introducing high performant hot deployment and undeployment of EJB interceptors&lt;/li&gt;&lt;br /&gt;    &lt;/ul&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;"out of container" runtime available&lt;/li&gt;&lt;br /&gt;&lt;li&gt;rich integration patterns: application preparation (like ejbc / appc for faster deployment) or seamless&lt;br /&gt;&lt;br /&gt;deployment&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;b&gt;AspectWerkz extensible container details&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;To better understand how things will looks like, you need some background in AspectWerkz:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;The first key part is "org.codehaus.aspectwerkz.transform.inlining.spi.AspectModel". &lt;b&gt;We will provide two&lt;br /&gt;&lt;br /&gt;implementations of it&lt;/b&gt;. One for interceptor class (the interceptor class is the aspect), and one for bean as&lt;br /&gt;&lt;br /&gt;interceptor (the bean is the aspect).&lt;br /&gt;The second key part is in integrating the EJB interceptor closure "InvocationContext" that defines the "proceed()"&lt;br /&gt;&lt;br /&gt;method with the more general idea of "Joinpoint.proceed()" of the runtime. In short, this means that the interceptor&lt;br /&gt;&lt;br /&gt;will be entirely part of the aspect chain, and if there is a transaction aspect to handle EJB transaction boundaries,&lt;br /&gt;&lt;br /&gt;they will share the very same chain - as ones expects - thus making it easy for the implementation to organize&lt;br /&gt;&lt;br /&gt;precedence rules (as define in section 3.5.1 of JSR 220 for example).&lt;br /&gt;As we already wrote this transaction aspect for EJB 3 in a previous &lt;a&lt;br /&gt;&lt;br /&gt;href="http://www.theserverside.com/articles/article.tss?l=AspectWerkzP2"&gt;AspectWerkz TSS tutorial&lt;/a&gt;, that's rather a&lt;br /&gt;&lt;br /&gt;simple idea and basic requirement.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;The runtime will take care of aggregating the models depending on which aspect apply to which join point, each aspect&lt;br /&gt;&lt;br /&gt;having its specific AspectModel and each AspectModel implementation being responsible for generating what it needs:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;code language="java"&gt;&lt;br /&gt;// a closure to deal with the join points&lt;br /&gt;// ie models org.codehaus.aspectwerkz.joinpoint.JoinPoint interface&lt;br /&gt;// to fit with the transaction aspect, or any other aspect&lt;br /&gt;// and javax.ejb.InvocationContext to fit EJB3 interceptors&lt;br /&gt; class jitEJB3Closure implements JoinPoint, InvocationContex &lt;br /&gt; {&lt;br /&gt;   &lt;br /&gt;    // the closure hosts state, optimization makes it more complex than that&lt;br /&gt;&lt;br /&gt;    // the target of the join point ie the intercepted ejb&lt;br /&gt;    // which is also third aspect: remember the bean is the aspect !&lt;br /&gt;    private MyEJBIsTheAspect target;&lt;br /&gt;&lt;br /&gt;    // first aspect in the chain, statically compiled&lt;br /&gt;    private TXAspect aspect_0;&lt;br /&gt;&lt;br /&gt;    // second aspect: the interceptor class&lt;br /&gt;    private MyInterceptor aspect_1;          &lt;br /&gt; &lt;br /&gt;    // details skipped that makes those fields initalized as they should.&lt;br /&gt;&lt;br /&gt;    // as defined in javax.ejb.InvocationContext&lt;br /&gt;    public Method getMethod() {...}            &lt;br /&gt;&lt;br /&gt;    // as defined in JoinPoint&lt;br /&gt;    public Class getTargetClass {...}          &lt;br /&gt;&lt;br /&gt;    // other methods as per each aspect model affecting the join point&lt;br /&gt;    ...&lt;br /&gt;&lt;br /&gt;    // generic proceed() method as defined in JoinPoint and InvocationContext&lt;br /&gt;    public Object proceed() throws Throwable   &lt;br /&gt;    {&lt;br /&gt;        // sort of a loop to proceed with the advice chain&lt;br /&gt;       &lt;br /&gt;        // case first round: TX aspect&lt;br /&gt;        // TX aspect&lt;br /&gt;        // as defined in the "AspectWerkzAspectModel implements AspectModel"&lt;br /&gt;    aspect_0.manageTX(this)&lt;br /&gt;        // "this" is considered as the JoinPoint instance&lt;br /&gt;&lt;br /&gt;        ...&lt;br /&gt;&lt;br /&gt;        // case second round: interceptor class&lt;br /&gt;        // as defined in the yet to be written&lt;br /&gt;        // "EJBInterceptorModel  implements AspectModel"&lt;br /&gt;    aspect_1.someNameOfYourChoice(this)       &lt;br /&gt;        // "this" is considered as the InvocationContext instance&lt;br /&gt;       &lt;br /&gt;        ...&lt;br /&gt;&lt;br /&gt;        // case third round: the bean is the aspect&lt;br /&gt;        // as defined in the yet to be written&lt;br /&gt;        //  "EJBIsTheAspectModel implements AspectModel"&lt;br /&gt;    target.interceptMyself(this)&lt;br /&gt;        // "this" is considered as the InvocationContext instance&lt;br /&gt;        ...&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;   }&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;That may sound a bit of gory details, but that's actually simple once you get the idea of this closure acting for&lt;br /&gt;&lt;br /&gt;multiple AspectModel in mind. The code is actually &lt;b&gt;15O lines for the interceptor class model (EJBInterceptorModel)&lt;br /&gt;&lt;br /&gt;and 25 lines for the bean is the aspect model (EJBIsTheAspectModel)&lt;/b&gt; thanks to some inheritance. It mainly deals with&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;generating the InvocationContext methods (like getMethod(), getParameters())&lt;/li&gt;&lt;br /&gt;&lt;li&gt;dealing with the EJB 3 aspect life cycle ie&lt;ul&gt;&lt;li&gt;&lt;br /&gt;    push the EJB instance on stack for the EJBIsTheAspectModel&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;create an interceptor class instance, bookeep it and push it on stack for the EJBInterceptorModel (as the spec&lt;br /&gt;&lt;br /&gt;does not specifies the life cycle, I will use a singleton model).&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;b&gt;What about the deployment ?&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;I presented the runtime, but there is an interesting topic as well: the deployment. AspectWerkz pioneered the aop.xml to&lt;br /&gt;&lt;br /&gt;define which&lt;br /&gt;aspects are affecting the system. Obviously, we don't want that for EJB interceptor. We need to use the AspectWerkz API&lt;br /&gt;&lt;br /&gt;to register what we need in the system. The interesting concept here is that we will transform &lt;b&gt;what the EJB&lt;br /&gt;&lt;br /&gt;specification defines thanks to annotation (@javax.ejb.Interceptor, @javax.ejb.Interceptors, @javax.ejb.AroundInvoke) in&lt;br /&gt;&lt;br /&gt;real AOP pointcut that the AOP container understand&lt;/b&gt;.&lt;br /&gt;That is where a vendor may easily hook in an extension (ie introduce a new annotation for example) to refine the&lt;br /&gt;&lt;br /&gt;interceptor class life cycle, or to introduce a pointcut.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;I am defining a class that will expose an API that will hide the AOP registration from the user or from the other parts&lt;br /&gt;&lt;br /&gt;of our spec. implementation.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;code language="java"&gt;&lt;br /&gt;public class EJBInterceptorDeployer {&lt;br /&gt;&lt;br /&gt;   public static void deploy(String ejbClassName, ClassLoader loader) {&lt;br /&gt;      // step 1 - interceptor class&lt;br /&gt;     &lt;br /&gt;      // read the ejbClass @Interceptor and @Interceptors class level annotation&lt;br /&gt;      // for each interceptor class name found as value of those annotation&lt;br /&gt;      //     get the @AroundInvoke method information&lt;br /&gt;      //     deploy an aspect&lt;br /&gt;      //         using the EJBInterceptorModel&lt;br /&gt;      //         to the pointcut : "execution(!@javax.ejb.AroundInvoke !static * " + ejbClassName + ".*(..))"&lt;br /&gt;      //&lt;br /&gt;     &lt;br /&gt;      // step 2 - @AroundInvoke method of the bean itself&lt;br /&gt;      // find the @AroundInvoke method if any&lt;br /&gt;      // deploy an aspect&lt;br /&gt;      //     using the EJBIsTheAspectModel&lt;br /&gt;      //    to the same pointcut&lt;br /&gt;     &lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt; // method making use of AspectWerkz aspect deployment API&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;The thing to note about the deployer is that it is not using reflection. It is f.e. using our &lt;a&lt;br /&gt;&lt;br /&gt;href="http://backport175.codehaus.org/"&gt;BackPort175&lt;/a&gt; implementation to read the EJB annotations from the bytecode. If&lt;br /&gt;&lt;br /&gt;we were not doing so, we would trigger the EJB class loading while our system is not yet defined,&lt;br /&gt;and the weaver would not be able to do the job when using load-time weaving approaches.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;b&gt;What about running the system ?&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;In the sample application, I am deploying the EJB using the EJBInterceptorDeployer presented in the previous section.&lt;br /&gt;In a full blown container I would hook the call to it when the application or EJB deployer would register the EJB in the&lt;br /&gt;&lt;br /&gt;system.&lt;br /&gt;The nice thing is that I can run my EJB and still have the interceptors when running as a standalone application by&lt;br /&gt;&lt;br /&gt;using AspectWerkz load time weaving, and a simple static block to declare which class is an EJB.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;The sample application can be run with (for ones familiar with AspectWerkz, there is no aop.xml..)&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;code language="java"&gt;&lt;br /&gt;java -javaagent:lib\aspectwerkz-jdk5-2.0.jar test.ejb3.Sample&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code language="java"&gt;&lt;br /&gt;public class Sample {&lt;br /&gt;&lt;br /&gt;    static {&lt;br /&gt;        EJBInterceptorDeployer.deploy("test.ejb3.MyEJBIsTheAspect", Sample.class.getClassLoader());&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public static void main(String args[]) throws Throwable {&lt;br /&gt;        // some one would do a lookup or inject for that when in the container&lt;br /&gt;        MyEJBIsTheAspect myEjb = new MyEJBIsTheAspect();&lt;br /&gt;&lt;br /&gt;        System.out.println("Calling the EJB");&lt;br /&gt;        int i = myEjb.businessSum(1, 2);&lt;br /&gt;        System.out.println("got : " + i);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code language="java"&gt;&lt;br /&gt;AW EJB3 - Deploying test.ejb3.MyInterceptor for test.ejb3.MyEJBIsTheAspect&lt;br /&gt;AW EJB3 - Deploying test.ejb3.MyEJBIsTheAspect for test.ejb3.MyEJBIsTheAspect&lt;br /&gt;Calling the EJB&lt;br /&gt;--&gt; MyInterceptor.interceptStandalone&lt;br /&gt;  method: public int test.ejb3.MyEJBIsTheAspect.businessSum(int,int)&lt;br /&gt;  args[0]: 1&lt;br /&gt;  args[1]: 2&lt;br /&gt;--&gt; MyEJBIsTheAspect.interceptMySelf&lt;br /&gt;  method: public int test.ejb3.MyEJBIsTheAspect.businessSum(int,int)&lt;br /&gt;  args[0]: 1&lt;br /&gt;  args[1]: 2&lt;br /&gt;got : 3&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Though at first glance I found the interceptor part of the EJB 3 specification fairly odd, and was a bit sad that some&lt;br /&gt;&lt;br /&gt;important AOP concepts like precedence and aspect life cycle, as well as expressiveness of the pointcut language are&lt;br /&gt;&lt;br /&gt;completely sacrified, I must admit that it might help ones familiarize with AOP concepts.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;It took 1h to implement the EJB 3 interceptor spec and have it perfectly integrated with AOP - unlike so far exposed EJB&lt;br /&gt;&lt;br /&gt;3 previews by JBoss and Oracle (though those are actual preview, while this article is more a technology focus and&lt;br /&gt;&lt;br /&gt;positionning).&lt;br /&gt;It took 15 minutes more to implement a pointcut extension thru a new @org.codehaus.aspectwerkz.ejb3.AroundInvokeAOP&lt;br /&gt;&lt;br /&gt;annotation, that allows me to reuse the expressiveness of the pointcuts ie a vendor extension:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;code language="java"&gt;&lt;br /&gt;public class MyInterceptor {&lt;br /&gt;&lt;br /&gt;    @AroundInvoke&lt;br /&gt;    @AroundInvokeAOP("execution(* *.businessSum(..))")&lt;br /&gt;    public Object interceptStandalone(InvocationContext ctx) throws Exception {&lt;br /&gt;        System.out.println("--&gt; MyInterceptor.interceptStandalone");&lt;br /&gt;        System.out.println("  method: " + ctx.getMethod());&lt;br /&gt;        for (int i = 0; i &lt; ctx.getParameters().length; i++) {&lt;br /&gt;            Object o = ctx.getParameters()[i];&lt;br /&gt;            System.out.println("  args["+i+"]: " + o);&lt;br /&gt;        }&lt;br /&gt;        return ctx.proceed();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Some more time would allow me to have further features, like f.e. supporting cflow and args pointcut, so that an&lt;br /&gt;&lt;br /&gt;interceptor may look like an advice as it looks like in AspectWerkz aspects, with static access to intercepted method&lt;br /&gt;&lt;br /&gt;arguments etc (ie no boxing in an Object[] array).&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;A next iteration would be to integrate with the AspectWerkz hot deployment feature, and this would bring in hot&lt;br /&gt;&lt;br /&gt;deployment of EJB interceptors at no cost - while still having everything statically compiled for the runtime to perform&lt;br /&gt;&lt;br /&gt;at its best.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;This implementation may seems at first glance full of details, and perhaps like a hammer to address a simple part of the&lt;br /&gt;&lt;br /&gt;spec. I don't think so. I think &lt;b&gt;it address the very crucial point that so far everyone has skept&lt;/b&gt; - including&lt;br /&gt;&lt;br /&gt;JBoss folks (that have a foot in the AOP trench): &lt;b&gt;it integrates seamlessly with the aspects and AOP concepts, and&lt;br /&gt;&lt;br /&gt;actually allow advanced user to apply more advanced AOP concepts as well ie bridging the gap between a commercial&lt;br /&gt;&lt;br /&gt;concept and needs (EJB interception) and a sound concept backed by years of research (AOP and cross-cutting)&lt;/b&gt;.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;So which vendor will be the first to have its EJB play well with AOP : like applying an interceptor thru a real&lt;br /&gt;&lt;br /&gt;pointcut, defining programmatic precedence etc, dealing with cflow and hotdeployment of interceptors, and all that with&lt;br /&gt;&lt;br /&gt;an implementation that can scale ?&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;b&gt;Want the source code ?&lt;/b&gt;&lt;br /&gt;This one is part of AspectWerkz CVS.&lt;br /&gt;It can be browsed from &lt;a&lt;br /&gt;&lt;br /&gt;href="http://cvs.aspectwerkz.codehaus.org/viewrep/aspectwerkz/aspectwerkz4/src/compiler-extensions/ejb3"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;small&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Side note: my feedback on the specication:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;There are some odd things in the 3.5 section of the JSR-220 that I have spot:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;br /&gt;- (sect. 3.5.1) an interceptor class or EJB can &lt;i&gt;only have one single&lt;/i&gt; @AroundInvoke method (advice) in it, and its&lt;br /&gt;&lt;br /&gt;signature is (sect. 3.5.4) "@AroundInvoke Object someNameOfYourChoice(InvocationContext ctx) throws Exception". Why&lt;br /&gt;&lt;br /&gt;limitating that to having one single method in the interceptor class or EJB (sect. 3.5.1). My guess is that it is tied&lt;br /&gt;&lt;br /&gt;to the fact that precedence between advice would then be harder to define in the spec without new semantics.&lt;br /&gt;Then one might wonder &lt;i&gt;why an interceptor is not defined as an interface&lt;/i&gt; with one single method "intercept(...)"&lt;br /&gt;&lt;br /&gt;that the EJB could implement as well. Having this interface would suppress the need for @AroundInvoke which sounds like&lt;br /&gt;&lt;br /&gt;an annotation overuse (unless it is a door open for vendor extension as I will do below..). I'll be interested in EG&lt;br /&gt;&lt;br /&gt;feedback on that topic, especially in regards of the first limitation.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;- interceptor components &lt;i&gt;life cycle&lt;/i&gt; is unspecified but stateless. That sounds like a very important and powerfull&lt;br /&gt;&lt;br /&gt;concept of AOP (especially AspectJ) that has been left aside. It is probably an interesting door to provide vendor&lt;br /&gt;&lt;br /&gt;specific extension ie thread safe interceptor, per bean class interceptor, per bean instance interceptor, per&lt;br /&gt;&lt;br /&gt;application interceptor etc (but then interceptor component may not be stateless anymore.)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;- (3.5) an interceptor intercepts all business method (or MessageListener methods for MDB). This means that every&lt;br /&gt;&lt;br /&gt;interceptor will be poluted with a code snip like "if (invocationContext.getMethod().getName().equals("doSomething"))&lt;br /&gt;&lt;br /&gt;..." ie ones will have to write sort of a pointcut in a very loosy way while AOP allow us to write that in a neat way&lt;br /&gt;&lt;br /&gt;(and further, a way that tools can easy understand to spot which method is intercepted by what).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;br /&gt;- javax.ejb.InvocationContext is tied to EJB. What will happen when interceptors will end up somewhere else ?&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Fortunately, the implementation exposed in this article addresses those issues nicely from a vendor specific extension&lt;br /&gt;&lt;br /&gt;perspective.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;/small&gt;&lt;br /&gt;&lt;br /&gt;&lt;small&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Note: These are my own thoughts and not of my employer ..&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;/small&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-7427460846051451061?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7427460846051451061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7427460846051451061'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2005/04/ejb-3-and-aop-ejb-interceptor-dilemna.html' title='EJB 3 and AOP: the EJB interceptor dilemna'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-5466997700686130305</id><published>2005-02-23T17:14:00.000+01:00</published><updated>2007-08-08T10:56:26.067+02:00</updated><title type='text'>BEA joins Eclipse</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;That's an exciting time for BEA.&lt;br /&gt;&lt;br /&gt;We now have announced we are joining &lt;a href="http://eclipse.org"&gt;Eclipse&lt;/a&gt; with a number of interesting things in the pipe, ranging from &lt;b&gt;AOP&lt;/b&gt; with the AspectWerkz/AspectJ effort leading to &lt;a href="http://eclipse.org/aspectj"&gt;AspectJ 5&lt;/a&gt;, to the &lt;b&gt;IDE part&lt;/b&gt; that will shape up BEA WorkShop, and leading positions in the &lt;b&gt;Web Tools Platform&lt;/b&gt;, and in the &lt;b&gt;JDT compiler&lt;/b&gt; area.&lt;br /&gt;&lt;br /&gt;Things were a bit odd when we shipped an &lt;a href="http://blogs.codehaus.org/people/avasseur/archives/000923_aspectwerkz_aop_eclipse_plugin.html"&gt;AspectWerkz Eclispe plugin&lt;/a&gt; some month ago, since everyone out there was thinking that there was a death match between &lt;a href="http://www.bea.com/framework.jsp?CNT=index.htm&amp;FP=/content/products/workshop"&gt;BEA WorkShop&lt;/a&gt; and Eclipse... Didn't you thought that way ?&lt;br /&gt;&lt;br /&gt;And don't say we have started to sneak in randomly just to catch up. Things are now ranging from the JVM with AOP work going on within &lt;a href="http://www.bea.com/framework.jsp?CNT=index.htm&amp;amp;FP=/content/products/jrockit"&gt;JRockit&lt;/a&gt; up to the IDE...&lt;br /&gt;&lt;br /&gt;Read the news&lt;br /&gt;&lt;a href="http://biz.yahoo.com/prnews/050222/sftu152_1.html"&gt;http://biz.yahoo.com/prnews/050222/sftu152_1.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-5466997700686130305?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/5466997700686130305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/5466997700686130305'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2005/02/bea-joins-eclipse.html' title='BEA joins Eclipse'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-7143835967965619065</id><published>2005-02-22T15:26:00.000+01:00</published><updated>2007-08-08T10:55:48.665+02:00</updated><title type='text'>JUnit Test cases and number of tests ?</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;Last time I was reading about a project, folks were arguing they had many many tests.&lt;br /&gt;&lt;br /&gt;But what is exactly this measurement ? Do we have to count the number of classes that extend &lt;code&gt;JUnit TestCase&lt;/code&gt;, or the number of &lt;code&gt;test*(..)&lt;/code&gt; methods, or the number of calls to JUnit &lt;code&gt;assert*(..)&lt;/code&gt; ?&lt;br /&gt;&lt;br /&gt;The current figures for AspectWerkz are pretty much those one:&lt;br /&gt;- 92 extends TestCase&lt;br /&gt;- 544 test*() methods&lt;br /&gt;- 1380 calls to assert*(..)&lt;br /&gt;&lt;br /&gt;Off course, what would matter would be the coverage (that has several definitions as well), but still, the number of test in an interesting thing to define.&lt;br /&gt;&lt;br /&gt;So how many tests do I have ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-7143835967965619065?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7143835967965619065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7143835967965619065'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2005/02/junit-test-cases-and-number-of-tests.html' title='JUnit Test cases and number of tests ?'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-1390648976934181946</id><published>2005-02-15T18:02:00.000+01:00</published><updated>2007-08-08T10:54:50.043+02:00</updated><title type='text'>Writting IDEA plugins</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;Today Jonas and I shipped &lt;a href="http://backport175.codehaus.org"&gt;Backport175&lt;/a&gt;, a back port of the JSR-175, the Java 5 Annotations spec.&lt;br /&gt;&lt;br /&gt;This project comes with an Eclipse plugin and an IDEA plugin, so its time to say something about &lt;a href="http://www.jetbrains.com/idea/"&gt;IDEA&lt;/a&gt;...&lt;br /&gt;&lt;br /&gt;I just like the architecture of the IDEA plugins. There is &lt;b&gt;very few docs&lt;/b&gt; on the topic, some very bad javadoc, and some samples around but no books yet etc.&lt;br /&gt;Anyway, you can find some help on the &lt;a href="http://www.intellij.net/forums/index.jsp?cat=8"&gt;IDEA forums&lt;/a&gt;, and guys like the &lt;a href="http://groovy.codehaus.org/IDEA's+OpenAPI+tips"&gt;Groovy&lt;/a&gt; ones have written plugins as well, so you can find a bunch of code around.&lt;br /&gt;&lt;br /&gt;The nice thing in IDEA plugins is that it s just code, a rather clear API, and a bit of IOC (IDEA is using &lt;a href="http://www.picocontainer.org/"&gt;PicoContainer&lt;/a&gt;). A plugin as just one XML descriptor.&lt;br /&gt;For an Eclipse plugin, you need a lot of XML, find what are the extension point, and dig in the docs and books, and get familiar with the Eclipse plugin wizardry. The game is very different, while for IDEA, it s just an API that you have to get familiar with.&lt;br /&gt;&lt;br /&gt;What is missing the most in IDEA v4 is a &lt;b&gt;good plugin project wizard&lt;/b&gt;, but if you have the chance to give a try to IDEA IRIDA, the &lt;a href="http://intellij.net/auth.jsp"&gt;EAP&lt;/a&gt; of the upcoming v5, then you have it, and it's as easy to debug your plugin as it is for a regular app.&lt;br /&gt;The great thing with IDEA is that you can write a very small Ant script to build the plugin. I would not even try to go there for Eclipse (perhaps I am wrong ...).&lt;br /&gt;&lt;br /&gt;You can probably learn some in that space by comparing both Backport175 plugins. It will leads you thru&lt;br /&gt;- how to have a menu of your own to add / remove the feature to a given project (nature / actions and menu)&lt;br /&gt;- how to hook in in the build system (builder / compilation listener)&lt;br /&gt;- how to deal with markers&lt;br /&gt;&lt;br /&gt;Off course, it is probably not the correct design neither for Eclipse nor for IDEA (I am far from beeing efficient in that plugin area) but it seems to do the job.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cvs.backport175.codehaus.org/viewrep/backport175/intellij"&gt;IDEA plugin CVS&lt;/a&gt;&lt;br /&gt;&lt;a href="http://cvs.backport175.codehaus.org/viewrep/backport175/eclipse"&gt;Eclipse plugin CVS&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Thanks to JetBrains to allow free use of IDEA for OSS projects !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-1390648976934181946?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/1390648976934181946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/1390648976934181946'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2005/02/writting-idea-plugins.html' title='Writting IDEA plugins'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-4786845658198362255</id><published>2005-01-24T18:32:00.000+01:00</published><updated>2007-08-08T11:15:27.089+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>Spring pointcut on steroids</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Three months ago&lt;/b&gt; when we wrote the AWBench AOP benchmark suite, I had to hack some little Spring AOP aspect and pointcuts.&lt;br /&gt;&lt;br /&gt;If you are familiar with Spring and know about AOP (AspectJ, AspectWerkz, JBoss etc), you know that &lt;b&gt;Spring pointcuts are rather ... well sadly un-intuitives&lt;/b&gt;.&lt;br /&gt;They might be for new users, but not anymore when you have very basic AOP knowlegde, and you are more and more !&lt;br /&gt;&lt;br /&gt;I could not resist and integrating Spring with AspectWerkz pointcut (yes, once again  for the third time, after the Spring container Jonas did and the extensible container we shipped.)&lt;br /&gt;&lt;br /&gt;A Spring pointcut before the wedding with AspectWerkz - almost impossible to combine with other patterns unless you have your &lt;i&gt;"Mastering Spring XML"&lt;/i&gt; in the pocket...&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    &amp;lt;bean id="theMethodExecutionGetTargetAndArgsAroundAdvisor1"&lt;br /&gt;        class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"&amp;gt;&lt;br /&gt;        &amp;lt;property name="advice"&amp;gt;&lt;br /&gt;            &amp;lt;ref local="theMethodExecutionGetTargetAndArgsAroundAdvice"/&amp;gt;&lt;br /&gt;        &amp;lt;/property&amp;gt;&lt;br /&gt;        &amp;lt;property name="pattern"&amp;gt;&lt;br /&gt;            &amp;lt;value&amp;gt;.*aroundStackedWithArgAndTarget.*&amp;lt;/value&amp;gt;&lt;br /&gt;        &amp;lt;/property&amp;gt;&lt;br /&gt;    &amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Spring pointcut as a real pointcut thanks to the wedding with &lt;b&gt;AspectWerkzPointcutAdvisor&lt;/b&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    &amp;lt;bean id="theMethodExecutionAfterThrowingAdvisor"&lt;br /&gt;        class="awbench.spring.AspectWerkzPointcutAdvisor"&amp;gt;&lt;br /&gt;        &amp;lt;property name="advice"&amp;gt;&lt;br /&gt;            &amp;lt;ref local="theMethodExecutionAfterThrowingAdvice"/&amp;gt;&lt;br /&gt;        &amp;lt;/property&amp;gt;&lt;br /&gt;        &amp;lt;property name="expression"&amp;gt;&lt;br /&gt;            &amp;lt;value&amp;gt;execution(* *..*.afterThrowingRTE(..))&amp;lt;/value&amp;gt;&lt;br /&gt;        &amp;lt;/property&amp;gt;&lt;br /&gt;    &amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Such a basic code source is &lt;a href="http://cvs.aspectwerkz.codehaus.org/viewrep/aspectwerkz/awbench/src/spring/awbench/spring/AspectWerkzPointcutAdvisor.java?r=1.1"&gt;there&lt;/a&gt; and should perhaps be reviewed by Spring guys for some of the API details.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The great news is that this will be part of a next release of Spring, and details will be handled by the AspectJ 5 engine instead. That was about time ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-4786845658198362255?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/4786845658198362255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/4786845658198362255'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2005/01/spring-pointcut-on-steroids.html' title='Spring pointcut on steroids'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-5344686341390066781</id><published>2005-01-19T10:09:00.000+01:00</published><updated>2007-08-08T11:15:27.090+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>AspectJ and AspectWerkz to Join Forces</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;Today we have finally announced that we are joining AspectJ to work on &lt;b&gt;AspectJ 5&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;We will focus on what has been the success of AspectWerkz&lt;br /&gt;- plain Java AOP, relying on an annotation defined aspect style&lt;br /&gt;- load time weaving, and integration in J2EE environment&lt;br /&gt;&lt;br /&gt;The new team is backed by both IBM and BEA and the new project will be delivered in the coming months. One of the priority is to make sure that a smooth migration path exists from AspectWerkz to AspectJ 5.&lt;br /&gt;&lt;br /&gt;That' s a great day for AspectWerkz and AspectWerkz users.&lt;br /&gt;&lt;a href="http://blogs.codehaus.org/projects/aspectwerkz/archives/000957_aspectj_and_aspectwerkz_to_join_forces.html"&gt;Read more about it&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-5344686341390066781?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/5344686341390066781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/5344686341390066781'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2005/01/aspectj-and-aspectwerkz-to-join-forces.html' title='AspectJ and AspectWerkz to Join Forces'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-6649913250228261391</id><published>2004-12-22T09:42:00.000+01:00</published><updated>2007-08-08T11:15:27.090+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>YAPB AOP 1.2.3.4 released</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;I am pleased to announce the first release of YAPB AOP.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;For those who don't like this April Fool like YAPB AOP, please read this post on The Server Side - &lt;a href="http://www.theserverside.com/news/thread.tss?thread_id=30692"&gt;read&lt;/a&gt;&lt;br /&gt;Note: YAPBAOP is a real project with real source code and runnable demo !&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Features&lt;/b&gt;&lt;br /&gt;YAPB AOP 1.2.3.4 is &lt;b&gt;Yet Another Proxy Based AOP&lt;/b&gt; for Java.&lt;br /&gt;It is&lt;br /&gt;- proxy-based (AspectWerkz proxy)&lt;br /&gt;- pure java, no language extensions, no external tools needed&lt;br /&gt;- simple and intuitive&lt;br /&gt;- direct, programmatic configuration and un-configuration&lt;br /&gt;- j2ee friendly, no need to mess with class loading&lt;br /&gt;- supports AOP Alliance API for MethodInterception&lt;br /&gt;- JDK 1.5.0 annotations support to match on annotation&lt;br /&gt;- per instance programmatic interception&lt;br /&gt;- full speed&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Sample code&lt;/b&gt;&lt;br /&gt;here is how YAPB AOP 1.2.3.4 use is simple:&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;// no aspect&lt;br /&gt;System.out.println(" ( no aspect )");&lt;br /&gt;YapbaopDemo me0 = new YapbaopDemo();&lt;br /&gt;me0.method();&lt;br /&gt;&lt;br /&gt;System.out.println(" ( bind a new aspect )");&lt;br /&gt;Yapbaop.Handle handle = Yapbaop.bindAspect(DemoAspect.class, "* yapbaop.demo.YapbaopDemo.*(..)");&lt;br /&gt;YapbaopDemo me1 = (YapbaopDemo) Proxy.newInstance(YapbaopDemo.class);&lt;br /&gt;me1.method();&lt;br /&gt;&lt;br /&gt;handle.unbind();&lt;br /&gt;&lt;br /&gt;// get a new one but not using the proxy cache then..&lt;br /&gt;System.out.println(" ( unbind it and get a new proxy YapbaopDemo-2)");&lt;br /&gt;YapbaopDemo me2 = (YapbaopDemo) Proxy.newInstance(YapbaopDemo.class, false, false/*not advisable*/);&lt;br /&gt;me1.method();// still has advice&lt;br /&gt;me2.method();// no advice&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Extra features&lt;/b&gt;&lt;br /&gt;It was very boring to do and does not bring any value to the table, so please, stop inventing (is is the right word ?) YAPB AOP clones based on your favorite bytecode library / proxy library.&lt;br /&gt;&lt;br /&gt;It took 40min to hack (time for a train trip, YAPB AOP are that easy today).&lt;br /&gt;&lt;br /&gt;If you want to do something usefull, write an email to your favorite AOP framework representative (AspectJ, AspectWerkz, JBoss AOP, Spring AOP, dynAOP, joyAOP [RIP ?], jeetAOP [RIP ?], YAPB AOP [RIP]) and wonder how to&lt;br /&gt;- write some usefull reusable aspect&lt;br /&gt;- write some good article&lt;br /&gt;- provide a new feature, a performance improvement, a bug report or fix&lt;br /&gt;- go an apply to speak about it to the next conference you can find&lt;br /&gt;- imagine new things !&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Download Now !&lt;/b&gt;&lt;br /&gt;- Get it &lt;a href="http://people.codehaus.org/~avasseur/yapbaop-1.2.3.4.jar"&gt;there&lt;/a&gt; (3 Mo jar since YAPBAOP is actually 1 class of 200 lines messed with a lot of dependancies so that you think it is a killing framework)&lt;br /&gt;- Run the demo with:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;java -cp yapbaop-1.2.3.4.jar yapbaop.demo.YapbaopDemo&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Access the source code&lt;/b&gt;&lt;br /&gt;The framework - &lt;a href="http://cvs.aspectwerkz.codehaus.org/viewrep/~raw,r=1.1/aspectwerkz/aspectwerkz4/src/compiler-extensions/aop-alliance/src/samples/yapbaop/core/Yapbaop.java"&gt;here&lt;/a&gt;&lt;br /&gt;The demo to play with - &lt;a href="http://cvs.aspectwerkz.codehaus.org/viewrep/~raw,r=1.1/aspectwerkz/aspectwerkz4/src/compiler-extensions/aop-alliance/src/samples/yapbaop/demo/YapbaopDemo.java"&gt;here&lt;/a&gt;&lt;br /&gt;The AOP alliance aspect for the demo - &lt;a href="http://cvs.aspectwerkz.codehaus.org/viewrep/~raw,r=1.1/aspectwerkz/aspectwerkz4/src/compiler-extensions/aop-alliance/src/samples/yapbaop/demo/DemoAspect.java"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Write your own !&lt;/b&gt;&lt;br /&gt;Ever wanted to be an Open Source star [*] ? Write your own. Enroll now !&lt;br /&gt;[*] A wrong assumption seems to be that to be an Open Source star, ones have to write at least one YABP AOP. If you only contribute to the next big thing, you ll never be a star, so you 'd better start your own YA RIP framework instead of working with others - that's what mankind is about according to this wrong assumption.&lt;br /&gt;&lt;br /&gt;Here are some ideas :&lt;br /&gt;- change the Yapbaop.bindAspect to support binding to a java.lang.reflect.Method&lt;br /&gt;- do the same with an array of java.lang.reflect.Method&lt;br /&gt;- do the same with 1+ Method Annotation(s)&lt;br /&gt;- add some filtering based on 1+ Class Annotation(s)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;If you have read till there&lt;/b&gt;&lt;br /&gt;Thanks to read this post.&lt;br /&gt;If you dig YAPB AOP architecture, you will find that it is based on&lt;br /&gt;- AspectWerkz proxy&lt;br /&gt;- AspectWerkz extensible AOP container to support AOP Alliance aspect&lt;br /&gt;- AspectWerkz runtime as regards binding of aspects&lt;br /&gt;Quite interesting actuallly isn'it ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-6649913250228261391?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/6649913250228261391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/6649913250228261391'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2004/12/yapb-aop-1234-released.html' title='YAPB AOP 1.2.3.4 released'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-8094387972855398583</id><published>2004-12-13T19:25:00.000+01:00</published><updated>2007-08-08T11:15:27.090+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>AspectWerkz AOP Eclipse Plugin</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;Well, we for long have said that &lt;b&gt;plain Java AOP and annotation defined aspects&lt;/b&gt; don't needs fancy GUI support, but I have to admit, this makes everyones life easier.&lt;br /&gt;&lt;br /&gt;So I am pleased to announce the availability of the &lt;b&gt;AspectWerkz Eclipse Plugin&lt;/b&gt; based on the 2.x releases.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://docs.codehaus.org/display/AW/Eclipse+plugin"&gt;Get it now, see the doc and the screenshots !&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The plugin contains two almost disjunct features:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;an embedded compiler (a builder in the Eclipse plugin world) for our &lt;b&gt;Java 1.4 strongly typed annotations&lt;/b&gt;. Just write the annotations as you would do with Java 5 but in JavaDoc (arrays, nested annotations etc are supported), and write one interface per annotation (where you would write an &lt;b&gt;@interface&lt;/b&gt; with Java 5), and the plugin will do the trick when Eclipse will compile your code.&lt;br /&gt;The annotations are then accessible at runtime (using AspectWerkz &lt;i&gt;Annotations&lt;/i&gt; API)and you can use them in your pointcuts (nothing new there).&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;a glue layer that  shows the &lt;b&gt;cross cutting view&lt;/b&gt; that is add little markers in the gutter to remind you that this &lt;i&gt;piece of code at that line&lt;/i&gt; (join point) is advised by this and that before advice in this and that aspect.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;&lt;i&gt;(Each feature is a builder so you can deactivate them on a a per project basis if you don't like them / use them.)&lt;/i&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Aside since your app will gets weaved, you can just click &lt;i&gt;run&lt;/i&gt; and the aspects are in - nothing more to do.&lt;br /&gt;If you need to expose your dependencies jar files to the weaver, use the dedicated &lt;b&gt;AspectWerkz launch configuration&lt;/b&gt; that will configure load time weaving for you.&lt;br /&gt;&lt;br /&gt;Feedback welcome.&lt;br /&gt;Any volunteer for further evolution ?&lt;br /&gt;&lt;br /&gt;The plugin ships for Eclipse 3 and Java 1.4. More to come on Java 5 later.&lt;br /&gt;&lt;br /&gt;Alex&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;i&gt;Oh forgot to say before &lt;a href="http://www.jboss.org"&gt;others&lt;/a&gt; make a story about that: yes we are the last one to write an Eclipse plugin, way (decades?) after AspectJ and some month after JBoss.&lt;/i&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-8094387972855398583?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/8094387972855398583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/8094387972855398583'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2004/12/aspectwerkz-aop-eclipse-plugin.html' title='AspectWerkz AOP Eclipse Plugin'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-3175612414406120549</id><published>2004-09-22T11:36:00.000+02:00</published><updated>2007-08-08T11:15:27.091+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>JAOO 2004 AOP coverage - day 1 and 2</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;I am back from the &lt;a href="http://www.jaoo.dk"&gt;JAOO conference&lt;/a&gt; that is happening this week in Aarhus, a city in the west part of the Denmark.&lt;br /&gt;Jonas and I had the opportunity to speak there, and since I feel that there is only a little coverage of it in the blog&lt;br /&gt;community, I have decided to take care of that DK duty.&lt;br /&gt;&lt;br /&gt;This post won't give you the right view on this conference, since I attented to my own fields related session aka AOP related, but anyway, you will have a minimum.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;The conference&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;The conference is this year largely sponsored by Microsoft, among others of the .Net or Java ground. Great guys are speaking there, like Rod Johnson (Spring / Interface21 - you know him), Rickard Oberg (former JBoss ejb guy, closed source AOP/CMS lead at Senselogic) , Martin Fowler, Arno Schmidmeier (early AspectJ user, AOSD consultant), Peter Von der Ahé (javac Sun guy), Jonas Bonér and myself to name a few and a bunch of .Net guys.&lt;br /&gt;&lt;br /&gt;Though the conference location was a bit far from the airport, the accomodation was good, lunches were fine, with DK stuff but not too much for a FR guy, and the monday night social party was pretty good.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Day 1 - Keynote by Microsoft&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;I have attended the monday keynote given by a Microsoft guy. It was a good insight to see what MS is attempting to achieve, thinking ahead the C# things while people are just excited about the upcoming release of a new Visual C# things.&lt;br /&gt;&lt;br /&gt;it was interesting to hear about how clever is Microsoft when it leads to the latest Java 5 Tiger new features, which are some sort of compiler trick for most of them.&lt;br /&gt;In .Net, when you have an int, this one is an object, and there is boxing / unboxing features somehow, but the int himself is reflectively accessible. In the Java world we have blessed (or cursed as Jonas said...) primitive types (int ...) and boxed types (Integer etc), and Tiger provides boxing and unboxing but thru a compiler trick - that is the bytecode will make use of &lt;i&gt;yourInteger.intValue()&lt;/i&gt; and &lt;i&gt;Integer.valueOf(yourint)&lt;/i&gt; under the hood.&lt;br /&gt;&lt;br /&gt;Microsoft gave a bunch of other samples, and admitted that it was somehow easier to start a good language desgin from scratch that sketching on an existing one.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Day 1 - Sessions&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;I did not attended more on monday morning since I had to prepare some for our own session and I hope to see someone providing feedback on it since it is not fair to write it myself but still...&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Annotation driven AOP with AspectWerkz&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;Jonas and I were giving a talk in the J2SE track on Annotation and AOP.&lt;br /&gt;We started with an AOP crash course just to get everyone on the train.&lt;br /&gt;Then we explained how Tiger annotations are used in AspectWerkz to have &lt;i&gt;annotation defined aspects&lt;/i&gt; (something that JBoss has recently lazily followed).&lt;br /&gt;&lt;br /&gt;Annotations are also used in AspectWerkz as a matching mechanism, and we went thru a sample where it is perfectely safe to refactor your methods without taking care about the underlying AOP without any whatever IDE plugings.&lt;br /&gt;&lt;br /&gt;You can check our slides &lt;a href="http://aspectwerkz.codehaus.org/downloads/papers/JAOO2004-AnnotationDrivenAOP.zip"&gt;there&lt;/a&gt;, but for the impatient, here is how our strongly typed matching aspect looks like for &lt;i&gt;annotation driven AOP&lt;/i&gt;. As you can see, there is no string based, wildcard based magic there.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;// Annotation driven AOP&lt;br /&gt;// Sample of strongly typed matching&lt;br /&gt;// in AspectWerkz AOP with annotations&lt;br /&gt;&lt;br /&gt;@Service&lt;br /&gt;public class Math {&lt;br /&gt;&lt;br /&gt;  @Async&lt;br /&gt;  public Result complexComputation(Arguments args) {&lt;br /&gt;    ...// this may take a while - we should do it in another thread&lt;br /&gt;  }&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;public class AsyncAspect {&lt;br /&gt;&lt;br /&gt;  @Around&lt;br /&gt;  @Within(Service.class)&lt;br /&gt;  @Execution(Async.class)&lt;br /&gt;  Object doAsynchronously(JoinPoint joinpoint) {&lt;br /&gt;      ...&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The session went fine, and the room was pretty much full, with around 400 attendees and after the session we met and chatted some with Rickard Oberg.&lt;br /&gt;&lt;br /&gt;After that we had a sort of J2SE panel, which turned out to be a BOF since the JAOO crew had not provided us with a moderator. It ended up in discussing some details and pitfalls in the new Tiger features, like generics and static import.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Night 1 - All conferences are about social events&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;In the afternoon we met Arno Schmidmeier, an early AspectJ user (meaning late 90's), who is now doing AOSD consulting in Germany (give him a call if you need some AspectJ on-site knowledge), and we then head up to the social event / party with Rod Johnson. Time to share a bunch of beers paid by JAOO sponsors (Microsoft, Borland, Quest, and then I don't really remember) while discussing ideas about Proxy based AOP as in Spring, Geronimo integration, Spring AOP container for AspectWerkz, and some other things.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Day 2 - Sessions&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;On day 2 I had to leave early and get back at work so I could only make it for Arno and Rickard'sessions and missed Rod' session unfortunately.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;AOP - let the code looks like the design&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;Arno Schmidmeier gave a talk in the Domain Driven Development track, where the main point was to explain how AOP could allow you to let the code looks like the design.&lt;br /&gt;&lt;br /&gt;He went thru some use-cases he had seen during his consultancy jobs, and the most interesting part of the session was when he explained how an expression for a domain requirements like &lt;i&gt;"for every successfull bank account operation the accont balance must be checked after the operation and in case of failure, an error should be triggered by the system and the system notified that it should rollabck etc."&lt;/i&gt; could be mapped to an AspectJ after returning aspect and thus making his points that AOP enables you to have the code look like the design while avoiding code tangling issues.&lt;br /&gt;&lt;br /&gt;Attendees raised questions about code readability, modelling issues and similarities to a predicate language approach. I would have liked to see a running samples in AJDT and alike, and be able to navigate thru the aspects, and may be emphasis more on the domain level pointcuts idea.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Rickard experiences on AOP&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;I attended Rickard talk about experiences on AOP.&lt;br /&gt;Rickard ellaborated a talk around many of the complex use-case he has for AOP in his company (Senselogic) CMS platform. He started with some classis technical domain concerns, and then jumped on his idea of interface driven system, where an object is actually decomposed in an assembly of entities, each one having a defined stack of advices attached to it.&lt;br /&gt;&lt;br /&gt;This approach, which seems quite close to quantum AOP concepts, opens for a bunch of interesting things when it comes to GUI update propagation and server to server replication of sub-graph of persistable objects as well as undo/redo management which again should propagate...&lt;br /&gt;&lt;br /&gt;Rickard introduced the idea of a &lt;i&gt;"property=development|production|whatever"&lt;/i&gt; pointcut element, that allows for sort of global on/off on the pointcuts. Something you can achieve with a &lt;i&gt;"if"&lt;/i&gt; pointcut in AspectJ - although he probably did implemented it at weave time and not at runtime unlike the AspectJ "if".&lt;br /&gt;&lt;br /&gt;Rickard then explored the advantages and drawbacks of his "home made" AOP framework, and explained the idea of the &lt;i&gt;abstract schema&lt;/i&gt;, where the aspect is abstract and then implements interface of classes where it is actually weaved to, providing sort of natural syntax for accessing the advice target instance methods from within the advice body.&lt;br /&gt;&lt;br /&gt;He then went thru a small demo wich showed a nice swinguish things, and then went thru some ajdoc equivalent, where generated javadoc for a class/member is exposing which advices are bounded to it and thru which pointcut.&lt;br /&gt;&lt;br /&gt;The next session was Rod Johnson session on Spring and Spring AOP. Unfortunately Jonas and I had to leave since mh, we are pretty busy these days.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Wrap up&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;Those 2 days were a good investement. I enjoyed the talk we gave there, and it was nice to meet and discuss more with people like Rod, Arno and Rickard.&lt;br /&gt;JAOO has probably a lot more to offer, even if you are on the .net side or on both side (ThoughtWorks had a booth there by the way).&lt;br /&gt;I had some time to think about Rickard abstract schema and experiment some more on Tiger annotations - something I will try to blog about soon.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Get to see the schedule and the JAOO slides &lt;a href="http://www.jaoo.dk/schedule/"&gt;there&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Below are some picts of Jonas, Arno, Rickard.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.codehaus.org/people/avasseur/upload/Photo 0291.html" onclick="window.open('http://blogs.codehaus.org/people/avasseur/upload/Photo 0291.html','popup','width=480,height=640,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"&gt;Jonas speaking&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.codehaus.org/people/avasseur/archives/Photo 0292.html" onclick="window.open('http://blogs.codehaus.org/people/avasseur/archives/Photo 0292.html','popup','width=480,height=640,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"&gt;Arno session&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.codehaus.org/people/avasseur/upload/Photo 0295.html" onclick="window.open('http://blogs.codehaus.org/people/avasseur/upload/Photo 0295.html','popup','width=640,height=480,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"&gt;Rickard explaining his Abstract Schema&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img alt="Lego guy made in DK" src="http://blogs.codehaus.org/people/avasseur/upload/Photo 0297.jpg" width="480" height="640" border="0" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-3175612414406120549?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/3175612414406120549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/3175612414406120549'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2004/09/jaoo-2004-aop-coverage-day-1-and-2.html' title='JAOO 2004 AOP coverage - day 1 and 2'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-2153854477426999748</id><published>2004-09-19T12:19:00.000+02:00</published><updated>2007-08-08T11:15:27.091+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>Annotation-driven AOP in Java at JAOO</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.codehaus.org/people/jboner/"&gt;Jonas&lt;/a&gt; and I are going to speak at &lt;a href="http://www.jaoo.dk"&gt;JAOO&lt;/a&gt; about &lt;b&gt;Annotation driven AOP in Java&lt;/b&gt; (Tiger / J2SE 5).&lt;br /&gt;&lt;a href="http://www.jaoo.dk/speakers/show_speaker.jsp?oid=89"&gt;The session&lt;/a&gt; will cover aspects defined as annotated java classes, as well as matching on annotations and defining strongly typed pointcut thru annotations.&lt;br /&gt;&lt;br /&gt;This is a great opportunity to speak there, especially since those ideas have been implemented since &lt;a href="http://blogs.codehaus.org/people/jboner/archives/000214_selfdefined_aspects_in_aspectwerkz_new_definition_model.html"&gt;the early time of AspectWerkz&lt;/a&gt;. Something that some of the other AOP framework are now following.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img alt="jaoo_126_60_aarhus_ani.gif" src="http://blogs.codehaus.org/people/avasseur/upload/jaoo_126_60_aarhus_ani.gif" width="125" height="60" border="0" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-2153854477426999748?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/2153854477426999748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/2153854477426999748'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2004/09/annotation-driven-aop-in-java-at-jaoo.html' title='Annotation-driven AOP in Java at JAOO'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-1398156900467746813</id><published>2004-08-19T17:24:00.000+02:00</published><updated>2007-08-08T11:15:27.091+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>Plain Old Java Aspect</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;Back from hollydays, and back to work.&lt;br /&gt;&lt;br /&gt;It's time to work on those &lt;b&gt;Plain Old Java Aspect&lt;/b&gt;s (POJA).&lt;br /&gt;Java 5 Annotations are now so old, in the place since 1.5...&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;public class Poja {&lt;br /&gt;&lt;br /&gt;  @Around("execution(* *..*(String message)) AND within(silly.dot.com.at.work.*)")&lt;br /&gt;  public Object intercept(JoinPoint jp, String message) {&lt;br /&gt;    ...&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-1398156900467746813?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/1398156900467746813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/1398156900467746813'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2004/08/plain-old-java-aspect.html' title='Plain Old Java Aspect'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-4682452189703334478</id><published>2004-07-20T15:37:00.000+02:00</published><updated>2007-08-08T11:15:27.091+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>AspectWerkz in WebLogic - domain wizard</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;I have sketeched a &lt;b&gt;BEA WebLogic domain wizard&lt;/b&gt;, so that it is now possible to install a WebLogic server with &lt;a href="http://aspectwerkz.codehaus.org"&gt;AspectWerkz&lt;/a&gt; AOP in a minute.&lt;br /&gt;&lt;br /&gt;&lt;img alt="AspectWerkz AOP WebLogic domain wizard" src="http://blogs.codehaus.org/people/avasseur/upload/aw_1.jpg" width="780" height="559" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Requirements:&lt;/b&gt;&lt;br /&gt;- WebLogic 8.1 SP2 (8.1 whatever should work).&lt;br /&gt;- Use of JRockit is mandatory for now (included in WebLogic 8.1 or other version if you want).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;How to:&lt;/b&gt;&lt;br /&gt;- &lt;a href="http://dist.codehaus.org/aspectwerkz/jars/wlwaop-1.0-beta1-fixed.jar?download"&gt;Download the jar&lt;/a&gt; (7 Mo, includes the whole AspectWerkz 1.0beta1 distribution with some extra fix).&lt;br /&gt;- Drop the jar file in your BEA_HOME/weblogic81/common/templates/domains.&lt;br /&gt;- Start the BEA Configuration Wizard from the start menu.&lt;br /&gt;- Select the AspectWerkz node and the "WebLogic WorkShop domain".&lt;br /&gt;- Select JRockit&lt;br /&gt;(for other screens, refer to the usual BEA installation documentation)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Limitations:&lt;/b&gt;&lt;br /&gt;- It is a WebLogic WorkShop domain wizard. You can probably adapt it for WebLogic Server only, or WebLogic Integration and WebLogic Portal&lt;br /&gt;- Use of JRockit is mandatory, although it is possible with some minimal change to adapt the generated "startWebLogic" script for Sun HotSpot VM (I would do it with the AspectWerkz Plug utility and -Xbootclasspath option - refer to the &lt;a href="http://aspectwerkz.codehaus.org/online.html#Prepared_bootclasspath"&gt;documentation&lt;/a&gt;).&lt;br /&gt;- If you are not using 8.1 SP2, you might need to adapt the "startWebLogic" script to set your JAVA_HOME to the correct JRockit version.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Extra bonus:&lt;/b&gt;&lt;br /&gt;- There is draft version of a &lt;b&gt;WebLogic AOP console extension&lt;/b&gt; included, that allows you to browse the META-INF/aop.xml definitions accross the class loader hierarchy of your deployed applications.&lt;br /&gt;Just start the weblogic admin console as usual and the extension will appear on the left navigation pane.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-4682452189703334478?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/4682452189703334478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/4682452189703334478'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2004/07/aspectwerkz-in-weblogic-domain-wizard.html' title='AspectWerkz in WebLogic - domain wizard'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-7234291338873833231</id><published>2004-07-09T11:38:00.000+02:00</published><updated>2007-08-08T11:15:27.092+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>AOP in J2EE, Tomcat tutorial</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;Since we released AspectWerkz &lt;a href="http://aspectwerkz.codehaus.org/releases.html"&gt;1.0 beta 1&lt;/a&gt; some days ago, with a real cool feature we had in our roadmap since the very begining, I have written a small tutorial for you to practice.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://aspectwerkz.codehaus.org/"&gt;AspectWerkz&lt;/a&gt; now supports the concept of an AOP container. No other AOP framework out there supports this idea &lt;i&gt;in the way we do it&lt;/i&gt; : class loader aware and cross platform.&lt;br /&gt;It is now possible to have an &lt;b&gt;AOP deployment descriptor&lt;/b&gt; within your application, and interesting point in an AOP world: have several of them, all along your application.&lt;br /&gt;&lt;br /&gt;The standard way of doing so is to use &lt;b&gt;META-INF/aop.xml&lt;/b&gt; files, and for some container like Tomcat it is possible to use &lt;b&gt;WEB-INF/aop.xml&lt;/b&gt; as well.&lt;br /&gt;If you add a jar file in your application and this jar file contains a META-INF/aop.xml descriptor, it will also be taken into account. It is thus easy to distribute aspect jar file with predefined behavior.&lt;br /&gt;&lt;br /&gt;You can drop Aspect classes at your system classpath and those will affect all deployed application, AND, you can have Aspect classes within your web application that will only affect this specific deployed application.&lt;br /&gt;&lt;br /&gt;Read the tutorial &lt;a href="http://docs.codehaus.org/display/AW/How+to+integrate+Aspects+in+J2EE+apps+with+aop.xml"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Note that if an Aspect is deployed within an application, the pointcut it defines will be limited by the &lt;b&gt;class loader isolation principle&lt;/b&gt;. Even if the pointcut assumes to match all method in all classes, it will only "see" all methods in classes loaded by this classlaoder and the child classloader.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://docs.codehaus.org/display/AW/How+to+integrate+Aspects+in+J2EE+apps+with+aop.xml"&gt;Try it now !&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-7234291338873833231?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7234291338873833231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7234291338873833231'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2004/07/aop-in-j2ee-tomcat-tutorial.html' title='AOP in J2EE, Tomcat tutorial'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-5532926522021972724</id><published>2004-05-30T18:11:00.000+02:00</published><updated>2007-08-08T11:15:27.092+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>Aspect Oriented IT fits BEA Liquid Computing</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Last week I attended &lt;a href="http://www.bea.com/eworld/index.htm"&gt;eWorld&lt;/a&gt;, mainly as a speaker. It was a unique view on BEA's &lt;b&gt;Liquid Computing&lt;/b&gt; vision kick off. &lt;b&gt;Where AOP fits in Liquid Computing vision ?&lt;/b&gt; Why should we go on simplifying the AOP stack as our motto in AspectWerkz : full Java, J2EE integration, Java 1.5 readyness, value added Aspects, tool ecosystem... ?&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;b&gt;Liquid Computing is&lt;/b&gt; the vision for a &lt;a href="http://www.bea.com/framework.jsp?CNT=liquid_computing.htm&amp;FP=/content/solutions/resource/soa/"&gt;Simplified Enterprise Computing&lt;/a&gt;. Don't think it is SOA. SOA is what BEA provides today with Platform 8.1, but tomorrow, it will be something more.&lt;br /&gt;&lt;i&gt;"The time has come for a comprehensive vision for IT. One that improves business responsiveness by simplifying enterprise computing."&lt;br /&gt;- Alfred S. Chaung&lt;br /&gt;Founder, Chairman &amp;amp; CEO&lt;br /&gt;BEA Systems, Inc.&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Reading more in BEA's Liquid Computing &lt;a href="http://www.bea.com/content/news_events/white_papers/BEA_Liquid_Computing.pdf"&gt;pdf brochure&lt;/a&gt;, I found it is good exercise to emphasys on specific topics where &lt;b&gt;AOP is a key way to enable Liquid Computing&lt;/b&gt;.&lt;br/&gt;&lt;br /&gt;&lt;i&gt;Note: the following is my own personnal vision and does not illustrates any official statement from &lt;a href="http://wwww.bea.com"&gt;BEA&lt;/a&gt;.&lt;/i&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;b&gt;Active Adaptability&lt;/b&gt;: &lt;i&gt;"Dynamic instrumentation and monitoring will track, display and manage system capabilities. At the core, the infrastructure&lt;br /&gt;is constantly tuning itself in the service of the business."&lt;/i&gt;&lt;br /&gt;&lt;br/&gt;&lt;br/&gt;&lt;br /&gt;Self healing policies can be easily builded on Dynamic Aspects.&lt;br/&gt;&lt;br /&gt;Dynamic weaving capabilities of BEA JRockit and AspectWerkz &lt;b&gt;has been demonstrated&lt;/b&gt; at our eWorld session, activating JMX reporting at runtime, in a web service / pojo based application running on 8.1 and a not yet released version of JRockit.&lt;br /&gt;&lt;br/&gt;&lt;br/&gt;&lt;br /&gt;We can extend the demo to dynamically weave a caching aspect at our web service level to provide a business specific self healing policy. All this stack could be builded in 1 day based on AspectWerkz dynamic AOP stack, no matter the application complexity itself.&lt;br /&gt;&lt;br/&gt;&lt;br/&gt;&lt;br /&gt;This is active adaptabilty now, on Platform 8.1. The same key idea can be enabled today on your older WebLogic Server 6.1, or on your Tomcat stack - whatever is running Java 1.3+ can be handled by AspectWerkz Dynamic AOP.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;b&gt;Enterprise compatibility&lt;/b&gt;: &lt;i&gt;"the application just plugs into a&lt;br /&gt;compatibility layer [Compatibility Fabric], rapidly delivering and sharing new&lt;br /&gt;capability."&lt;/i&gt;&lt;br /&gt;&lt;br/&gt;&lt;br/&gt;&lt;br /&gt;Cross cutting requirements can be addressed rapidly by AOP technologies.&lt;br/&gt;&lt;br /&gt;&lt;b&gt;The AOP stack is the compatibility fabric&lt;/b&gt; of the cross cutting concerns inherent to all software applications. Thinking AO enables to decouple this concern and address it as a single requirement, allowing change at this level only, to provide the same functionnality with a different underlying implementation but without any change in the application that serves your business.&lt;br /&gt;&lt;br/&gt;&lt;br/&gt;&lt;br /&gt;At our session we have demonstrated an authentication / authorization service implemented in AO. The underlying implementation was using JAAS. It can now be easily enhanced to provide an implementation specific to any IT environment, be it JAAS compatible or not, be it LDAP based, or be it with very specific policies. This software complexity is reduced to the Aspect, and does not impact the functionnal requirements of the application.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;It is not WebLogic specific. The same AO stack can be used to secure a Swing based application as well.&lt;br /&gt;&lt;br/&gt;&lt;br/&gt;&lt;br /&gt;The AO implementation brings &lt;b&gt;cross application security live in a minute, no matter the complexity of the application(s) and the IT environment&lt;/b&gt;. For more complex requirements, this AO implementation can be enhanced with business specific rules (application flow, business rules, dynamic activation of policies) by adding aspects on the stack, where those are needed.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;b&gt;Breakthrough Productivity&lt;/b&gt;: A powerfull engine that extends self-service &lt;i&gt;"into meaningful application functionality. It gives business owners&lt;br /&gt;the ability to make changes to processes and capabilities on their own.[..] There’s no downtime, no need for traditional re-programming and, because IT maintains governance, no loss of IT control."&lt;/i&gt;&lt;br /&gt;&lt;br/&gt;&lt;br/&gt;&lt;br /&gt;Self servicing can be enabled thru a dynamic AO stack. Deploy a new aspect that encapsulates a new functionnal requirement, and have it inserted in your running application with dynamic AO, and metadata driven programming.&lt;br /&gt;&lt;br/&gt;&lt;br/&gt;&lt;br /&gt;Metadata driven AOP brings self-servicing to a new IT control era, where model driven architecture can be unleashed by an AO based service stack. Add a cache on service methods, no matter the application was designed for a cache requirements. Change this cache to be distributed, single user based, or for the flow of this specific use-case. Add a JMX reporting layer on it to control cache hit count. Remove this cache when system is not under load.&lt;br/&gt;&lt;br /&gt;At our &lt;i&gt;AOP: SOA for the application&lt;/i&gt; eWorld session, we have demonstrated hot acitvation of a caching aspect while application was live. We have extended the cache scope to some other business method at a later point, just by using a tool and 3 mouse clicks.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;AO solves a traditionnal multi-step IT project iterations in a disruptive way.&lt;/b&gt; Pick vendor certified aspects, hotdeploy them with tools and have them bringing your IT to the next generation of your requirements without any downtime. This is Breakthrough Productivity. I would have wrote Disruptive Productivity.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;b&gt;Conclusion&lt;/b&gt;: Go live with AO !&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;The three key concepts of Liquid Computing are part of Aspect Oriented Technologies and especially full java dynamic AOP stacks like AspectWerkz. A good aspect set, tools ecosystem and manageability of the AO layer itself disrupts the classical vision of IT projects. "Design, develop, QA, deploy" is turned into an on demand self servicing layer allowing you to concentrate on your assets. &lt;b&gt;Dynamic AO brings Active Adaptability, address Enterprise Compatibilty and provides Disruptive Productivity.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;The AO ways decorrelates your IT complexity from the complexity to address new requirements.&lt;/b&gt; Changes are made easy.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;I hope this high level view on AO, the issues we aim to address everyday as an AOP stack builder, and the demo we can do today convince you that &lt;b&gt;Aspect Oriented Technology is a key piece of the Liquid Computing puzzle&lt;/b&gt;.&lt;br /&gt;&lt;br/&gt;&lt;br/&gt;&lt;br /&gt;Up to us to bring all this value to you now.&lt;br/&gt;&lt;br /&gt;Make it live today with AspectWerkz. Ask for docs, demos, support, articles, tutorials. Join us in this aspect and tool ecosystem building.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://aosd.org"&gt;Go live with AO&lt;/a&gt;. &lt;a href="http://www.bea.com"&gt;Go live with Liquid Computing&lt;/a&gt;. &lt;a href="http://aspectwerkz.codehaus.org"&gt;Go live with AspectWerkz&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-5532926522021972724?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/5532926522021972724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/5532926522021972724'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2004/05/aspect-oriented-it-fits-bea-liquid.html' title='Aspect Oriented IT fits BEA Liquid Computing'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-8714641099315697528</id><published>2004-05-27T10:20:00.000+02:00</published><updated>2007-08-08T11:15:27.092+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>AOP integration in Tomcat 5</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;On several recent ML post AspectWerkz users complained about getting into troubles when hooking in AOP in Tomcat 5. &lt;a href="http://jroller.com/comments/mungoknotwise/Weblog/integrating_aspectwerkz_and_tomcat5"&gt;Steve provided good feedback &lt;/a&gt;but ... there is off course a damned better way to handle that !&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;Here is a little hands on that gives the idea for a 5 minutes shot.&lt;br /&gt;Pretty much straigthforward based on&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;cvs head ie the next 1.0  beta and not 0.10&lt;/li&gt;&lt;br /&gt;&lt;li&gt;no integration detail, just some bin/aspectwerkz.bat magic&lt;/li&gt;&lt;br /&gt;&lt;li&gt;aop.xml deployed &lt;b&gt;wihin&lt;/b&gt; the target application itself&lt;/li&gt;&lt;br /&gt;&lt;li&gt;a little fix in a strange Manifest.mf file in qdox-1-3.jar&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;I was concerned about this issue and had an hectic face to face burger discussion with Jonas about "my" so called seamless integration of AOP... I needed to sit down on that and hack, too bad for the jet lag in this crazy GMT 9h &lt;a href="http://www.bea.com/eworld/index.htm"&gt;far from home SF BEA eWorld clock&lt;/a&gt;.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;Since the Codehaus had to migrate some CVS details today, the little qdox.jar fix that is needed cannot be commited, but just do it yourself if you want to go on with those explanations. Or wait tomorrow since Bob the despot is around there as well... He'll fix that for me if he is not too busy on the new &lt;a href="http://controlhaus.org/"&gt;Codehaus / BEA BeeHive stuff there&lt;/a&gt;.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;So I took a &lt;a href="http://jakarta.apache.org/tomcat/tomcat-5.0-doc/index.html"&gt;Tomcat 5&lt;/a&gt; from Apache, unzipped the stuff on my windows box.&lt;br /&gt;I checked that it was fine with the &lt;b&gt;bin/startup.bat&lt;/b&gt; and shutted it down to spread AOP in.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;Then I made sure that &lt;i&gt;AW *cvs head*&lt;/i&gt; was builded, and &lt;b&gt;ASPECTWERKZ_HOME&lt;/b&gt; and &lt;b&gt;JAVA_HOME&lt;/b&gt; was set.&lt;br /&gt;&lt;!--AW cvs head provide a usefull stuff to deploy Aspects alongside the application itself and avoid this single monolythic xml deployement descriptor. Not documented yet etc but just go on if you want check that now.--&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;I decided to give a try to this integration issue and decided to start with a silly tracing aspect that is sitting in AW samples (&lt;i&gt;examples.logging.JavaLoggingAspect&lt;/i&gt;). I then builded the samples with a maven target (&lt;b&gt;aspectwerkz:samples:compile&lt;/b&gt;)and had a new &lt;b&gt;target/aspectwerkz-samples.jar&lt;/b&gt; ready to use.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;Then I just opened this &lt;b&gt;bin/catalina.bat&lt;/b&gt; that is actually starting things and added this just before the comment:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;        rem Execute Java with the applicable properties&lt;br /&gt;        ...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;to have AOP seamless integration:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;        set CLASSPATH=%CLASSPATH%;%ASPECTWERKZ_HOME%\target\aspectwerkz-samples.jar&lt;br /&gt;        set _EXECJAVA=%ASPECTWERKZ_HOME%\bin\aspectwerkz.bat&lt;br /&gt;        set JAVA_OPTS=%JAVA_OPTS% -Daspectwerkz.transform.verbose=false&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So as you see I go with the &lt;b&gt;bin\aspectwerkz.bat&lt;/b&gt; way, which is the easiest kick off stuff we provide, with &lt;i&gt;adaptive behavior&lt;/i&gt; regarding Java version detection etc, even if when it comes to production usage I would rather use some &lt;b&gt;&lt;a href="http://aspectwerkz.codehaus.org/online.html#BEA%20JRockit"&gt;JRockit VM&lt;/a&gt;&lt;/b&gt;.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;You will have noticed that I just added my silly tracing sample aspect in the CLASSPATH and &lt;b&gt;replaced bin/java  call by bin/aspectwerkz.bat&lt;/b&gt; - not taking care about the details.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;From there,  Tomcat started up *almost* fine. The AW/lib/qdox-1.3.jar has a strange Manifest.mf file that Tomcat complains about... Just dropped this Manifest.mf from the qdox.jar and we are up and running with AOP online mode / class load time weaving / AOP container from cvs head.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;Time to bind my system level tracing Aspect to some application.&lt;br /&gt;I did a try by writting a 5 lines &lt;b&gt;aop.xml&lt;/b&gt; file (actually copy pasted it from AW samples/hotdeployed.xml) and dropping it in Tomcat samples in webapps\servlets-examples\META-INF\aop.xml, since this is what we now provided in cvs head (and not in 0.10).&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;Once that done, nothing happened. I added some tracing stuff (-Daspectwerkz.transform.verbose=true) and figured out (with a bit of pain since toString() on Tomcat classloader is damned too much verbose..) that Tomcat classloader is not taking this META-INF topmost stuff into account.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;I decided to move that to the WEB-INF/classes path, so ending up in &lt;b&gt;webapps\servlets-examples\WEB-INF\classes\META-INF\aop.xml&lt;/b&gt; [file below]. I ll double check that later since this WEB-INF/.../META-INF is a bit strange there.&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;and here it is (once I browsed to http://localhost:8080/servlets-examples/)&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;METHOD_EXECUTION--&gt; filters.ExampleFilter::doFilter&lt;br /&gt;  METHOD_EXECUTION--&gt; HelloWorldExample::doGet&lt;br /&gt;  METHOD_EXECUTION&lt;-- HelloWorldExample::doGet&lt;br /&gt;  METHOD_EXECUTION--&gt; filters.ExampleFilter::toString&lt;br /&gt;  METHOD_EXECUTION&lt;-- filters.ExampleFilter::toString&lt;br /&gt;METHOD_EXECUTION&lt;-- filters.ExampleFilter::doFilter&lt;br /&gt;METHOD_EXECUTION--&gt; filters.ExampleFilter::doFilter&lt;br /&gt;  METHOD_EXECUTION--&gt; SessionExample::doGet&lt;br /&gt;    METHOD_EXECUTION--&gt; listeners.SessionListener::sessionCreated&lt;br /&gt;      METHOD_EXECUTION--&gt; listeners.SessionListener::log&lt;br /&gt;      METHOD_EXECUTION&lt;-- listeners.SessionListener::log&lt;br /&gt;    METHOD_EXECUTION&lt;-- listeners.SessionListener::sessionCreated&lt;br /&gt;  METHOD_EXECUTION&lt;-- SessionExample::doGet&lt;br /&gt;  METHOD_EXECUTION--&gt; filters.ExampleFilter::toString&lt;br /&gt;  METHOD_EXECUTION&lt;-- filters.ExampleFilter::toString&lt;br /&gt;METHOD_EXECUTION&lt;-- filters.ExampleFilter::doFilter&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;aop.xml&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;![CDATA[&lt;br /&gt;&amp;lt;!DOCTYPE aspectwerkz PUBLIC&lt;br /&gt;    "-//AspectWerkz//DTD//EN"&lt;br /&gt;    "http://aspectwerkz.codehaus.org/dtd/aspectwerkz.dtd"&amp;gt;&lt;br /&gt;&amp;lt;aspectwerkz&amp;gt;&lt;br /&gt;    &amp;lt;system id="sample"&amp;gt;&lt;br /&gt;        &amp;lt;aspect class="examples.logging.JavaLoggingAspect"&amp;gt;&lt;br /&gt;            &amp;lt;pointcut name="pc" expression="execution(* *..*.*(..))"/&amp;gt;&lt;br /&gt;            &amp;lt;advice name="logMethod" type="around" bind-to="pc"/&amp;gt;&lt;br /&gt;        &amp;lt;/aspect&amp;gt;&lt;br /&gt;    &amp;lt;/system&amp;gt;&lt;br /&gt;&amp;lt;/aspectwerkz&amp;gt;&lt;br /&gt;]]&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;br /&gt;We are almost there and 1.0 will be damned good don't you think ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-8714641099315697528?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/8714641099315697528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/8714641099315697528'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2004/05/aop-integration-in-tomcat-5.html' title='AOP integration in Tomcat 5'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-7895232465881254673</id><published>2004-05-20T13:56:00.000+02:00</published><updated>2007-08-08T11:15:27.092+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>See you at eWorld</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;I am moving to San Francisco for &lt;a href="http://www.bea.com/eworld/index.htm"&gt;BEA eWorld&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Jonas and I will give several sessions / demos about AOP in BEA JRockit and the BEA WebLogic Platform, including WebLogic Server and WebLogic WorkShop.&lt;br /&gt;&lt;br /&gt;In case you are in the area but do not attend to eWorld, just join the &lt;a href="http://dev2dev.bea.com/community/usergroups/sv.jsp"&gt;Silicon Valley BEA User Group&lt;/a&gt; since we will be there on wedsnesday as well.&lt;br /&gt;&lt;br /&gt;We have been under the radar since AOSD, so be ready for something disruptive !&lt;br /&gt;I will post a viewlet of some parts of the demo in some weeks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-7895232465881254673?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7895232465881254673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7895232465881254673'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2004/05/see-you-at-eworld.html' title='See you at eWorld'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-1016043247964255845</id><published>2004-02-25T23:15:00.000+01:00</published><updated>2007-08-08T11:15:27.093+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>dynamic AOP and HotSwap</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;In a recent &lt;a href="http://jboss.org/jbossBlog/blog/bburke/?permalink=Dynamic+AOP+and+Hot+Swap%3"&gt;post&lt;/a&gt; Bill Burke describes his preliminary research as regards HotSwap usage for dynamic AOP.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;He first defines in a few words what is dynamic AOP and what is the HotSwap or class redefinition in Java. Then he briefly describes how JBossAOP handles&lt;br /&gt;dynamic AOP thru a "prepare" phase, and gives some measurements about the overhead he obtained when using the &lt;i&gt;-Xdebug&lt;/i&gt; mode during a JBoss startup sequence, an option required to activate the HotSwap API under Java 1.4.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;I would like to give some feedback on his post, since I have been working in the dynamic AOP field for some time now thru my involvment in &lt;a href="http://aspectwerkz.codehaus.org"&gt;AspectWerkz &lt;/a&gt;and&lt;br /&gt;thru a research paper and a runtime weaving prototype I did for the Dynamic Aspect Workshop for &lt;a href="http://aosd.net/conference.php"&gt;AOSD 2004&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;I think dynamic AOP has to be splitted in two categories:&lt;ul&gt;&lt;br /&gt;&lt;li&gt;rearranging AOP constructs at existing join points&lt;/li&gt;&lt;br /&gt;&lt;li&gt;redefining join points (we could generalize with redefining pointcuts, or even redefining the whole AOP system)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;b&gt;The first category&lt;/b&gt; is fully supported by AspectWerkz. It is possible to rearrange (add/remove/reorder) aspects and advices at runtime providing that the join point(s) where the construct(s) is(are) bounded is(are) already existing as a result of the transformation phase, no matter it is a post compilation phase (ala AspectJ) or a class load time weaving.&lt;br /&gt;&lt;br/&gt;&lt;br/&gt;&lt;br /&gt;As regards introductions, AspectWerkz allows to change the introduction implementation (thus the implementation of the added methods) at runtime (swap mixin implementation), again providing that the binding (which mixin(s) applies to which class(es)) is already existing.&lt;br /&gt;&lt;br/&gt;&lt;br/&gt;&lt;br /&gt;This first category relies on the framework capabilities and several means allow to minimize the overhead when f.e. no advice is bounded at a particular join point.&lt;br /&gt;&lt;br/&gt;The overhead even if minimal cannot be avoided here. Even reduced to a method call that does a boolean check, this is not the original bytecode instruction sequence which is running when the join point is reached.&lt;br /&gt;&lt;br/&gt;This category is the one supported by JBoss as well.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;b&gt;The second category&lt;/b&gt; is the most interesting one. Redefining join points (thus pointcuts) allows - in theory - to add new AOP construct at new locations (join points) in the running application.&lt;br /&gt;This should come with the guarantee that there is &lt;ul&gt;&lt;br /&gt;&lt;li&gt;absolutely no runtime overhead prior the "activation" of the new join points, and no overhead after "deactivation"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;no assumption that the join points are known before activation (especially at class load time / application deployment time)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;I think that this second category requires runtime weaving capabilities from the AOP framework (as long as the AOP frameworks rely on bytecode instrumentation).&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;A use-case for join point redefinition at runtime is some &lt;i&gt;on-demand profiling&lt;/i&gt; tool that needs to activate profiling only when necessary, for a limited time, and without any overhead prior to activation, and without specific knowledge on what will be profiled at application deployment time.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;As Bill explains, JBossAOP "addresses" the second category by providing a way to declare pointcuts with nothing bounded. This definition is used at class post compilation / class load time and is what Bill calls the "prepare phase".&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;The overhead involved by such an approach is not measured by Bill, but is conceptually limited to a boolean check and a method level indirection, this for each pointcuts declared for future activation.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;I don't think this approach is really adressing dynamic AOP. The overhead at a single join point level is indeed minimal, but we might have a need to declare &lt;b&gt;very invasive pointcuts&lt;/b&gt; to allow further on-demand profiling (or other AOP based constructs), and thus this minimal overhead might occurs trillions times in the running application (potentially at each method call, each method execution and each field access).&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;b&gt;So what might be a better solution for true runtime join point redefinition ?&lt;/b&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;As Bill quotes, HotSwap API allows to change the implementation of method / constructor bodies of a class at runtime, and inject them in the running JVM.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;There are some interesting things to consider, that Bill forgot to mention and led him to some approximative statements (I forgot to told him ;-) )&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;HotSwap is an optional JVM capability. Some JVMs do not have HotSwap support (f.e IBM JRE)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;HotSwap might forbid class schema change. It might not be possible to add new methods (even private ones) to a class when redefining it. This schema change support is itself an optional HotSwap capabilitiy. Currently no JVM supports schema change, but the API does not restricts it.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;HotSwap exists since Java 1.4, requires -Xdebug mode, and can only be called from a remote JVM (well almost, read below)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;HotSwap is slightly modified in Java 1.5 and does not requires -Xdebug mode&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;So considering what HotSwap can do, and what bytecode instrumentation oriented AOP frameworks do to enable AOP in Java OOP, especially to enable dynamic AOP constructs of the first category I described previously, HotSwap seems very attractive, but is currently missing key things.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;There might be some ways to address the problems thought...&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;The fact that the java level HotSwap API as described in Java 1.4 JPDA requires a remote JVM attached to the running JVM (or a JPDA LaunchingConnector) can be avoided by implementing a JNI layer on top of the C-level HotSwap API so that HotSwap is available at Java level, without coupling with the JPDA architecture: no need for a remote JVM, and no need for a LaunchingConnector (that would forbid further remote dedbugging ...).&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;I describe the advantage of this JNI glue in the work I submitted to the DAW AOSD 2004, and call it "&lt;b&gt;in-process HotSwap&lt;/b&gt;". We have it in Java 1.5 so there is no problem on this side anymore.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;The "in-process HotSwap" - Java level API - is standardized in Java 1.5 thru the JSR-163. &lt;b&gt;Java 1.5 will not requires -Xdebug&lt;/b&gt; to enable the HotSwap API. As you might have understood, the HotSwap API is not that coupled to the JVM debugging capabilities, althought the API was part of the same block in Java 1.4.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;The -Xdebug overhead issue raised by Bill is fixed (though I would like to do measurement of what -Xjavaagent in Java 1.5 involves).&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;b&gt;The schema change support &lt;/b&gt;would be interesting for AOP join point redefinition, since as Bill explains, AOP frameworks that allow dynamic AOP (AspectWerkz, JBossAOP) require some structural changes to bring in enough indirection level between the join point (in the weaved classed) and the AOP constructs (handled by the AOP framework internals).&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;A simple bytecode decompilation of an AspectWerkz weaved class with execution pointcut will show you that AspectWerkz has added a wrapper method to handle the join point and renamed the original method, since it will be called by the framework as a result of the execution join point construct.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;code language="java"&gt;&lt;br /&gt;class Foo {&lt;br /&gt; &lt;br /&gt;  public void doAction() {&lt;br /&gt;    // the bytecode for your code&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;can appeared transformed after the weaving as (approximation)&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;code language="java"&gt;&lt;br /&gt;class Foo {&lt;br /&gt; &lt;br /&gt;  JoinPointManager __AW_joinPointManager =...&lt;br /&gt; &lt;br /&gt;  public void doAction() {&lt;br /&gt;    __AW_joinPointManager.proceed(this, "doAction()");&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  private void __AW_doAction() {&lt;br /&gt;    // the bytecode for your code&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;As a consequence, if we would like to be able to redefine (f.e. simply define) the "* Foo.doAction(..)" execution pointcut at runtime, we would need schema change support. The schema change support might not be needed though for caller side constructs.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;The problem is thus more a HotSwap API problem, tight to current JVM limited capabilities.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;I think that HotSwap - if largely adopted by JVM implementation - can be a good enabler for dynamic AOP as regards pointcut redefinition at runtime. I don't think that the debate is limited to a -Xdebug option, and Java 1.5 demonstrates it.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;In the work I submitted to the DAW AOSD 2004, I describe how we are able in an AspectWerkz prototype to redefine pointcuts at runtime &lt;u&gt;even without schema change support&lt;/u&gt;.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;I agree that this solution (which I will publish later in my blog) is itself not optimal but I was able to demonstrates the feasability of such an on-demand AOP approach, instead of an invasive pointcut definition, that might itself lead to a globally large overhead. I was able to do the prototype with Java 1.4, and it will be even more easy to do with Java 1.5 and the standardized "in-process" Java level HotSwap.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;I will debate if HotSwap is good for dynamic AOP at the DAW AOSD workshop, and you bet, some more JVM level AOP support might be crucial on this area.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;So far so good, what do we wanted ?&lt;/b&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Probably not a low level "addPointcut(&amp;lt;pointcut pattern&amp;gt;, Class klass)" API with a controlled and guaranteed minimal (or even zero) global overhead prior activation, but maybe a more usefull system wide control like "addAOPSystem(ClassLoader klassScope, SystemDefinition definition)" to be able to activate AOP constructs as a whole, at runtime, and leaving the internal recipe of it to AOP solutions and JVM implementations ...&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Right ?&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-1016043247964255845?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/1016043247964255845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/1016043247964255845'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2004/02/dynamic-aop-and-hotswap.html' title='dynamic AOP and HotSwap'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-4107635080577903965</id><published>2004-02-17T13:02:00.000+01:00</published><updated>2007-08-08T10:38:45.266+02:00</updated><title type='text'>It's life</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;Most of my blog' fans (do I have blog fans ?) might think I am hacking AOP constructs and weaving architecture all the day.&lt;br /&gt;&lt;br /&gt;Well I have to admit that this is not exactly true, thought almost true ;-).&lt;br /&gt;&lt;br /&gt;These days I had to hack a small app that gather data from a WebLogic Server farm (more than 60 servers) by querying runtime JMX mbean so that we can then generate some graph to feed a NOC intranet.&lt;br /&gt;Rather simple to play with JMX, have a fault tolerant client that does not crash when one instance is downed, and be able to handle at least 10 Go log daily.&lt;br /&gt;&lt;br /&gt;For now the logs are parsed and consolidated as regular file. I would have liked to use a MySQL or HSQL database instead of parsing Go of files... but well, it is a customer driven story.&lt;br /&gt;&lt;br /&gt;Here is a pretty cool graph that I got using &lt;a href="http://www.jfree.org/jfreechart/index.html"&gt;JFreeChart&lt;/a&gt; that shows some http session data history grabbed from a subset of the farm.&lt;br /&gt;Fun ?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.codehaus.org/people/avasseur/downloads/20040217_graph_session.html" onclick="window.open('http://blogs.codehaus.org/people/avasseur/downloads/20040217_graph_session.html','popup','width=1600,height=1170,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"&gt;&lt;img alt="Click to enlarge" src="http://blogs.codehaus.org/people/avasseur/downloads/20040217_graph_session_small.jpg" width="400" height="292" border="0" /&gt;&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-4107635080577903965?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/4107635080577903965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/4107635080577903965'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2004/02/its-life.html' title='It&apos;s life'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-742163820424496733</id><published>2004-01-06T11:51:00.000+01:00</published><updated>2007-08-08T11:15:27.093+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>AspectWerkz AOP - new pointcut expression implementation</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;Today I finished my implementation of the new &lt;a href="http://aspectwerkz.codehaus.org/"&gt;AspectWerkz&lt;/a&gt; pointcut expression language.&lt;br /&gt;&lt;br /&gt;AspectWerkz had already a good usability level as regards pointcut expression. Most of the needed syntax to bind pointcuts with advice or introduction had been implemented by &lt;a href="http://blogs.codehaus.org/people/jboner/"&gt;Jonas&lt;/a&gt;, based on an algebra backed by &lt;a href="http://jakarta.apache.org/commons/sandbox/jexl/"&gt;Jexl&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;/** @Aspect perJVM */&lt;br /&gt;public class MyAspect extends Aspect {&lt;br /&gt;&lt;br /&gt;  /** @Execution com.*.Foo.set(..) */&lt;br /&gt;  Pointcut pc1;&lt;br /&gt;&lt;br /&gt;  /** @Execution com.*.Foo.get(..) */&lt;br /&gt;  Pointcut pc2;&lt;br /&gt;&lt;br /&gt;  /** @Around pc1 OR pc2 */&lt;br /&gt;  Object advice(Joinpoint jp) { .. }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The previous implementation supported the complete AND / OR / NOT algebra:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;pc1 OR pc2&lt;br /&gt;pc1 AND ( pc2 OR pc3 )&lt;br /&gt;pc1 AND NOT pc2&lt;br /&gt;...&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;And some synonyms were also provided, like &amp;&amp;amp;, || and !, and other lowercased operators (or, and, not).&lt;br /&gt;&lt;br /&gt;What I found bad with this Jexl based implementation was the following:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;very hard to add new syntax operator (like IN for cflow pointcut composition)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;added a programmed AST on top of the Jexl AST, but without providing a true Visitor pattern exposure&lt;/li&gt;&lt;br /&gt;&lt;li&gt;lost boolean expression optimization f.e. needed to evaluate all pointcut in an OR expression like pc1 OR pc2 even if pc1 matched&lt;/li&gt;&lt;br /&gt;&lt;li&gt;used only a tiny part of Jexl capabilities (Jexl is the evaluation engine of Velocity)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;After some digging in Jexl extensibility I decided to start my own boolean expression implementation based on a &lt;a href="https://javacc.dev.java.net/doc/JJTree.html"&gt;JJTree&lt;/a&gt; grammar. In two days I had the complete operator set I needed, and a true Visitor pattern exposure.&lt;br /&gt;&lt;br /&gt;In other two days I was able to refactor Jonas' work to plug my JJTree implementation in AspectWerkz. It allowed to solve a pending issue we had in the 0.9.RC1 release as regards cflow support for model 2 JSR-175 style Aspects.&lt;br /&gt;&lt;br /&gt;Now we have many advantages at the hand:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;no impact for the user&lt;/li&gt;&lt;br /&gt;&lt;li&gt;faster, especially when boolean optimizations are possible&lt;/li&gt;&lt;br /&gt;&lt;li&gt;cleaner, with Visitor pattern&lt;/li&gt;&lt;br /&gt;&lt;li&gt;more usable: with the new cflow composition thru the IN operator&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;From a user point of view this grammar add a new operator for cflow: the IN and NOT IN (or ! IN etc ...).&lt;br /&gt;It allows to express in a natural way the pointcut expression with cflow.&lt;br /&gt;&lt;code&gt;pc1 OR pc2 IN cflow1&lt;/code&gt;&lt;br /&gt;is then different from&lt;br /&gt;&lt;code&gt;( pc1 OR pc2 ) IN cflow1&lt;/code&gt;&lt;br /&gt;[ the previous syntax was not natural : pc1 &amp;&amp;amp; cflow1 ]&lt;br /&gt;&lt;br /&gt;In the next month, I should have time to add the needed glue to support several level of cflow composition - since this is already supported by our JJTree grammar :&lt;br /&gt;&lt;code&gt;pc1 IN ( cflow1 OR ! cflow2 )&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This time, the trick will be more at the runtime during the joinpoint evaluation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-742163820424496733?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/742163820424496733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/742163820424496733'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2004/01/aspectwerkz-aop-new-pointcut-expression.html' title='AspectWerkz AOP - new pointcut expression implementation'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-2286173091420528928</id><published>2003-12-16T20:41:00.000+01:00</published><updated>2007-08-08T11:15:27.093+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>An awfull backend for AOP vs AspectWerkz (part 1)</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;Today while having my daily googling time on AOP, I found a 25 pages article about &lt;a href="http://javalab.cs.uni-bonn.de/research/jmangler/jmangler.html"&gt;JMangler&lt;/a&gt;, a class load time weaving solution I had &lt;a href="http://blogs.codehaus.org/people/avasseur/archives/000120_an_old_crap_we_dont_care_about_anymore.html"&gt;already bloged&lt;/a&gt; about.&lt;br /&gt;&lt;br /&gt;The paper is &lt;a href="http://javalab.cs.uni-bonn.de/data2/papers/jmangler/jmanglerChapterPreprint.pdf"&gt;here&lt;/a&gt; as a PDF.&lt;br /&gt;&lt;br /&gt;I am rather surprised when I read that and mirror it with the fact that AOP would gain from massive adoption. I will defend my position in a very near future, but i could not avoid this flameware snip.&lt;br /&gt;&lt;br /&gt;JMangler quotes itself as &lt;i&gt;A Powerful Back-End for Aspect-Oriented Programming&lt;/i&gt;. And you might even buy a Prentice Hall book in 2004 to learn that.&lt;br /&gt;I will save your time and money, by explaining you (again) why AOP does not gain from such a low concrete achievement strategy.&lt;br /&gt;&lt;br /&gt;Just to let you think about by your own while I am writting my flameware:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Will you buy a book in 2004 to learn that JMangler is used in AspectWerkz ? This is false: JMangler ha&lt;b&gt;d&lt;/b&gt; been in AspectWerkz but has been kicked out since july 2003 and we are happy.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Have your read that AspectWerkz hooking provides native support for BEA JRockit ?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Have you already worked with IBM JRE class loading scheme&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Should a &lt;i&gt;powerfull&lt;/i&gt; solution - that claim to be compliant with J2EE - fail under WebSphere environments ?&lt;br /&gt;&lt;li&gt;Should a &lt;i&gt;powerfull&lt;/i&gt; solution be SUN JRE 1.4 centric ?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Should it hang when used in J2EE architectures ?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Should it run only in -Xdebug mode, with two JVM side by side ?&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Is that a joke ? Abusing the AOP hype in the Academic sphere ?&lt;br /&gt;Software is a moving thing, and AspectWerkz makes AOP move fast. Be ready.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-2286173091420528928?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/2286173091420528928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/2286173091420528928'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2003/12/awfull-backend-for-aop-vs-aspectwerkz.html' title='An awfull backend for AOP vs AspectWerkz (part 1)'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-7158986388570651018</id><published>2003-11-21T07:37:00.000+01:00</published><updated>2007-08-08T11:15:27.093+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>AOP debugging makes its show</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.jroller.com/page/sgm"&gt;Samuel&lt;/a&gt; has done a viewlet where he demonstrates how to easily debug an application and its aspects with &lt;a href="http://aspectwerkz.codehaus.org"&gt;AspectWerkz&lt;/a&gt; from within Eclipse.&lt;br /&gt;&lt;br /&gt;If you did not yet understood how standard and easy it was from my first &lt;a href="http://blogs.codehaus.org/people/avasseur/archives/000135.html"&gt;annoucement&lt;/a&gt;, you have to &lt;a href="http://www.jroller.com/page/sgm/20031121#debugging_aop_projects_with_ecplise"&gt;watch it now !&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;All is explained step by step. This is a definitely a things to work with.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-7158986388570651018?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7158986388570651018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7158986388570651018'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2003/11/aop-debugging-makes-its-show.html' title='AOP debugging makes its show'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-4063610598347324335</id><published>2003-11-12T11:00:00.000+01:00</published><updated>2007-08-08T11:15:27.094+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>AspectWerkz announces support for BEA JRockit</title><content type='html'>&lt;p&gt;(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The latest snapshot of AspectWerkz is now supporting &lt;a href="http://www.bea.com/framework.jsp?CNT=index.htm&amp;FP=/content/products/jrockit"&gt;JRockit JVM&lt;/a&gt; for on the fly weaving.&lt;br /&gt;&lt;/p&gt;By using JRockit &lt;a href="http://edocs.bea.com/wljrockit/docs81/jmapi/index.html"&gt;JMAPI&lt;/a&gt; capabilities, AspectWerkz brings AOP one step ahead by officially supporting all major JVM (Sun, IBM, BEA). This allows to hook AspectWerkz in a seamless way to provide dynamic on the fly weaving of Aspects no matter your environment.&lt;br /&gt;&lt;br /&gt;JRockit could not be supported before due to lack of HotSwap support and a limitation that forbids overriding of java.lang.ClassLoader with a -Xbootclasspath option. Users had to use offline mode until there.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;The extension will be core part of &lt;b&gt;coming 0.9 AspectWerkz release&lt;/b&gt;, so that all VM are supported with the smallest integration cost (Sun, IBM, JRockit).&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Tests have been made with&lt;/p&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;JRockit 7SP4 (java 1.3.1)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;JRockit 8.1SP1 (java 1.4.1_03)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;The JMAPI JRockit API (management API) allows to add a &lt;a href="http://edocs.bea.com/wljrockit/docs81/jmapi/javadoc/ManagementAPI/com/bea/jvm/ClassPreProcessor.html"&gt;classPreProcessor&lt;/a&gt; mechanism using a java snip or a command line option.&lt;br /&gt;&lt;br /&gt;A single VM is thus running at full speed, both under java 1.3 and 1.4, without having to use bootclasspath override.&lt;br /&gt;&lt;br /&gt;The classPreProcessor instance is responsible to modify bytecode of the class at load time. AspectWerkz was already providing this classPreProcessor based architecture since summer 2003 for &lt;a href="http://blogs.codehaus.org/projects/aspectwerkz/archives/000124.html"&gt;Sun VM&lt;/a&gt; and Q3 2003 for &lt;a href="http://blogs.codehaus.org/projects/aspectwerkz/archives/000140.html"&gt;IBM VM&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;It is possible to hook or unhook AspectWerkz programmatically using JMAPI:&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;JVMFactory.getJVM().getClassLibrary().setClassPreProcessor(&lt;br /&gt;   new JRockitPreProcessor());&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;To launch a JVM with AspectWerkz hooked in for class load time weaving this consists of a single option:&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;/jrockit/bin/java&lt;br /&gt;-Xmanagement:class=org.codehaus.aspectwerkz.extension.jrockit.JRockitPreProcessor ....&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;If you are a JRockit fan, please help us and give a try to AspectWerkz online mode by your own. We need your feedback to make it suits your needs.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;We will provide extensive documentation with the 0.9 release, but for the impatient :&lt;/p&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;grab a CVS snapshot&lt;/li&gt;&lt;br /&gt;&lt;li&gt;check bin/aspectwerk scripts to adapt them for JRockit (one line is commented out - notice that AspectWerkz needs to be in bootclasspath due to JMAPI)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;have a look at org.codehaus.aspectwerkz.extension.jrockit.JRockitPreProcessor in src/extensions/&lt;/li&gt;&lt;br /&gt;&lt;li&gt;compile extensions.jar with ant/maven aspectwerkz:extensions:compile&lt;/li&gt;&lt;br /&gt;&lt;li&gt;give it a try&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-4063610598347324335?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/4063610598347324335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/4063610598347324335'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2003/11/aspectwerkz-announces-support-for-bea.html' title='AspectWerkz announces support for BEA JRockit'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-1266772890084392708</id><published>2003-11-03T12:14:00.000+01:00</published><updated>2007-08-08T11:15:27.095+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>ThreadLocal and memory leaks</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;Last day I realized that using &lt;a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/ThreadLocal.html"&gt;ThreadLocal&lt;/a&gt; can be very dangerous when it comes to long running applications and garbage collections.&lt;br /&gt;&lt;br /&gt;When you read the documentation of the ThreadLocal, you read that the object put in a ThreadLocal context is associated to the thread, and will be garbaged once the thread is dead.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;Each thread holds an implicit reference to its copy of a ThreadLocal as long as the thread is alive and the ThreadLocal object is accessible; after a thread goes away, all of its copies of ThreadLocal variables are subject to garbage collection (unless other references to these copies exist).&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;So if you use ThreadLocal to store some object instance there is a high risk to have the object stored in the thread local never garbaged when your app runs inside an app server like WebLogic Server, which manage a pool of working thread - even when the class that created this ThreadLocal instance is garbage collected.&lt;br /&gt;&lt;br /&gt;To solve this issue, you will probably have to check for it first with a memory profiler tool like &lt;a href="http://www.ej-technologies.com/products/jprofiler/overview.html"&gt;JProfiler&lt;/a&gt;, and then wrap the value put in the ThreadLocal in a &lt;a href="http://java.sun.com/j2se/1.3/docs/api/java/lang/ref/WeakReference.html"&gt;WeakReference&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;That did not appears to be obvious while reading the javadoc. Isn't it ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-1266772890084392708?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/1266772890084392708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/1266772890084392708'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2003/11/threadlocal-and-memory-leaks.html' title='ThreadLocal and memory leaks'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-4192424373239484123</id><published>2003-10-20T11:58:00.000+02:00</published><updated>2007-08-08T11:15:27.095+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>AspectWerkz online mode and JSR 163</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;Since end of july the JSR 163 draft is in public review. I did not had time to read it before (shame on me !) and Jonas has send me the link yesterday.&lt;br /&gt;&lt;a href="http://jcp.org/aboutJava/communityprocess/review/jsr163/index.html"&gt;(read the draft)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I am pretty happy with it. As you might know, we have struggled hard in AspectWerkz to provide a way to weave class at load time and keep compliant with complex class loader hierarchies as J2EE ones.&lt;br /&gt;If JMangler was good for first AspectWerkz releases (prior to 0.8), having our own architecture was a major step forward (and read recent post on JMangler lists that state problems under J2EE environment where it is reported to freeze - as I reported it in Q2 2003).&lt;br /&gt;&lt;br /&gt;On july 30 I complained about JVMPI API and was kidding at Sun, since they had &lt;i&gt;forgetted&lt;/i&gt; some information I needed in the API.&lt;br /&gt;(&lt;a href="http://blogs.codehaus.org/people/avasseur/archives/000112.html"&gt;old article&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;I forgot to subscribe to JSPA to gain access to JSR for early reviewing. I should have (shame on me!)&lt;br /&gt;This JSR 163 sounds really good.&lt;br /&gt;- First I will have the information I need in the class load hook event.&lt;br /&gt;- Second, there seems to have support for in process hotswapping&lt;br /&gt;- Last and not least, there seems to have no requirements for -Xdebug for the hotswapping part.&lt;br /&gt;&lt;br /&gt;So adopt AspectWerkz online architecture today and you will have a preview of what this JSR 163 is going to provide in a simpler way for java 1.5. I have already a todo list for AspectWerkz online architecture when this java 1.5 will be ready for prime time.&lt;br /&gt;&lt;br /&gt;And don't forget: subscribe to JSPA. I have sent the agreement to SUN this sunday !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-4192424373239484123?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/4192424373239484123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/4192424373239484123'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2003/10/aspectwerkz-online-mode-and-jsr-163.html' title='AspectWerkz online mode and JSR 163'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-6978007853080281577</id><published>2003-10-01T10:42:00.000+02:00</published><updated>2007-08-08T11:15:27.095+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>An old crap we don't care about anymore</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;With the 0.8 release and the new online mode architecture, a major limitation has been resolved. Now &lt;b&gt;online mode (on the fly weaving) can be enabled with application servers&lt;/b&gt; (was &lt;a href="http://aspectwerkz.codehaus.org/"&gt;released&lt;/a&gt; summer 2003).&lt;br /&gt;&lt;br /&gt;Prior to 0.7.4 (including 0.7.4), it was not working correctly on some circumstances, due to a problem in the &lt;a href="http://javalab.cs.uni-bonn.de/research/jmangler/"&gt;JMangler&lt;/a&gt; architecture which was used for online mode. You could use AspectWerkz offline mode as a fix to this.&lt;br /&gt;Starting with 0.8, we have developped in AspectWerkz our own architecture, that fix the problem and brings much more functionnalities. AspectWerkz hook architecture is now used in &lt;a href="http://cglib.sourceforge.net/"&gt;CGLib&lt;/a&gt; as well since we made it available as a standalone module.&lt;br /&gt;&lt;br /&gt;Some recent post on &lt;a href="https://mailbox.informatik.uni-bonn.de/mailman/public/jmanglerdiscuss/2003/000058.html"&gt;JMangler mailing lists&lt;/a&gt; reminded me this problem, and i want to give you some focus here about this topic, even if its an old story I don't care about anymore since the &lt;i&gt;AspectWerkz way&lt;/i&gt; is now far from those limitations.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The problem was that JMangler is using a JPDA LaunchingConnector. This is a Sun provided JDI component that allow to launch a JVM in debug mode from a first JVM. The first JVM is responsible of hooking  the low level layer in the second JVM when this one starts up. This interesting architecture provided by JMangler team has many problems.&lt;br /&gt;&lt;br /&gt;The major one makes it bogus under heavy class loading scheme, where the application launched loads lots of class in a multi threaded way. This heavy class loading can appear when an application server starts. Lots of class are created and some execute thread queues are initialized, threads deploy applications, jdbc drivers are loaded ...&lt;br /&gt;&lt;br /&gt;I did some test under a weblogic 7 startup sequence, and it just hangs. Hopefully AspectWerkz now works perfecly fine with the new 0.8 architecture.&lt;br /&gt;&lt;br /&gt;If you are interested in reproducing the bug, which seems to be a JPDA bug that thus affects the whole JMangler 3.x architecture and thus AspectWerkz version prior to 0.8, you can use the following sample application &lt;i&gt;(read the &lt;a href="http://blogs.codehaus.org/people/avasseur/archives/000120.html#more"&gt;extended entry below&lt;/a&gt;)&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.codehaus.org/people/avasseur/downloads/jpda.zip"&gt;Download the test application&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://aspectwerkz.codehaus.org"&gt;Read more about AspectWerkz 0.8&lt;/a&gt;&lt;br /&gt;&lt;a href="http://aspectwerkz.codehaus.org/downloads/index.html"&gt;Read more about the new on the fly weaving architecture&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Description of the testing application:&lt;/u&gt;&lt;br /&gt;A sample &lt;i&gt;main class&lt;/i&gt; application starts T threads (configurable).&lt;br /&gt;Each thread runs L loops (configurable).&lt;br /&gt;At each loop the thread instantiates a new URLClassLoader with a search path on file system from which it loads a single class and instantiate a first instance. The class &lt;i&gt;static init section&lt;/i&gt; (clinit) loads itself another class using another new URLClassLoader.&lt;br /&gt;&lt;br /&gt;Each class loading is written on stdout: classname + hashcode. Hashcode allows to identify classes loaded by differents classloader which are not hierarchically linked.&lt;br /&gt;&lt;br /&gt;This simulates a startup sequence where a big number of class is loaded by several threads ( 2 x T x L class). No class reference is kept so all are elligible to garbage collection.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Results&lt;/u&gt;&lt;br /&gt;The app performs well with 3 threads and 2000 loops (thus 12 000 class loaded) (use a heap of 128m and a new of 32m, used -verbose:gc option). Turning on -Xdebug or -Runjdwp does not affect the correct behavior.&lt;br /&gt;&lt;br /&gt;When started thru JMangler or used with a jpda LaunchingConnector - the component used in JMangler 3.x - it does not complete, and the launching VM garbage collection sometimes turns completely crazy making a lot of minor garbage collections at around 6000 class loaded, and the whole app always hangs.&lt;br /&gt;&lt;br /&gt;Tests were run under win2000 SP3 and solaris, under different java 1.4 version, with the same results.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Explanation&lt;/u&gt;&lt;br /&gt;I don't have explanations. AspectWerkz 0.8 uses a ListeningConnector coupled to an AttachingConnector instead, and it performs fine.&lt;br /&gt;Now you can startup a complete application server with AspectWerkz hooked in in online mode with a minimal overhead.&lt;br /&gt;&lt;b&gt;And the 0.8 release comes with many more options on this important topic, that makes AspectWerkz on the fly weaving an easy and non intrusive operation.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.codehaus.org/people/avasseur/downloads/jpda.zip"&gt;Download the test application&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://aspectwerkz.codehaus.org"&gt;Read more about AspectWerkz 0.8&lt;/a&gt;&lt;br /&gt;&lt;a href="http://aspectwerkz.codehaus.org/downloads/index.html"&gt;Read more about the new on the fly weaving architecture&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-6978007853080281577?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/6978007853080281577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/6978007853080281577'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2003/10/old-crap-we-dont-care-about-anymore.html' title='An old crap we don&apos;t care about anymore'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-1611894088713901401</id><published>2003-09-03T16:06:00.000+02:00</published><updated>2007-08-08T11:15:27.096+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>AspectWerkz has support for IBM</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;I managed to bring IBM jdk support to AspectWerkz for on the fly weaving.&lt;br /&gt;Read more on &lt;a href="http://blogs.codehaus.org/projects/aspectwerkz/archives/000140.html"&gt;project blog&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;IBM bundles a specific JRE that I did not planned when hacking the JVM hook architecture that allow on the fly weaving, so some of you reported JVM crash. Now it is fixed (in CVS HEAD) and for other exotic VM, an explicit error message should be reported.&lt;br /&gt;&lt;br /&gt;If you have issues with it, please provide feedback. The IBM jre (at least 1.3.x) seems to have many issues as regards jars packaging. f.e I had to remove index.lst from meta-inf/ in two third parties jars for it to work...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-1611894088713901401?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/1611894088713901401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/1611894088713901401'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2003/09/aspectwerkz-has-support-for-ibm.html' title='AspectWerkz has support for IBM'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-8595978734608808481</id><published>2003-09-03T13:30:00.000+02:00</published><updated>2007-08-08T11:15:27.096+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>debug your AOP with AspectWerkz</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;Using the latest development of AspectWerkz, and thus the recently released 0.8.1, debugging &lt;b&gt;step by step your aspects is made easy&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Indeed we now have support for standard IDE debugging, so that bytecode weaving process can be followed step by step as regular java.&lt;br /&gt;&lt;br /&gt;Then when your weaved application is running, you can set breakpoints on your advices and debug the app as usual, as plain java, as you are probably used to do it.&lt;br /&gt;Though the IDE does not have access to the source of the weaved classes, you can set breakpoints in the &lt;i&gt;original&lt;/i&gt; method affected by the pointcuts where aspects are bounded.&lt;br /&gt;&lt;br /&gt;Here are some screenshot with IntelliJ.&lt;br /&gt;&lt;a href="http://blogs.codehaus.org/people/avasseur/downloads/awdebug.html" onclick="window.open('http://blogs.codehaus.org/people/avasseur/downloads/awdebug.html','popup','width=1150,height=834,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"&gt;&lt;br /&gt;&lt;img alt="click to enlarge" src="http://blogs.codehaus.org/people/avasseur/archives/awdebug-small.jpg" width="230" height="167" border="0" /&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Here is a short how-to:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Create a new project in your IDE, with AspectWerkz source distribution and your own sources.&lt;br /&gt;&lt;br /&gt;Configure all classpath as needed.&lt;br /&gt;&lt;br /&gt;On java 1.3, copy &lt;i&gt;piccolo-xy.jar&lt;/i&gt; in your &lt;i&gt;JAVA_HOME/jre/lib/ext/&lt;/i&gt; (and remove it after since Ant does not like to have it there...)&lt;br /&gt;&lt;br /&gt;Run or debug the class &lt;i&gt;org.codehaus.aspectwerkz.hook.impl.WeavingClassLoader&lt;/i&gt; as usual with your IDE.&lt;br /&gt;Use this class as a &lt;i&gt;java&lt;/i&gt; command replacement.&lt;br /&gt;&lt;br /&gt;Do not forget to define the -Daspectwerkz.definition.file&lt;br /&gt;&lt;br /&gt;For example I am running it with the following to run a single unit test.&lt;br /&gt;&lt;code&gt;JVM arg = -Daspectwerkz.definition.file=src\test\aspectwerkz-test.xml -Daspectwerkz.transform.verbose=yes -Daspectwerkz.transform.dump=test..*&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Program parameter = test.DynamicDeploymentTest&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Working directory = my AspectWerkz home directory&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-8595978734608808481?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/8595978734608808481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/8595978734608808481'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2003/09/debug-your-aop-with-aspectwerkz.html' title='debug your AOP with AspectWerkz'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-2933241906096798201</id><published>2003-08-14T14:00:00.000+02:00</published><updated>2007-08-08T11:15:27.096+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>AspectWerkz - new on the fly weaving architecture released</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;AspectWerkz 0.8 is released.&lt;br /&gt;&lt;br /&gt;This version is a major change from the previous releases, since the &lt;b&gt;whole on the fly weaving architecture&lt;/b&gt; has been reviewed.&lt;br /&gt;There is now support for java 1.3, no debug mode required with certain options on java 1.4, and the most seamless way to plug the AspectWerkz AOP weaver in your environment thru a native module !&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;java -Xrunaspectwerkz [options] [classpath] my.Application&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;just hooks in the weaver for all the class loaded by the JVM (except bootstrap classloader).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://aspectwerkz.codehaus.org/releases.html"&gt;Try it now&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://aspectwerkz.codehaus.org/downloads/index.html"&gt;Read the official slides presenting the new architecture (pdf, ppt)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://aspectwerkz.codehaus.org/online.html"&gt;Read the documentation related to the new architecture&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-2933241906096798201?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/2933241906096798201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/2933241906096798201'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2003/08/aspectwerkz-new-on-fly-weaving.html' title='AspectWerkz - new on the fly weaving architecture released'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-7103728826306977699</id><published>2003-07-30T12:05:00.000+02:00</published><updated>2007-08-08T11:15:27.096+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>AspectWerkz online architecture - better than JVMPI - Sun needs to think about it for java 1.5</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;I already talked about the coming AspectWerkz new architecture for online mode (on the fly weaving). The key advantages will be as I explained:&lt;br /&gt;- java 1.3 support&lt;br /&gt;- debug mode for JVM not required&lt;br /&gt;- option for single jvm&lt;br /&gt;You may think its useless since the online weaving is already working fine (almost) with JMangler 3.x, which came with the &lt;i&gt;original terrific idea &lt;/i&gt;of hotswapping the java.lang.ClassLoader, but I can bet you will change your position once you will have played with it a little more, thru the official 0.8 release.&lt;br /&gt;&lt;br /&gt;Today I gave a look at the JVMPI API. Its a C layer receiving events from the JVM. Two events could be usefull to handle for AOP implementations: JVMPI_EVENT_CLASS_LOAD (sent when a class is loaded in the VM) and&lt;br /&gt;JVMPI_EVENT_CLASS_LOAD_HOOK (sent when the VM obtains a class file data, but before it constructs the in-memory representation for that class).&lt;br /&gt;&lt;br /&gt;Coding a layer receiving JVMPI_EVENT_CLASS_LOAD_HOOK to transform the bytecode could be usefull, since it could be enabled with just a -XrunMyStuff option and a shared library. This is the approach many commercial or open source  debugging and profiling tools have choosen.&lt;br /&gt;&lt;br /&gt;But giving a deeper look implementing an AOP layer on it will fail shortly for the following reasons:&lt;br /&gt;- the event does not give the caller classloader information&lt;br /&gt;- it might be a hell to call the java implemented AOP layer (AspectWerkz off course) from the C/C++ MyStuff JVMPI addon. Unless we setup a kind of client / server mode with a protocol to transmit bytecode back and forth (see AdaptJ for this sort of things).&lt;br /&gt;Could lead to the idea of a distributed weaving engine... but do you need it ? And how will we be able to handle the calller classloader distinction, for example to weave struts classes in a specifc war only ?&lt;br /&gt;&lt;br /&gt;So I definetely think the JMangler idea was good, even if the implementation is not that much good. And thus I am sure the new AspectWerkz architecture which unleash the idea will be and is already killing...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://java.sun.com/j2se/1.4.2/docs/guide/jvmpi/jvmpi.html"&gt;JVMPI doc&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.sable.mcgill.ca/~bdufou1/AdaptJ/main.html"&gt;adaptJ project&lt;/a&gt;&lt;br /&gt;&lt;a href="http://javalab.cs.uni-bonn.de/research/jmangler/"&gt;JMangler project&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As a ending note, I am really surprised Sun implemented the JVMPI_EVENT_CLASS_LOAD_HOOK in JVMPI and not directly (and even both) in the java.lang.ClassLoader... since its almost the single issue an on the fly weaver has to solve... since we have to override a class of rt.jar for java 1.3 compatibility... since BEA has implemented it since more than 2 years (except for the system classloader, just for the custom classloader deploying application like ear, war, ejb-jar, rar, but this might change with WebLogic 9)... since several project tries to address this lack (JMangler, beSee, AspectWerkz, JBoss, AspectJ)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Sun engineers - wake up - put that stuff in java 1.5 - java AOP needs it !&lt;/b&gt;&lt;br /&gt;Ready to make a lobby with me ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-7103728826306977699?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7103728826306977699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7103728826306977699'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2003/07/aspectwerkz-online-architecture-better.html' title='AspectWerkz online architecture - better than JVMPI - Sun needs to think about it for java 1.5'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-261021468566378776</id><published>2003-07-23T18:38:00.000+02:00</published><updated>2007-08-08T11:15:45.526+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>beSee donated to AspectWerkz</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur, read comments there)&lt;br /&gt;&lt;br /&gt;Past 6 month I have founded and developped the &lt;a href="http://sourceforge.net/projects/besee"&gt;beSee &lt;/a&gt;project. This project is now closed, but I am definitely happy since &lt;b&gt;the core architecture is now part of AspectWerkz&lt;/b&gt;, founded by Jonas Boner, for which I am commiter.&lt;br /&gt;&lt;br /&gt;AspectWerkz power will be unleashed in the next weeks, and let me explain why.&lt;br /&gt;&lt;br /&gt;It all started with &lt;a href="http://besee.sourceforge.net/besee-1-x/"&gt;beSee-1-x&lt;/a&gt;. This project aimed to provide a runtime bytecode instrumentation solution for &lt;b&gt;BEA WebLogic Server&lt;/b&gt; (v7), based on Javassist for bytecode instrumentation and BEA ClassPreProcessor feature, which allow to modify bytecode of &lt;b&gt;deployed&lt;/b&gt; applications when they are loaded in the app server.&lt;br /&gt;beSee-1-x allowed easy instrumentation, based on a property file, and provided JMX management feature for hot configuration. It was easy to instrument on the fly some classes and run a load test on my app.&lt;br /&gt;&lt;br /&gt;But there was something missing: BEA ClassPreProcessor does not allow instrumentation of core server classes or jvm wide component, like a JDBC driver, so I was unable to instrument enough my CMPs to track down SQL query being executed.&lt;br /&gt;&lt;br /&gt;I started &lt;a href="http://besee.sourceforge.net/"&gt;beSee-2-x&lt;/a&gt; architecture. It provides a JVM wide PreProcessor hook, allowing to extend what BEA provided for deployed application to the whole JVM, and thus to any product running java (!).&lt;br /&gt;I knew JMangler add this kind of feature, but after some testing it appeared to be heavy and not that much stable as regards app server integration (let me know and I will send you some test case for it, and read more, you'll learn why).&lt;br /&gt;&lt;br /&gt;So the main features of beSee-2-x I implemented are:&lt;br /&gt;- plugable JVM wide ClassPreProcessor mechanism for on the fly instrumentation&lt;br /&gt;- bytecode kit independancy (BCEL and Javassist provided, any other supported)&lt;br /&gt;- offline compiler (the AspectJ way)&lt;br /&gt;- performance wise:&lt;br /&gt;    - beSee-2-x does not requires JVM to run in debug mode (JMangler does)&lt;br /&gt;    - beSee-2-x is java 1.3 compatible (JMangler is not)&lt;br /&gt;    - beSee-2-x auto adapts behavior for java 1.3 and 1.4 (process forking or hotswapping)&lt;br /&gt;    - beSee-2-x allow to disable dual process, thus a standard java ... command to launch the target application to instrument on the fly is enough - no need for a wrapper script and stream piping in background (required when hotswap or process forking is used).&lt;br /&gt;&lt;br /&gt;beSee-2-x allowed me to unleash the power of beSee-1-x to the whole weblogic, not just the deployed app.&lt;br /&gt;&lt;b&gt;And crucial point, its open architecture was ready to unleash power and capabilities of next generation AOP framework - and AspectWerkz is the one !&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;So stay tune. All those features are right now in AspectWerkz CVS, and in some weeks, you won't feel the pain to plug AOP in your whole architecture, on the fly or offline, and with its full power - no debug mode required, java 1.3 supported, optional process forking (choose between tuning and easy set-up), not tight to any app server but certified app server ready.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-261021468566378776?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/261021468566378776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/261021468566378776'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2003/07/besee-donated-to-aspectwerkz.html' title='beSee donated to AspectWerkz'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-6641174647704300620</id><published>2003-07-23T05:43:00.000+02:00</published><updated>2007-08-08T11:15:45.527+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>BCEL patch submitted</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur)&lt;br /&gt;&lt;br /&gt;I have submitted a patch for the BCEL thread safe issue I described (&lt;a href="http://blogs.codehaus.org/people/avasseur/archives/000101.html"&gt;read&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;You'll find it on the BCEL dev mailing list archive. I am waiting for BCEL guy to put the patch in their CVS HEAD. For now you can whether incorporate the patch in the BCEL source and rebuild your own BCEL, or build a jar with only the two files I patched and put it in your classpath &lt;b&gt;before&lt;/b&gt; the bcel.jar.&lt;br /&gt;&lt;br /&gt;(&lt;a href="http://www.mail-archive.com/bcel-dev@jakarta.apache.org/msg00218.html"&gt;read the post on the list archive&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;(&lt;a href="http://www.mail-archive.com/bcel-dev@jakarta.apache.org/msg00218/patch-HEAD-threadsafe.zip"&gt;dowload the patch for BCEL 5.1&lt;/a&gt;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-6641174647704300620?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/6641174647704300620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/6641174647704300620'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2003/07/bcel-patch-submitted.html' title='BCEL patch submitted'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3100335968062348807.post-7170406654834724087</id><published>2003-07-19T12:01:00.000+02:00</published><updated>2007-08-08T11:15:45.527+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AOP'/><title type='text'>BCEL internal</title><content type='html'>(imported from http://blogs.codehaus.org/people/avasseur)&lt;br /&gt;&lt;br /&gt;Using &lt;a href="http://jakarta.apache.org/bcel/"&gt;BCEL&lt;/a&gt; to do bytecode modification on a simple application I have, I encountered &lt;b&gt;problems with thread safety&lt;/b&gt;. As soon as I got 2 threads instrumenting in parallel, the java Verifier begins to complains about generated method signatures.&lt;br /&gt;&lt;br /&gt;I struggled half a day to find it out. Thread safety problem is not that easy to isolate. After some googling I found the following post on &lt;a href="http://www.mail-archive.com/bcel-dev@jakarta.apache.org/msg00201.html"&gt;BCEL mailing lists&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It appears that some of BCEL static class (org.apache.bcel.generic.Type and org.apache.bcel.classfile.Utiity at least), which should provides static method to compute human understandable signature from bytecode and vice-versa are miscoded.&lt;br /&gt;&lt;br /&gt;If I understand that doing a thread safe application can be difficult, I am really thinking BCEL guy were lazy this time with a snip like&lt;br /&gt;&lt;br /&gt;// sample purpose - pseudo code&lt;br /&gt;&lt;pre&gt;package org.apache.bcel.classfile;&lt;br /&gt;&lt;br /&gt;public abstract class Utility {&lt;br /&gt;&lt;br /&gt;public static int consumed_chars;&lt;br /&gt;&lt;br /&gt;public static String[] methodSignatureArgumentTypes(String) {&lt;br /&gt;loop {&lt;br /&gt;     // read and set consumed_chars field&lt;br /&gt;     consumed_chars++;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public static String methodSignatureToString(String) {&lt;br /&gt;loop {&lt;br /&gt;    // read and set consumed_chars field&lt;br /&gt;    consumed_chars++;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As we can see its obvious it is non thread safe because its bad designed: two static methods are using the same static field as a temporary storage to perform string operations.&lt;br /&gt;&lt;br /&gt;I had to wrap the &lt;i&gt;consumed_chars&lt;/i&gt; in a &lt;i&gt;ThreadLocal&lt;/i&gt; and replace all calls. It works fine, but I cannot be sure I covered all the bad design BCEL put in.&lt;br /&gt;&lt;br /&gt;Guy, ok to say BCEL is not designed for thread safety in the FAQ. But please try to avoid such ugly coding.&lt;br /&gt;&lt;br /&gt;Another option for me could be to add some &lt;i&gt;synchronized&lt;/i&gt; in my instrumentation application - but it would be a hell from a performance point of view.&lt;br /&gt;Considering BCEL is used in app server modules (npulse, willy technology), it should be thread safe. In app server there is lots of classloading ocuring concurenlty (stub / skel generation, CMP impl at deployment time ...)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3100335968062348807-7170406654834724087?l=avasseur.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7170406654834724087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3100335968062348807/posts/default/7170406654834724087'/><link rel='alternate' type='text/html' href='http://avasseur.blogspot.com/2007/08/bcel-internal.html' title='BCEL internal'/><author><name>Alex</name><uri>http://www.blogger.com/profile/02000951254466645137</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>
