I would totally see it as a bug. If LCDS manages the object, it is its role to propagate up the rollback. No question about it.
Good luck in your new adventure, whatever it is! Thanks. --- In [email protected], Jeffrey Vroom <j...@...> wrote: > > In my opinion, LCDS should detect that you've called setRollbackOnly and > deliver a generic fault to the client. I just recently left Adobe so it is > not my position anymore to say for sure it is a bug or just the way it > works. I vaguely recall a bug opened on this issue but can't check since > that bug system is not public. > > Jeff > > On Wed, Apr 29, 2009 at 12:09 PM, Mehdi <elextra...@...> wrote: > > > > > > > --- In [email protected] <flexcoders%40yahoogroups.com>, Jeffrey > > Vroom <jeff@> wrote: > > > > > > I think this is a bug - calling setRollbackOnly does not trigger the > > fault > > > handler. The server knows that transaction failed but the client does not > > > so things get out of sync. You have to throw an exception from your > > > assembler methods to get the fault handler called. When you do that, if > > > use-transactions=true, the rollback will happen automatically. this also > > > gives you the ability to pass the message of your exception to the client > > so > > > your fault handler knows what exactly the error was on the server. > > > > > > At that point, you can call revertChanges to undo that change. > > > > > > Jeff > > > > > > On Wed, Apr 29, 2009 at 9:15 AM, Mehdi <elextraana@> wrote: > > > > > > > > > > > > > > > The typical example. > > > > You have a datagrid that is bound with an arraycollection, which source > > is > > > > managed by LCDS via ds.fill(). > > > > your datagrid is editable. The user edits a value in the collection and > > you > > > > fire a commit. (ds.commit()). > > > > > > > > Let say you are using a custom assembler. The > > > > updateItem(newVersion,prevVersion,changesList) method will be invoked. > > > > There assuming something goes wrong and you call: > > > > > > > > > > DataServiceTransaction.getCurrentDataServiceTransaction().setRollbackOnly(); > > > > > > > > I can see the db rolling back no problem. But my client did not get any > > > > notification! > > > > I have callback functions in the commit, and I have event listener on > > the > > > > ds (fault and result) AS such: > > > > > > > > _dataService.commit(); > > > > token.addResponder(new AsyncResponder( > > > > function onAsyncResult(result:Object, token:Object = null) : void > > > > { > > > > } > > > > function onAsyncFault(.../...) > > > > ) > > > > > > > > AND, > > > > > > > > _dataService.addEventListener(DataServiceFaultEvent.FAULT, > > this.onFault, > > > > false, 0, true); > > > > _dataService.addEventListener(ResultEvent.RESULT, this.onResult, false, > > 0, > > > > true); > > > > > > > > NONE of these callbacks get called. So I basically have no way of > > knowing > > > > that a rollback happened, and the user datagrid is still showing the > > wrong > > > > value, since the commit failed. Any idea? > > > > > > > > Note that however when an exception is thrown on the server > > (updateItem() > > > > method), I do indeed get a callback via the AsyncFault method. > > > > > > > > Thank you. > > > > > > > > > > > > > > > > > Hi Jeff, > > > > I'm not sure what you meant by: > > "I think this is a bug - calling setRollbackOnly does not trigger the fault > > handler" > > Are you confirming the fact that this is a bug, and that calling > > setRollbackOnly SHOULD actually call the fault handler or you are saying > > that only throwing an exception should do it.? > > > > thanks. > > > > > > >

