users
[Top] [All Lists]

Re: [cinjug-users] Looking for AOP framework

To: Matt Avery <mavery@xxxxxxxxxxxxxxx>
Subject: Re: [cinjug-users] Looking for AOP framework
From: Chris Nelson <cnelson4eii@xxxxxxxxx>
Date: Tue, 11 May 2004 09:10:42 -0700 (PDT)
Cc: users@xxxxxxxxxx
Delivered-to: mailing list users@cinjug.org
In-reply-to: <40A0E4C7.7040200@einnovation.com>
Mailing-list: contact users-help@cinjug.org; run by ezmlm
A feature of AspectJ you may want to consider using
here is Introduction.  Introduction lets you alter the
structure of a class hierarchy or add new methods and
fields to a class or set of classes in an Aspect.  You
could introduce the getBroker() and closeBroker()
methods in the Aspect without changing any of your
business object code.  

--- Matt Avery <mavery@xxxxxxxxxxxxxxx> wrote:
> Chris,
> 
> I'm not using AspectJ yet, but I'm considering using
> it for the project 
> I'm working on.  I'm doing exactly the same thing
> you described with 
> Hibernate only I'm using OJB.
> 
> The version of OJB I'm using has a bug in it, so I
> wrote an object to 
> work around the bug called "BrokerSupport" (think 
> PropertyChangeSupport).  Every object that needs to
> access the database 
> has this code in it:
> 
>       protected BrokerSupport fieldBrokerSupport;
>       
>       protected PersistenceBroker getBroker()
>       {
>               return getBrokerSupport().getBroker();
>       }
>       
>       protected BrokerSupport getBrokerSupport()
>       {
>               if (fieldBrokerSupport == null)
>               {
>                       fieldBrokerSupport = new BrokerSupport( );
>               }
>               return fieldBrokerSupport;
>       }
> 
>       protected void closeBroker()
>       {
>               getBrokerSupport().closeBroker();
>       }
> 
> Since the business objects extend different
> superclasses, I can't move 
> this code to a single abstract superclass.  So much
> for "once and only 
> once".
> 
> I was thinking of making a "BrokerSupportAspect"
> that would intercept 
> the getBroker() and closeBroker() methods in those
> objects.  My question 
> is, what is the best practice for using aspects in a
> situation like 
> this?  Do I just add a blank implementation of
> getBroker() and 
> closeBroker() to each class and then use the aspect
> to fill in the guts 
> at runtime, or is there some other technique I
> should use?
> 
> Thanks,
> 
> 
> Chris Nelson wrote:
> > Mike,
> > 
> > It's important to consider what you are doing when
> > choosing an AOP implementation.  Are you wanting
> to
> > develop your own custom aspects or merely use
> other
> > prebuilt aspects to solve a given problem?  How
> > dynamic do you need your aspects to be?  I've use
> > AspectJ a bit, and am using it now on an project. 
> For
> > applying custom developed aspects to a largish
> > codebase I find it to be very productive.  I find
> the
> > AspectJ language to be quite expressive, and by
> using
> > the Eclipse plugin it is easy to see what your
> aspects
> > are going to affect (what your pointcuts actually
> pick
> > out).  
> > 
> > However, we are also considering using Spring so
> we
> > can use its' ready made aspects for transaction
> > handling and opening/closing of the Hibernate
> session.
> >  We could, of course, write our own AspectJ
> aspects to
> > deal with these issues, but the fact that Spring
> has
> > premade aspects to do this is attractive.
> > 
> > A couple other issues to think about when choosing
> AOP
> > implementations are:
> > 
> > 1) Dynamic/Compile time:
> > 
> > AspectJ applies aspects to a code base by using a
> > compiler/weaver at compile time.  This means your
> > classes are just plain old Java code and only
> require
> > a small library at run time.  However, if you want
> to
> > add/remove aspects you need to recompile, no
> different
> > than if you were changing other code.
> > 
> > Other AOP implementations(AspectWerkz, JBoss AOP)
> > apply aspects at runtime by modifying the bytecode
> of
> > your classes at runtime.  This means, of course,
> > aspects can be added/removed at runtime.  The
> price
> > for this is having to use a custom classloader,
> and
> > being willing to trust your AOP modifying your
> > classes' bytecodes at runtime "on the fly". 
> Though
> > this made me squeamish initially, the fact that so
> > many implementations are doing this successfully
> has
> > made me less so over time.
> > 
> > 2)  Language extension?
> > 
> > AspectJ is an actual language extension vs other
> > implementations that use another format (XML
> config
> > files for instance) to specify how to apply
> aspects.  
> > 
> > Well, I've already rambled enough for now.  Great
> to
> > see someone else bring up AOP on the Cinjug list! 
> As
> > you can see, it's kind of a pet interest of mine.
> > 
> > Later,
> > 
> > Chris
> > 
> > --- "Witt, Mike (OH35)" <mike.witt@xxxxxxxxxxxxx>
> > wrote:
> > 
> >>I'm planning to spend some time experimenting with
> >>AOP.  I'm wondering if a
> >>de facto AOP framwork is emerging.  Right now, I'm
> >>looking at AspectJ and
> >>Spring, there are probably others as well.  So,
> I'm
> >>looking for an opinion
> >>on which framework to use based on:
> >>
> >>- What's the standard
> >>- Which one is the most newbie friendly -
> available
> >>documentation and
> >>tutorials
> >>- Eclipse plug-in support
> >>- Hibernate support
> >>- Most active development community
> >>
> >>Thanks for the suggestions.
> >>
> >>Mike Witt
> >>
> >>
> >>
> >>---------
> >>You may unsubscribe from this mailing list
> >>by sending a blank email addressed to:
> >>users-unsubscribe@xxxxxxxxxx
> >>
> >>--
> >>Find additional help by sending a blank email
> >>addressed to:
> >>users-help@xxxxxxxxxx
> >>
> > 
> > 
> > 
> > 
> >     
> >             
> > __________________________________
> > Do you Yahoo!?
> > Win a $20,000 Career Makeover at Yahoo! HotJobs  
> >
> http://hotjobs.sweepstakes.yahoo.com/careermakeover 
> > 
> > ---------
> > You may unsubscribe from this mailing list
> > by sending a blank email addressed to:
> > users-unsubscribe@xxxxxxxxxx
> > 
> > --
> > Find additional help by sending a blank email
> > addressed to:
> > users-help@xxxxxxxxxx
> > 
> 
=== message truncated ===



        
                
__________________________________
Do you Yahoo!?
Win a $20,000 Career Makeover at Yahoo! HotJobs  
http://hotjobs.sweepstakes.yahoo.com/careermakeover 

<Prev in Thread] Current Thread [Next in Thread>