Transaction / Session Problem

MySelV

Aktives Mitglied
Hallo zusammen,

ich habe ein kleines Problem und vielleicht habt ihr ja eine Idee:

Wir nutzen hier im Projekt einen GenericDao / GenericDaoImpl mit einem EntityManager. Das Handling des EntityManagers haben wir Spring überlassen und injizieren uns selbigen mit @PersistenceContext in den GenericDaoImpl. Bisher existiert nur ein EntityManager als protected Attribut in GenericDaoImpl.

Das Problem ist nun, dass beim Laden von Listen / Objekten mit Referenzen auf andere Listen, diese alle erst beim Zugriff geladen werden sollen (lazy loading). Dabei teilt mir Hibernate immer freundlich mit, dass keine Session vorhanden ist (failed to lazily initialize a collection, no session or session was closed). Um dies erst einmal zu umgehen, habe ich den EntityManager als Extended markiert (@PersistenceContext(type=PersistenceContextType.EXTENDED)). Das funktionierte bisher prima.

Nun habe ich einen DAO der keinem Entity zugeordnet ist und somit nicht von meinem GenericDao erbt. Damit hat dieser DAO einen eigenen EntityManager (?) und bringt sporadisch folgenden Fehler:
java.lang.IllegalStateException: Transaction not active
at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:47)
at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerSynchronization.afterCommit(ExtendedEntityManagerCreator.java:458)
...

Hat einer von euch eine Idee woran das liegen könnte?

Gruß Erik

Edit:

Ausschnitt dao-configuration:
[XML]<!-- EntityManagerFactory -->
<bean id="applEntityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="applDataSource" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>
<property name="jpaProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
<prop key="hibernate.default_schema">public</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">none</prop>
<prop key="hibernate.cache.use_second_level_cache">false</prop>
<prop key="hibernate.cache.provider_class" >org.hibernate.cache.NoCacheProvider</prop>
</props>
</property>
</bean>[/XML]

Ausschnitt GenericDaoImpl:
Java:
public class GenericDaoImpl<T, K> implements GenericDao<T, K> {
	
    	
	@PersistenceContext(type=PersistenceContextType.EXTENDED)
	protected EntityManager em;
	
	protected Class<T> clazz;
	...
}
 
G

Gelöschtes Mitglied 5909

Gast
du hast keinen transaction-manager gesetzt. Sobald du schreibst brauchst du einen.

und dann musst du @Transactional nutzen
 
Zuletzt bearbeitet von einem Moderator:

MySelV

Aktives Mitglied
Hups vergessen zu kopieren:
[XML]
<tx:annotation-driven proxy-target-class="false"
transaction-manager="txManager" />

<bean id="txManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="applEntityManagerFactory" />
<property name="dataSource" ref="applDataSource" />
</bean>[/XML]

@Transactional benutze ich - allerdings im Moment nur auf dem Interface. Muss ich die einzelnen Methoden auch mit @Transactional annotieren?
 
M

maki

Gast
@Transactional benutze ich - allerdings im Moment nur auf dem Interface.
Genau da sollte man es imho nicht machen ;)
Jedenfalls funzt da so nicht, ansonsten sollte man Interfaces sauber von dreckigen Implementierungsdetails halten ;)
 

MySelV

