2010-09-28 6 views
12

ho incontrato uno strano problema con la transazione di primavera. La mia applicazione utilizza Spring con EJB. Gli EJB invocano anche le classi di servizio Spring annotate con @Transaction. Ho usato Spring JtaTransactionManager per la gestione delle transazioni. L'applicazione è impacchettata come un file EAR e viene distribuita su jboss5.0 e funziona correttamente. Ma quando ordino a jboss di usare un classloader separato per ogni applicazione EAR, l'inizializzazione della molla dà errore.No JTA UserTransaction disponibili - specificare 'UserTransaction' o 'userTransactionName'

org.springframework.beans.factory.BeanCreationException: Error creating bean 
    with name 'transactionManager' defined in ServletContext resource 
    [/WEB-INF/applicationContext.xml]: Invocation of init method failed; 
nested exception is java.lang.IllegalStateException: No JTA UserTransaction 
    available - specify either 'userTransaction' or 'userTransactionName' or 
    'transactionManager' or 'transactionManagerName' 

Perché l'inizializzazione della primavera non è successo?

Grazie

+0

Quale impostazione è stata modificata in JBoss? – skaffman

+0

Ho modificato il file ear-deployer-jboss-beans.xml nella directory "deployers" per impostare la proprietà "isolated" su true. – Chir

risposta

0

prova ad aggiungere

@EnableTransactionManagement 

su una classe di configurazione in cui si tiene il fagiolo config

che ha lavorato per me quando ho avuto quel problema, forse avrete bisogno di altra piattaforma specifica implementazione del gestore delle transazioni, ma questo è un buon punto di partenza.

@Bean 
public PlatformTransactionManager transactionManager() { 
    JpaTransactionManager txManager = new JpaTransactionManager(); 
    txManager.setEntityManagerFactory(entityManagerFactory()); 
    return txManager; 
} 
+0

Sto riscontrando un problema simile durante la distribuzione dell'app sboot in IBM WAS, verificherò che funzioni. – Espresso