JTA EntityManager nie może użyć getTransaction ()

Jak mam następujący kod w mojej aplikacji innej niż ejb. Kod działa.

@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();
            }
        }
    }
}

W nowej aplikacji używam EJB3 + JSF i chciałbym ponownie użyć biblioteki zawierającej powyższy kod. Moja jednostka perystencji dla nowej aplikacji wygląda tak:

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

Moja nowa aplikacja rzuca wyjątek, gdy trafi w tę linię:

    EntityTransaction tx = em.getTransaction();

wyjątkiem jest:

A JTA EntityManager cannot use getTransaction()

Co jest wystarczająco jasne. Pytanie brzmi, jak przekonwertować mój kod, aby transakcje były zarządzane przez kontener. Prawdopodobnie moje metody fasoli muszą być odpowiednio opatrzone komentarzami ... Pytanie brzmi: jak?

questionAnswers(3)

yourAnswerToTheQuestion