JTA EntityManager не может использовать getTransaction ()

Как у меня есть следующий код в моем приложении не-EJB. Код работает.

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

В новом приложении я использую EJB3 + JSF и хотел бы повторно использовать библиотеку, содержащую приведенный выше код. Моя единица постоянства для нового приложения выглядит следующим образом:

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

Мое новое приложение выдает исключение, когда оно попадает в эту строку:

    EntityTransaction tx = em.getTransaction();

исключение:

A JTA EntityManager cannot use getTransaction()

Что достаточно ясно. Вопрос в том, как мне преобразовать мой код, чтобы транзакции управлялись контейнером. Предположительно, мои методы должны быть соответствующим образом аннотированы ... Вопрос в том, как?

Ответы на вопрос(3)

Ваш ответ на вопрос