The SQLException that is being thrown is a checked exception that you must be handling within a catch block in your code. This in itself is not enough to cause a transaction to be rolled back.
When you catch the SQLException You can either call setRollbackOnly() on the SessionContext that was passed into your session bean, or you can throw a RuntimeException from the business method of your session bean.
That sorted it. Many thanks.