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
