from what I know, you do not need the Transaction code and should not use em.getTransaction() in EJB3 session beans.
A session bean method is by default starting a transaction (when none is active) which is commited when the method succeeds and rolled back when the method throws an exception. The injected entity manager lives only as long as the method runs and is auto-closed by the container.
The em.getTransaction() returns a resource (JDBC?) transaction which is not the same as the UserTransaction you can lookup from JNDI.