Um EntityManager do JTA não pode usar getTransaction ()

Como eu tenho o seguinte código no meu aplicativo não-ejb. O 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();
            }
        }
    }
}

Em um novo aplicativo, estou usando o EJB3 + JSF e gostaria de reutilizar a biblioteca que contém o código acima. Minha unidade de peristencia para o novo aplicativo se parece com isso:

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

Meu novo aplicativo lança uma exceção quando atinge esta linha:

    EntityTransaction tx = em.getTransaction();

a exceção é:

A JTA EntityManager cannot use getTransaction()

O que é claro o suficiente. A questão é como eu iria converter meu código para ter as transações gerenciadas pelo contêiner. Presumivelmente, meus métodos de bean precisam ser anotados apropriadamente ... A questão é como?

questionAnswers(3)

yourAnswerToTheQuestion