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! --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---