provo utilizzando il parallelStream()
in DAO con la Primavera @Transactional
annotazioni e riceverai problema:Java .parallelStream() con i metodi di primavera annotato
@Transactional
public void processCollection(Collection<Object> objects) {
objects.parallelStream()
.forEach(this::processOne); //throw exception
}
@Transactional
public void processOne(Object o) {
...
}
Opere corretto:
@Transactional
public void processCollection(Collection<Object> objects) {
objects.stream()
.forEach(this::processOne); //work correctly
}
@Transactional
public void processOne(Object o) {
...
}
Eccezione:
org.hibernate.HibernateException: No Session found for current thread
org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:106)
org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:978)
Come è possibile utilizzare i metodi annotati @Transactional
entro il parallelStream()
?
Aggiornamento Perchè questo accada Spring transaction manager and multithreading ma spero molla 4 con Java 8 supporto in grado di fornire una soluzione per questo. Qualche idea?
Una domanda banale, ma si ottiene lo stesso errore se si utilizza stream(). Parallel()? –
Sì, ho lo stesso problema con stream(). Parallel() – VladS
http://stackoverflow.com/questions/16835974/spring-transaction-manager-and-multithreading –