Aktives Mitglied
Tja lange gedacht es geht gut, bin ich nun doch wieder da :(

@Transactional ist inzwischen vom Interface an die Methoden in den Implementierungen gewandert und das hat bisher auch gut funktioniert. In einigen seltenen Fällen habe ich nun immernoch das Problem, dass ich eine IllegalStateException: Transaction not active bekomme.

Interessant ist, dass das Problem nur beim ersten Aufruf auftritt. Mit anderen Worten - ich rufe (mehrere) Methoden der DAO's in einem Workflow auf und bekomme beim ersten Zugriff die obige Fehlermeldung. Wenn ich danach mehrfach ( > 10x ) das gleiche Aufrufe funktioniert es jedes Mal tadellos.

Jemand eine Idee?

€dit: Gleich nochmal ein Nachtrag: Die Exception fliegt immer in der gleichen Methode / dem gleichen Aufruf des EntityManagers.

Edit2: Es geht. Fehler war nicht die Transaktion sondern ein Nullpointer bei der Übergabe an einen Parameter fürs Query. Hibernate hat wohl einfach eine "naheliegende" Fehlermeldung geworfen
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Warum ist die Transaction not active? Data Tier 7
M Session plötzlich closed? Data Tier 0
D JPA Entities mit Proxies ausserhalb einer Session (Lazy Loading) Data Tier 0
E JPA Session.delete einer Entity wird nicht ausgeführt Data Tier 2
E Hibernate: Session vs EntityManager Data Tier 3
G JSF Hibernate no session or session was closed Data Tier 12
N Problem beim session.flush(); Data Tier 17
S Hibernate - session-per-request/open session view oder was? Data Tier 3
S Hibernate: Session is closed! Data Tier 7
N Problem beim initialisieren des Caches Data Tier 0
S JPA Problem mit Cascading Data Tier 1
M Eclipse 4 RCP Hibernate Problem Data Tier 3
C JPA FetchType.LAZY, Relation @OneToMany und Problem mit dem update Data Tier 1
K Problem mit EJBs und Transaktionen Data Tier 0
G JPA: Entity Klasse @JoinColumns Problem Data Tier 2
M JPA Problem: java.sql.SQLSyntaxErrorException: Data Tier 7
H Hibernate Problem mit Lazy Loading bei @OneToMany Collections Data Tier 5
M MySql und JPA-Timestamp Problem Data Tier 8
J Hibernate Problem bei Master-Detail-Tabellen Data Tier 5
A JPA - ManyToMany Problem - keine Unique Mehrfachzuweisungen Data Tier 4
M Problem beim Laden von Objekten, die von anderen Applikationen in eine DB eingefügt wurden Data Tier 5
M Problem mit @Temporal Mapping und SQL Server Data Tier 3
P JPA - HashMap mit Many-to-Many Relation Problem Data Tier 4
B Problem mit @ManyToMany und CascadeType.ALL Data Tier 3
Blackskyliner [JPA][Anfänger] Problem mit Wertzuweisung aus Verbundtabelle Data Tier 2
B Problem mit org.hibernate.LazyInitializationException Data Tier 11
B DatenquellenUpdater extends Thread - Problem mit PermGenSpace Data Tier 5
S Problem beim Insert mit Hibernate Data Tier 9
Y [openJPA] Problem mit Transaktion? Data Tier 2
A @SecondaryTable Problem Data Tier 9
Y Postgres und JPA - Primärschlüssel Problem Data Tier 3
P SQL PRoblem Hibernate? Data Tier 8
Y EJB Problem mit Transaktionen Data Tier 7
G JPA 2.0 Query Problem Data Tier 3
P CORBA Problem bei EJB 3.0 Anwendung in Glassfish v3 Data Tier 7
F Problem mit Hibernate Schema Update Data Tier 2
S Lazy loading Problem Data Tier 2
M Insert-Problem mit JPA/Hibernate Data Tier 4
megachucky JPA - Problem mit Persistence Unit / Context Data Tier 1
H Hibernate Problem Data Tier 4
D Performance Problem mit Prepared Statement Data Tier 6
T Problem mit openJPA Data Tier 7
P Problem mit Data Tier 9
GilbertGrape Cascade Problem (Hibernate) Data Tier 3
C JPA Problem mit attributeOverride und mehrspaltigem PK Data Tier 2
B select "neu" statement Problem (jpql) Data Tier 8
boxi Hibernate Lazy Loading Problem Data Tier 2
M Problem mit Hibernate und SLF4J - NoSuchMethodException Data Tier 3
G Connection Problem - WAS 6.1, Hibernate, OS Authentication Data Tier 1
K Hibernate update-Problem Data Tier 36
J hibernate problem Data Tier 14
N Hibernate - Problem mit Update/Insert Data Tier 4
B Problem mit @PersistenceContext Data Tier 4
G Problem with mapped of the tables at one to one relationship Data Tier 8

Ähnliche Java Themen

Neue Themen


Oben