Nicht verwenden ein EntityTransaction während der Verwendung von JTA
Ich erhalte diese Fehlermeldung:
javax.servlet.ServletException: java.lang.IllegalStateException:
Exception Description: Cannot use an EntityTransaction while using JTA.
Während Sie versuchen, zu verwenden, JPA und Java ee, Glassfish.
Meine persistence.xml die Datei ist wie folgt:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="acmeauction">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/MySQLJDBCResource</jta-data-source>
<class>it.uniroma3.acme.auction.model.User</class>
<class>it.uniroma3.acme.auction.model.Auction</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/acmeauction"/>
<property name="javax.persistence.jdbc.user" value="user"/>
<property name="javax.persistence.jdbc.password" value="password"/>
</properties>
</persistence-unit>
</persistence>
Was ich versuche zu tun, ist die Persistenz eines Objekts (Benutzer), auf diese Weise:
@ManagedBean
public class UserRepository implements Serializable{
@PersistenceUnit
EntityManagerFactory emf;
@PersistenceContext
private EntityManager em;
private static UserRepository instance;
/**
* Gives back the singleton UserRepository singleton.
*/
public static UserRepository getInstance() {
if (instance==null) {
instance = new UserRepository();
}
return instance;
}
private UserRepository() {
emf = Persistence.createEntityManagerFactory("acmeauction");
em = emf.createEntityManager();
}
/**
* Save and persist a new User.
*/
public void save(User user) {
em.getTransaction().begin();
em.persist(user);
em.getTransaction().commit();
}
}
Während, wenn Sie versuchen, UserRepository von einer einfachen Java-Anwendung, funktioniert es einwandfrei.
Vielen Dank im Voraus,
EIN
InformationsquelleAutor der Frage andreaxi | 2012-06-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie die Fehlermeldung heißt, wenn Sie mit JTA-Transaktionen, müssen Sie die Verwendung von JTA.
Entweder JTA-UserTransaction, begin/commit der Transaktion, oder verwenden Sie eine RESOURCE_LOCAL persistence unit und non-jta-DataSource.
Sehen,
http://en.wikibooks.org/wiki/Java_Persistence/Transactions
InformationsquelleAutor der Antwort James
Sie nicht benutzen soll
em.getTransaction().begin();
nochem.getTransaction().commit();
diese Hinweise sind mitRESOURCE_LOCAL
Transaktion geben.In Ihrem Fall die Transaktion verwaltet der container, in dem ersten Einsatz der
EntitiyManager
in Ihrer Methode, die container überprüft, ob eine aktive Transaktion oder nicht, wenn es keine Transaktion aktiv ist, dann schafft es einer, und wenn der Methodenaufruf beendet, die Transaktion vom container. So, am Ende der Methode sollte so Aussehen:Den container kümmert sich um die Transaktion, dass JTA.
InformationsquelleAutor der Antwort Joe Almore