Hi,
Ich versuche schon länger vergeblich, mit Java EE 5, JPA und Hibernate unter Glassfish v3 ContainerManaged Transactions zu verwenden.
Mein Problem ist wahrscheinlich, dass ich weder einen EntityManager noch eine EntityManagerFactory injiziert bekomme, der einzig funktionierende Weg ist:
Wenn ich mir von diesem einen EntityManager erstellen lasse, so scheint dieser aber nicht mit der Transaktion verknüpft zu sein, denn auch bei einer Exception landen alle vorherigen Änderungen in der Datenbank
Meine persistence.xml:
[XML]<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.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_1_0.xsd">
<persistence-unit name="unitname" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jdbc/datasource</jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="hibernate.archive.autodetection" value="class"/>
<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.SunONETransactionManagerLookup"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
</persistence>
[/XML]
BeanManaged Transaktionen funktionieren mit dem so erstellten EntityManager aber problemlos.
Kann mir vielleicht jemand sagen wie es denn richtig funktionieren sollte? Bei google-Suchen finde ich leider nicht viel, oft wird dies anscheinend auch mit Spring verwechselt.
Ich hoffe mir kann jemand helfen.
Grüße
Ich versuche schon länger vergeblich, mit Java EE 5, JPA und Hibernate unter Glassfish v3 ContainerManaged Transactions zu verwenden.
Mein Problem ist wahrscheinlich, dass ich weder einen EntityManager noch eine EntityManagerFactory injiziert bekomme, der einzig funktionierende Weg ist:
Java:
Persistence.createEntityManagerFactory("unitname");
Wenn ich mir von diesem einen EntityManager erstellen lasse, so scheint dieser aber nicht mit der Transaktion verknüpft zu sein, denn auch bei einer Exception landen alle vorherigen Änderungen in der Datenbank
Meine persistence.xml:
[XML]<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.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_1_0.xsd">
<persistence-unit name="unitname" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jdbc/datasource</jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="hibernate.archive.autodetection" value="class"/>
<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.SunONETransactionManagerLookup"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
</persistence>
[/XML]
BeanManaged Transaktionen funktionieren mit dem so erstellten EntityManager aber problemlos.
Kann mir vielleicht jemand sagen wie es denn richtig funktionieren sollte? Bei google-Suchen finde ich leider nicht viel, oft wird dies anscheinend auch mit Spring verwechselt.
Ich hoffe mir kann jemand helfen.
Grüße