EntityManager wirft TransactionRequiredException auf merge() in der JBoss JSF-bean

Ich habe eine JSF-Anwendung auf JBoss 5.0.1 GA eine Liste der Benutzer in einer Tabelle und erlauben das löschen einzelner Benutzer über eine Schaltfläche neben jedem user.

Wenn deleteUser aufgerufen wird, wird der Anruf wird an einen UserDAOBean das wird ein EntityManager injiziert von JBoss.

Ich bin mit dem code

public void delete(E entity)
{
    em.remove(em.merge(entity));
}

um den Benutzer zu löschen (code war c&p aus einem JPA tutorial). Nur zum telefonieren em.remove(entity) hat keine Wirkung und verursacht noch immer die gleiche Ausnahme.

Wenn diese Linie erreicht ist, ich bin immer eine TransactionRequiredException:

(überspringen offenbar irrelevant stacktrace-Zeug)

...

20:38:06,406 FEHLER [[Faces-Servlet]]
- Servlet.service() for servlet Faces
Servlet warf Ausnahme
javax.die Persistenz.TransactionRequiredException:
EntityManager muss der Zugang in einem
Transaktion an
org.jboss.jpa.- Bereitstellung.ManagedEntityManagerFactory.verifyInTx(ManagedEntityManagerFactory.java:155)
bei
org.jboss.jpa.tx.TransactionScopedEntityManager.merge(TransactionScopedEntityManager.java:192)
bei
an.fhj.itm.utils.DAOImplTemplate.löschen(DAOImplTemplate.java:54)
bei
an.fhj.itm.UserBean.löschen(UserBean.java:53)
bei
Sonne.reflektieren.NativeMethodAccessorImpl.invoke0(Muttersprache
Methode)

...

Ich habe bereits versucht, wickeln Sie eine manuell verwaltete Transaktion (em.getTransaction().begin() + .commit () ), aber dies schlug fehl, da es nicht gestattet ist innerhalb der JBoss-container. Ich hatte keinen Erfolg mit UserTransaction entweder. Das suchen im Internet für dieses Problem tauchte auch keinen ähnlichen Fall und Lösung.

Hat jemand ähnliches erlebt vor und gefunden eine Lösung?

  • "Ich habe bereits versucht, wickeln Sie eine Transaktion um ihn herum, doch dies schlug fehl, da es nicht gestattet ist innerhalb der JBoss-container." - was ist nicht erlaubt? Transaktionen? Nicht wahr. Bitte aktualisieren Sie und erklären Sie diese Ausführlicher.
  • Und warum denkst du, es ist notwendig, zu verschmelzen, bevor Sie Sie entfernen ein Objekt? Wenn etwas falsch ist, würde ich bestreiten.
  • Geklärt (hoffe ich). Ich meinte die manuelle Verwaltung von Transaktionen auf den EntityManager. Des weiteren ist das entfernen(merge()) vorhanden ist, wird in Beispielen über das web (auch für Oracle). Dennoch versuchte sich ein einfacher entfernen, was verursacht noch immer die gleiche Ausnahme.
  • Ich glaube nicht, dass ich würde empfehlen, dass merge. Nehmen Sie es aus und sehen, wenn Ihre situation verbessert.
  • Nein ist es nicht. Sorry.
InformationsquelleAutor Kosi2801 | 2009-07-05
Schreibe einen Kommentar