You can always replace the task-create-listener by a service-task right after the previous user-task. This has the same effect, once the previous task is completed, some code is run. If you throw an exception from the service-task (due to EJB-magic you do), the UserTask2 won't be started yet, and the process is rolled back to UserTask1. Also, it doesn't make sense marking user-tasks as being async, as the only thing a user-task does, is create a Task-entry in the DB and stop the process/execution from executing.
Service-task is better suited for executing 'logic'. If you insist on having a task-listener, you can always try-catch the exception and throw a BPMNException instead. This way, you can use a message (boundary) event to go back to user-task1. The advantage of this approach is that the diagram clearly shows that there is a possibility of an functional error.