非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()
これは十分に明らかです。問題は、トランザクションをコンテナで管理するようにコードをどのように変換するかです。おそらく、私のBeanメソッドに適切な注釈を付ける必要があります...問題はどのようにですか?