Un JTA EntityManager no puede usar getTransaction ()

¿Cómo tengo el siguiente código en mi aplicación no-ejb? El código funciona.

@Override
public void saveItems(Collection<T> items) {
    synchronized (em) {
        EntityTransaction tx = em.getTransaction();
        try {
            tx.begin();
            for (T item : items) {
                saveItem_((Class<T>) null, item);
            }
            tx.commit();
        } finally {
            if (tx.isActive()) {
                tx.rollback();
            }
        }
    }
}

En una nueva aplicación, estoy usando EJB3 + JSF y me gustaría reutilizar la biblioteca que contiene el código anterior. Mi unidad de peristence para la nueva aplicación se ve así:

  <persistence-unit name="myApp" transaction-type="JTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>MySQLConnection</jta-data-source>
  </persistence-unit>

Mi nueva aplicación lanza una excepción cuando llega a esta línea:

    EntityTransaction tx = em.getTransaction();

la excepción es:

A JTA EntityManager cannot use getTransaction()

Que es lo suficientemente claro. La pregunta es cómo convertiría mi código para que las transacciones sean administradas por el contenedor. Presumiblemente, mis métodos de frijol deben ser anotados apropiadamente ... La pregunta es ¿cómo?

Respuestas a la pregunta(3)

Su respuesta a la pregunta