2009-12-25 12 views
11
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="data.emf" /> 
</bean> 

<tx:annotation-driven transaction-manager="transactionManager" /> 


<bean id="transactionManager2" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="data.emf" /> 
</bean> 

<tx:annotation-driven transaction-manager="transactionManager2" /> 


Nel mio livello di servizio, posso usare @Transactional(name="transactionManager2"); per identificare quale gestore delle transazioni utilizzare se ho più gestori di transazioni?molla più origini dati @Transactional

+2

Perché pensi di aver bisogno di due gestori delle transazioni? – duffymo

risposta

21

è possibile specificare quale direttore tx da utilizzare con @Transactional utilizzando il value attribute: Un valore

qualificazione per la specificato transazione.

possono essere utilizzati per determinare il responsabile bersaglio delle transazioni, che corrisponde al valore di qualificatore (o il nome di fagioli) di un PlatformTransactionManager definizione specifica di fagioli.

Ad esempio:

@Transactional("txManager1"); 

In alternativa, è possibile utilizzare il più esplicito TransactionProxyFactoryBean, che vi dà un controllo più dettagliato su ciò che gli oggetti viene approssimata da ciò tx manager. Questo ancora utilizza le annotazioni, ma non rileva automaticamente i bean, è configurato esplicitamente su base bean-by-bean.

Questo normalmente non è un problema, ma non è saggio avere più gestori di transazioni a meno che non si abbia una buona ragione per farlo. Se ti accorgi che hai bisogno di due gestori di tx, di solito è meglio vedere se puoi accontentarti di uno. Ad esempio, se nel server dell'app sono configurate due origini dati, è possibile incorporarle in un solo JtaTransactionManager anziché in due separati JpaTransactionManager o DataSourceTransactionmanagers.

+0

per favore commentare il mio post su http://stackoverflow.com/questions/1962509/which-sessionfactory-should-be-use-for-transactionmanager – cometta

+0

ho letto da http://stackoverflow.com/questions/1902997/multiple- database-with-springhibernatejpa, utilizza più org.springframework.orm.jpa.JpaTransactionManager e sarà puntato da @transactional ("nome"). quindi in questo modo è ok? – cometta

+1

@skaffman, come posso associare due origini dati allo stesso transactionmanager se sto utilizzando DataSourceTransactionManager? – tsunade21

1

Ulteriori informazioni sulla necessità di più di un gestore delle transazioni. È possibile che si stia tentando di eseguire transazioni nidificate o separate in sequenza, quindi è possibile utilizzare diverse impostazioni di propagazione. È possibile ottenere ciò con la configurazione utilizzando il singolo gestore delle transazioni, vedere Transaction propagation.

Problemi correlati