Would you like to see this question I have raised in the forum with the process defined for it and possible limitation that we are not able to overcome:
Please note, in 2011, the Publishing process happens up in one transaction, and note that you need to throw StorageException explicitly instead of the Exception. So you should be doing something like as below:
throw new StorageException(<Custom Error Message>);
instead of:
throw new Exception("This is a custom error message");
I hope it helps.