JBoss 5.0.1GA で JSF アプリケーションをセットアップして、テーブルにユーザーのリストを表示し、各ユーザーの横にあるボタンを使用して個々のユーザーを削除できるようにしました。
deleteUser が呼び出されると、JBoss から注入された EntityManager を取得する UserDAOBean に呼び出しが渡されます。
私はコードを使用しています
public void delete(E entity)
{
em.remove(em.merge(entity));
}
ユーザーを削除します (コードは JPA チュートリアルの c&p でした)。em.remove(entity) を呼び出すだけでは効果がなく、同じ例外が発生します。
この行に到達すると、TransactionRequiredException が発生します。
(明らかに無関係なスタックトレースのものをスキップします)
...
20:38:06,406 ERROR [[Faces Servlet]] Servlet.service() for servlet Faces Servlet throwed exception javax.persistence.TransactionRequiredException: EntityManager must be access within a transaction at org.jboss.jpa.deployment.ManagedEntityManagerFactory.verifyInTx(ManagedEntityManagerFactory) .java:155) org.jboss.jpa.tx.TransactionScopedEntityManager.merge(TransactionScopedEntityManager.java:192) at.fhj.itm.utils.DAOImplTemplate.delete(DAOImplTemplate.java:54) at.fhj.itm. UserBean.delete(UserBean.java:53) at sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブ メソッド)
...
すでに手動で管理されたトランザクション (em.getTransaction().begin() + .commit() ) をラップしようとしましたが、JBoss コンテナー内で許可されていないため失敗しました。UserTransaction でも成功しませんでした。この問題を Web で検索しても、同様のケースと解決策は見つかりませんでした。
誰かが以前に似たようなことを経験し、これに対する解決策を見つけましたか?