JPA-Transaktionen Webapplication

Status
Nicht offen für weitere Antworten.

Marsman

Bekanntes Mitglied
Hallo Ihr!

Ich verwende für meine Web-Anwendung Spring, JPA und davon den JpaTransactionManager:

Code:
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="jpaVendorAdapter">
    <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
      <property name="database" value="MYSQL" />
      <property name="showSql" value="false" />
    </bean>
  </property>
</bean>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
  <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
  
<tx:annotation-driven transaction-manager="transactionManager" />

1. Bisher bin ich davon ausgegangen, dass dadurch jeder Request eine Transaktion ist. Tritt innerhalb des Request eine Exception auf, wird ein Rollback ausgeführt. Andernsfalls Commit. Stimmt das?

2. Außerdem würde ich trotzdem in bestimmten Situationen gerne innerhalb des Request Commit oder Rollback wahlweise ausführen können. Wie kann ich das realisieren?


Danke im Voraus,

Titus
 

byte

Top Contributor
zu 1.) Durch die von dir gepostete Konfiguration wird nicht automatisch jeder Request in einer Transaction ausgeführt. Du kannst mit dieser Konfiguration im Code per @Transactional Annotation deklarieren, welche Methoden innerhalb einer Transaktion ablaufen sollen: Chapter9.Transaction management

Transaktion pro Request erreicht man durch das Open Session In View Pattern. Das unterstützt Spring mit einem speziellen Filter: OpenSessionInViewFilter (Spring Framework API 2.5)

zu 2.) Lässt sich mit deklarativem Transaktionsmanagement realisieren (siehe erster Link).
 

Marsman

Bekanntes Mitglied
Vielen Dank für die Infos. :)

Leider scheint das Transaktions-Handling bei mir noch nicht zu funktionieren. Ich habe mal das Logging für org.springframework.transaction auf debug gesetzt. Es wird nichts ausgegeben. Auch habe ich versuchsweise mal eine meiner Service-Klassen mit @Transactional(readOnly=true) versehen und in einer Methode trotzdem ein persist() ausgeführt: Die Daten werden zwar persistiert, aber es kommt keine Exception wegen des Schreibzugriffs. Irgendwie scheint generell noch etwas zu fehlen. Nur was??? (Spring-Version ist übrigens 2.0).

Gruß, Titus
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben