This is linked to
OPENEJB-782 where the problem was first noted. The flaw described there still exists in 3.1, ie. the client still has no way of determining the reason a rollback occurred.
When the client digs into the exception cause, all it finds is javax.transaction.RollbackException. The originating javax.persistence.PersistenceException or java.sql.SQLException is missing.