Tweak authoring make OptionalActivities save correctly when an existing child activity is moved out of the Optional Activity onto the canvas (ie becomes a top level activity). Changed the cascading of the activities relationship (see lams-common) and split the calls to save and validate into two methods, both called by the servlet. Splitting the calls means that an exception thrown in the validation shouldn't cause the save db update to roll back so the design will be saved, albiet marked as invalid. (MySQL might get us here - as we are sharing the session MySQL may still rollback, even though Spring doesn't roll back).
The servlet now also handles the exceptions and creates the wddx packets. Having the service handle the exception was causing a problem with the transaction - as it was catching the exception the partially updated data in the data was committed. By moving the exception handling out to the servlet, the Spring transation handling was detecting the exception and rolling back the transaction and hence the data in the db remained as it was in the start.