Shash:

This is indeed great news, and I'm also looking forward to giving it a shot!

Thanks for the excellent work, I'm sure we're all going to have fun with it!

Mike

On Wed, 28 Jan 2004 16:27:46 -0600
"Shash Chatterjee" <[EMAIL PROTECTED]> wrote:

> All,
> 
> I have just checked in a brand new feature for Keel - Aspect Oriented
> Programming (available in CVS only).  True to Keel form of not reinventing the
> wheel, ours is based on AspectWerkz (http://aspectwerkz.codehaus.org).  I
> looked through and experimented with several alternatives, notably Nanning,
> but felt like this was the most capable solution at the moment.  You can
> create pointcuts based on Class, Interface, Methods, Fields, and even custom
> join-point controllers. You'll want to read the documentation on the
> AspectWerkz site, particularly
> <http://aspectwerkz.codehaus.org/definition_issues.html> and
> <http://aspectwerkz.codehaus.org/examples.html>.  Aspectwerkz uses BCEL, so if
> you dislike byte-code enhancement, you'll want to stay away.
> 
> As far as the Keel integration is concerned, AOP is available based on if the
> deployment includes svc-aop-aspectwerkz (using the service.aop.aspectwerkz
> property).  If available, a specially extended Keel classloader either loads
> the  byte-enahnced classes or we use the normal KeelURLClassLoader....that's
> all there is to it.  The aspects are defined in
> keel-server/conf/server/keelaop.xml.  Currently there is one aspect, that
> applies a logging advice upon entry/exit from any method of a class
> implementing the Model interface.  See below for logs when the Login sequence
> is called (a big revealation on what all goes on with one click!).
> 
> So, this gives us a place to experiment with AOP.  Interceptor-chains for
> Models could be a very easy thing to implement now, as could be various forms
> of security, transactions, etc.....the killer-app is yet to be written.  I'll
> start playing with how to acquire Keel services from an advice next. Note that
> we use the "online weaving" mode of Aspectwerkz, which instruments the
> byte-code for each class the first time a class is loaded, so it slows down
> Keel startup, but once a class is loaded, speed isn't affected perceptibly. 
> There is an offline task which can accomplish the same, we can look into it in
> the future.
> 
> To use, checkout svc-aop-aspectwerkz and update keel-build, keel-client,
> keel-server and comm-openjms modules.  Should work for direct/JMS/Socket
> servers, haven't modified the classloader setup for JBoss/MDB. 
> 
> Enjoy!
> 
> Shash
> 
> Here's a sample log:
> 
> [java] <-- org.keel.services.model.StandardModel::getConfiguration
>      [java] --> org.keel.models.util.Sequence::execute
>      [java]   --> org.keel.services.model.StandardModel::getConfiguration
>      [java]   <-- org.keel.services.model.StandardModel::getConfiguration
>      [java]   --> org.keel.models.util.Sequence::runSequence
>      [java]     --> org.keel.models.util.Sequence::clearSequence
>      [java]     <-- org.keel.models.util.Sequence::clearSequence
>      [java]     --> org.keel.models.util.Sequence::setNewSequenceContext
>      [java]     <-- org.keel.models.util.Sequence::setNewSequenceContext
>      [java]     --> org.keel.models.util.Sequence::runModel
>      [java]       --> org.keel.models.util.Sequence::getModelName
>      [java]       <-- org.keel.models.util.Sequence::getModelName
>      [java]       --> org.keel.apps.navigate.models.Navigate::getAuthorizationMa
> nager
>      [java]       <-- org.keel.apps.navigate.models.Navigate::getAuthorizationMa
> nager
>      [java]       --> org.keel.apps.navigate.models.Navigate::execute
>      [java]         --> org.keel.services.model.StandardModel::getConfiguration
>      [java]         <-- org.keel.services.model.StandardModel::getConfiguration
>      [java]         --> org.keel.apps.navigate.models.Navigate::doChildrenOf
>      [java]           --> org.keel.services.model.SecurableStandardLogEnabledMod
> el::getAuthorizationManager
>      [java]           <-- org.keel.services.model.SecurableStandardLogEnabledMod
> el::getAuthorizationManager
>      [java]           --> org.keel.services.model.SecurableStandardLogEnabledMod
> el::getAuthorizationManager
>      [java]           <-- org.keel.services.model.SecurableStandardLogEnabledMod
> el::getAuthorizationManager
>      [java]           --> org.keel.services.model.SecurableStandardLogEnabledMod
> el::getAuthorizationManager
>      [java]           <-- org.keel.services.model.SecurableStandardLogEnabledMod
> el::getAuthorizationManager
>      [java]         <-- org.keel.apps.navigate.models.Navigate::doChildrenOf
>      [java]       <-- org.keel.apps.navigate.models.Navigate::execute
>      [java]       --> org.keel.services.model.StandardModel::getConfiguration
>      [java]       <-- org.keel.services.model.StandardModel::getConfiguration
>      [java]     <-- org.keel.models.util.Sequence::runModel
>      [java]     --> org.keel.models.util.Sequence::getNextSequence
>      [java]     <-- org.keel.models.util.Sequence::getNextSequence
>      [java]     --> org.keel.models.util.Sequence::runModel
>      [java]       --> org.keel.models.util.Sequence::getModelName
>      [java]       <-- org.keel.models.util.Sequence::getModelName
>      [java]       --> org.keel.services.model.StandardLogEnabledModel::enableLog
> ging
>      [java]       <-- org.keel.services.model.StandardLogEnabledModel::enableLog
> ging
>      [java]       --> org.keel.services.model.StandardModel::configure
>      [java]       <-- org.keel.services.model.StandardModel::configure
>      [java]       --> org.keel.apps.register.models.HeaderInfo::execute
>      [java]       <-- org.keel.apps.register.models.HeaderInfo::execute
>      [java]       --> org.keel.services.model.StandardModel::getConfiguration
>      [java]       <-- org.keel.services.model.StandardModel::getConfiguration
>      [java]     <-- org.keel.models.util.Sequence::runModel
>      [java]     --> org.keel.models.util.Sequence::getNextSequence
>      [java]     <-- org.keel.models.util.Sequence::getNextSequence
>      [java]     --> org.keel.models.util.Sequence::runModel
>      [java]       --> org.keel.models.util.Sequence::getModelName
>      [java]       <-- org.keel.models.util.Sequence::getModelName
>      [java]       --> org.keel.services.model.StandardLogEnabledModel::enableLog
> ging
>      [java]       <-- org.keel.services.model.StandardLogEnabledModel::enableLog
> ging
>      [java]       --> org.keel.services.model.StandardModel::configure
>      [java]       <-- org.keel.services.model.StandardModel::configure
>      [java]       --> org.keel.apps.register.models.PromptLogin::execute
>      [java]         --> org.keel.apps.register.models.LoginBase::getLoginCookieN
> ame
>      [java]           --> org.keel.apps.register.models.LoginBase::getCookieName
> 
>      [java]           <-- org.keel.apps.register.models.LoginBase::getCookieName
> 
>      [java]         <-- org.keel.apps.register.models.LoginBase::getLoginCookieN
> ame
>      [java]         --> org.keel.apps.register.models.LoginBase::getPasswordCook
> ieName
>      [java]           --> org.keel.apps.register.models.LoginBase::getCookieName
> 
>      [java]           <-- org.keel.apps.register.models.LoginBase::getCookieName
> 
>      [java]         <-- org.keel.apps.register.models.LoginBase::getPasswordCook
> ieName
>      [java]         --> org.keel.apps.register.models.LoginBase::getDomainCookie
> Name
>      [java]           --> org.keel.apps.register.models.LoginBase::getCookieName
> 
>      [java]           <-- org.keel.apps.register.models.LoginBase::getCookieName
> 
>      [java]         <-- org.keel.apps.register.models.LoginBase::getDomainCookie
> Name
>      [java]         --> org.keel.apps.register.models.LoginBase::getCryptSeq
>      [java]         <-- org.keel.apps.register.models.LoginBase::getCryptSeq
>      [java]       <-- org.keel.apps.register.models.PromptLogin::execute
>      [java]       --> org.keel.services.model.StandardModel::getConfiguration
>      [java]       <-- org.keel.services.model.StandardModel::getConfiguration
>      [java]     <-- org.keel.models.util.Sequence::runModel
>      [java]     --> org.keel.models.util.Sequence::clearSequence
>      [java]     <-- org.keel.models.util.Sequence::clearSequence
>      [java]   <-- org.keel.models.util.Sequence::runSequence
>      [java] <-- org.keel.models.util.Sequence::execute
>      [java] --> org.keel.services.model.StandardModel::getConfiguration
>      [java] <-- org.keel.services.model.StandardModel::getConfiguration
> http://keelframework.org/documentation
> Keelgroup mailing list
> [EMAIL PROTECTED]
> http://lists.keelframework.com/listinfo.cgi/keelgroup-keelframework.com


-- 
Michael Nash

JGlobal Ltd 
Next-Generation Web Application Development and Open Source Support
http://www.jglobal.com

Bahamas Commerce and Trade
Offshore eCommerce Hosting and Business Services
http://www.bahamascommerce.com

http://keelframework.org/documentation
Keelgroup mailing list
[EMAIL PROTECTED]
http://lists.keelframework.com/listinfo.cgi/keelgroup-keelframework.com

Reply via email to