Yes, I did that example exactly before, that's what this is based on.

So the trace I see that says "weaving advice" the first time, that
just means it's modifying the method? Even though I don't see that
trace the next time, the advice is still there?

On Jul 1, 2:36 pm, Mark Mandel <mark.man...@gmail.com> wrote:
> You don't want to be advising the method on every call. Once the object has
> AOP advice applied to it, it's done.  You don't have to do any more work.
>
> The documentation shows a clear example of how to use the 
> AOP:http://docs.transfer-orm.com/wiki/Transactions_and_Transfer.cfm#Aspec...
>
> Mark
>
> On Thu, Jul 2, 2009 at 1:47 AM, whostheJBoss 
> <dotfus...@changethings.org>wrote:
>
>
>
>
>
> > Ok, it's back to giving me problems. I don't know what the issue is
> > here.
>
> > Mark, do you think you can you shoot me over one very simple working
> > example of AOP advice with a service layer in ColdBox? Doesn't have to
> > be anything complicated, just one simple example where the handler
> > calls the service layer, which has one AOP advised method. (that gets
> > advised every time I call that method)
>
> > Basically, I want every time I call getBean("userservice").saveuser
> > (user) for it to be advised.
>
> > The example I gave above sort of works, but only the first call of
> > saveuser is advised because the init method only runs when the bean is
> > created, not every time.
>
> > In my handler I want to do:
>
> > userService = getPlugin("ioc").getBean("userService");
> > user = instance.Transfer.new("users.user");
> > user.setFirstName("test");
> > userService.saveuser(user)
>
> > And have it advised.
>
> > If I do this:
>
> > transaction = getPlugin("ioc").getBean("TransferTransaction");
> >                 args = structNew();
> >                args.user = user;
> > transaction.execute(userService, "saveuser", args);
>
> > I get stack overflow after the first time.
>
> > If I put the advise in the init() method of the service, it only
> > happens once.
>
> > Thanks!!
>
> > On Jul 1, 5:54 am, Mark Mandel <mark.man...@gmail.com> wrote:
> > > Should work.. not sure what is going on... the unit tests all pass.
>
> > > What CF platform are you on?
>
> > > Mark
>
> > > On Wed, Jul 1, 2009 at 10:34 PM, whostheJBoss <
> > dotfus...@changethings.org>wrote:
>
> > > > I'm using                 transaction.execute(userService, "saveuser",
> > > > args)
>
> > > > On Jul 1, 4:58 am, Mark Mandel <mark.man...@gmail.com> wrote:
> > > > > Turn on debug on the advise() method, make sure it's wrapping the
> > method
> > > > you
> > > > > expect it to be.
>
> > > > > It will show you in trace
>
> > > > > Mark
>
> > > > > On Wed, Jul 1, 2009 at 9:57 PM, whostheJBoss <
> > dotfus...@changethings.org
> > > > >wrote:
>
> > > > > > innoDB
>
> > > > > > On Jul 1, 4:49 am, Mark Mandel <mark.man...@gmail.com> wrote:
> > > > > > > You're not using myISAM tables are you?
>
> > > > > > > Mark
>
> > > > > > > On Wed, Jul 1, 2009 at 9:23 PM, whostheJBoss <
> > > > dotfus...@changethings.org
> > > > > > >wrote:
>
> > > > > > > > It's on MySQL 5, and no, this is a clean Transfer, not the
> > modified
> > > > > > > > AOP version.
>
> > > > > > > > On Jul 1, 4:00 am, Mark Mandel <mark.man...@gmail.com> wrote:
> > > > > > > > > What DB is this on?
>
> > > > > > > > > Is this your modified code? I believe you made significant
> > > > changes to
> > > > > > the
> > > > > > > > > way transaction AOP worked?
>
> > > > > > > > > Mark
>
> > > > > > > > > On Wed, Jul 1, 2009 at 8:52 PM, whostheJBoss <
> > > > > > dotfus...@changethings.org
> > > > > > > > >wrote:
>
> > > > > > > > > > Perhaps I'm doing this totally wrong, but this is what I'm
> > > > > > trying...
>
> > > > > > > > > > I have a bean called userService:
>
> > > > > > > > > > <bean id="userService" class="model.users.userService">
> > > > > > > > > >        <constructor-arg name="transfer">
> > > > > > > > > >                <ref bean="Transfer" />
> > > > > > > > > >        </constructor-arg>
> > > > > > > > > >        <constructor-arg name="transaction">
> > > > > > > > > >                <ref bean="TransferTransaction" />
> > > > > > > > > >        </constructor-arg>
> > > > > > > > > >        <constructor-arg name="userGateway">
> > > > > > > > > >                <ref bean="userGateway"/>
> > > > > > > > > >        </constructor-arg>
> > > > > > > > > > </bean>
>
> > > > > > > > > > This is the TransferTransaction that I am passing to the
> > > > > > constructor
> > > > > > > > > > on userService:
>
> > > > > > > > > > <bean id="TransferTransaction" factory-bean="ColdboxOCM"
> > > > factory-
> > > > > > > > > > method="get">
> > > > > > > > > >   <constructor-arg
> > > > name="objectKey"><value>TransferTransaction</
> > > > > > > > > > value></constructor-arg>
> > > > > > > > > > </bean>
>
> > > > > > > > > > In the init method of userService I do:
>
> > > > > > > > > >        <cffunction name="init" access="public"
> > output="false"
> > > > > > > > > > returntype="userService">
> > > > > > > > > >                <cfargument name="transfer"
> > > > > > type="transfer.com.Transfer"
> > > > > > > > > > required="true" />
> > > > > > > > > >                <cfargument name="transaction"
> > > > > > > > > > type="transfer.com.sql.transaction.Transaction"
> > required="true"
> > > > />
> > > > > > > > > >                <cfargument name="userGateway"
> > > > type="userGateway"
> > > > > > > > > > required="true" />
>
> > > > > > > > > >                <cfset variables.transfer =
> > arguments.transfer
> > > > />
> > > > > > > > > >                <cfset variables.userGateway =
> > > > arguments.userGateway
> > > > > > />
>
> > > > > > > > > >                <cfset
> > > > > > arguments.transaction.advise(this,"saveuser")>
>
> > > > > > > > > >                <cfreturn this/>
> > > > > > > > > >        </cffunction>
>
> > > > > > > > > > Now, as far as I'm aware, this should now wrap saveuser
> > method
> > > > on
> > > > > > > > > > userService in a transaction, so that if anything fails
> > inside
> > > > of a
> > > > > > > > > > call to userService's saveuser method then all database
> > actions
> > > > > > that
> > > > > > > > > > happened during the transaction (during the saveuser
> > method)
> > > > will
> > > > > > be
> > > > > > > > > > rolled back.
>
> > > > > > > > > > In my handler I do:
>
> > > > > > > > > >                userService =
> > > > > > getPlugin("ioc").getBean("userService");
> > > > > > > > > >                user = instance.Transfer.new("users.user");
> > > > > > > > > >                user.setEmail("t...@test.com");
> > > > > > > > > >                user.setPassword("test");
> > > > > > > > > >                user.setAccountType(2);
> > > > > > > > > >                userService.saveuser(user);
>
> > > > > > > > > > So, this works and the database entry is created.
>
> > > > > > > > > > However, if I go into my userService and add some bad code
> > in
> > > > the
> > > > > > > > > > saveuser method:
>
> > > > > > > > > >        <cffunction name="saveuser" access="public"
> > > > output="false"
> > > > > > > > > > returntype="void">
> > > > > > > > > >                <cfargument name="user" type="any"
> > > > required="true"
> > > > > > />
>
> > > > > > > > > >                <cfset
> > variables.transfer.save(arguments.user)
> > > > />
> > > > > > > > > >                <cfset
> > > > variables.transfer.save(arguments.FAKEOBJECT)
> > > > > > />
> > > > > > > > > >        </cffunction>
>
> > > > > > > > > > Since FAKEOBJECT doesn't exist, it throws an error.
> > However,
> > > > the
> > > > > > save
> > > > > > > > > > right before it worked and stays in the database.
>
> > > > > > > > > > I was under the impression that this kind of transaction
> > would
> > > > roll
> > > > > > > > > > back the first save also when the FAKEOBJECT save failed
> > since
> > > > they
> > > > > > > > > > are both advised by this:
>
> > > > > > > > > >                <cfset
> > > > > > arguments.transaction.advise(this,"saveuser")>
>
> > > > > > > > > > I have also tried do this inside of my handler instead:
>
> > > > > > > > > > transaction =
> > getPlugin("ioc").getBean("TransferTransaction");
>
> > > > > > > > > >                userService =
> > > > > > getPlugin("ioc").getBean("userService");
> > > > > > > > > >                user = instance.Transfer.new("users.user");
> > > > > > > > > >                user.setEmail("t...@test.com");
> > > > > > > > > >                user.setPassword("test");
> > > > > > > > > >                user.setAccountType(2);
>
> > > > > > > > > >                args = structNew();
> > > > > > > > > >                args.user = user;
> > > > > > > > > >                transaction.execute(userService, "saveuser",
> > > > args)
>
> > > > > > > > > > But I get the same results. When there is no bad code in
> > the
> > > > > > saveuser
> > > > > > > > > > method, it works fine and I see the insert in the database,
> > but
> > > > > > when I
> > > > > > > > > > add the FAKEOBJECT to produce an error like so:
>
> > > > > > > > > >                <cfset
> > variables.transfer.save(arguments.user)
> > > > />
> > > > > > > > > >                <cfset
> > > > variables.transfer.save(arguments.FAKEOBJECT)
> > > > > > />
>
> > > > > > > > > > The first save isn't rolled back, the new object stays in
> > the
> > > > > > > > > > database.
>
> > > > > > > > > > Any ideas why a simple transaction isn't rolling back the
> > > > database?
>
> > > > > > > > > > Thanks!
>
> > > > > > > > > --
> > > > > > > > > E: mark.man...@gmail.com
> > > > > > > > > T:http://www.twitter.com/neurotic
> > > > > > > > > W:www.compoundtheory.com
>
> > > > > > > --
> > > > > > > E: mark.man...@gmail.com
> > > > > > > T:http://www.twitter.com/neurotic
> > > > > > > W:www.compoundtheory.com
>
> > > > > --
> > > > > E: mark.man...@gmail.com
> > > > > T:http://www.twitter.com/neurotic
> > > > > W:www.compoundtheory.com
>
> > > --
> > > E: mark.man...@gmail.com
> > > T:http://www.twitter.com/neurotic
> > > W:www.compoundtheory.com
>
> --
> E: mark.man...@gmail.com
> T:http://www.twitter.com/neurotic
> W:www.compoundtheory.com
--~--~---------~--~----~------------~-------~--~----~
Before posting questions to the group please read:
http://groups.google.com/group/transfer-dev/web/how-to-ask-support-questions-on-transfer

You received this message because you are subscribed to the Google Groups 
"transfer-dev" group.
To post to this group, send email to transfer-dev@googlegroups.com
To unsubscribe from this group, send email to 
transfer-dev-unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/transfer-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to