2014-03-27 3 views
0

По какой-то причине один из моей EJB фасоли косвенно вызывает DAO, который аннотированный с пружинами @Transactional аннотациейEJB 3 и Spring @Transactional

Когда я запускаю код с выше настройками, я получаю исключение транзакции, как показано ниже

javax.ejb.EJBException: org.springframework.transaction.TransactionSystemException: Could not commit Hibernate transaction; nested exception is org.hibernate.TransactionException: commit failed 
at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:166) ~[jboss-as-ejb3-7.1.1.Final.jar!/:7.1.1.Final] 
at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:230) ~[jboss-as-ejb3-7.1.1.Final.jar!/:7.1.1.Final] 
at org.jboss.as.ejb3.tx.CMTTxInterceptor.required(CMTTxInterceptor.java:304) ~[jboss-as-ejb3-7.1.1.Final.jar!/:7.1.1.Final] 
at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:190) ~[jboss-as-ejb3-7.1.1.Final.jar!/:7.1.1.Final] 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) ~[jboss-invocation-1.1.1.Final.jar!/:1.1.1.Final] 
at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41) ~[jboss-as-ejb3-7.1.1.Final.jar!/:7.1.1.Final] 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) ~[jboss-invocation-1.1.1.Final.jar!/:1.1.1.Final] 
at org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:59) ~[jboss-as-ejb3-7.1.1.Final.jar!/:7.1.1.Final] 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) ~[jboss-invocation-1.1.1.Final.jar!/:1.1.1.Final] 
at org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50) ~[jboss-as-ee-7.1.1.Final.jar!/:7.1.1.Final] 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) ~[jboss-invocation-1.1.1.Final.jar!/:1.1.1.Final] 
at org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(AdditionalSetupInterceptor.java:43) ~[jboss-as-ejb3-7.1.1.Final.jar!/:7.1.1.Final] 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) ~[jboss-invocation-1.1.1.Final.jar!/:1.1.1.Final] 
at org.jboss.as.ee.component.TCCLInterceptor.processInvocation(TCCLInterceptor.java:45) ~[jboss-as-ee-7.1.1.Final.jar!/:7.1.1.Final] 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) ~[jboss-invocation-1.1.1.Final.jar!/:1.1.1.Final] 
at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61) ~[jboss-invocation-1.1.1.Final.jar!/:1.1.1.Final] 
at org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:165) ~[jboss-as-ee-7.1.1.Final.jar!/:7.1.1.Final] 
at org.jboss.as.ee.component.ViewDescription$1.processInvocation(ViewDescription.java:173) ~[jboss-as-ee-7.1.1.Final.jar!/:7.1.1.Final] 
at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) ~[jboss-invocation-1.1.1.Final.jar!/:1.1.1.Final] 
at org.jboss.as.ejb3.component.interceptors.AsyncFutureInterceptorFactory$1$1.runInvocation(AsyncFutureInterceptorFactory.java:71) ~[jboss-as-ejb3-7.1.1.Final.jar!/:7.1.1.Final] 
at org.jboss.as.ejb3.component.interceptors.AsyncInvocationTask.run(AsyncInvocationTask.java:73) ~[jboss-as-ejb3-7.1.1.Final.jar!/:7.1.1.Final] 
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) ~[na:1.6.0_29] 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) ~[na:1.6.0_29] 
at java.lang.Thread.run(Unknown Source) [na:1.6.0_29] 
at org.jboss.threads.JBossThread.run(JBossThread.java:122) ~[na:na] 

Мое определение боб для менеджера транзакций выглядит

<bean id="transactionManager" 
    class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory"> 
     <ref bean="sessionFactory" /> 
    </property> 
</bean> 

Может кто-нибудь пролить некоторый свет на то, что это вопрос и как я должен correc это?

+0

Я не думаю, что вы предоставили достаточно информации. Можем ли мы увидеть некоторые из кода, который работает? Возможно, немного трассировки стека над первой строкой, которую вы указали? – jervine10

+0

Вы используете EJB, но пытаетесь локальные транзакции, я ожидаю, что вам придется использовать транзакции JTA для участия в текущей транзакции. –

ответ

0

Попробуйте пометить свой метод EJB @TransactionAttribute(NOT_SUPPORTED).

Однако, если вы хотите использовать Spring и EJB вместе, и даже с Hibernate (JPA), вам следует полагаться только на контейнерные услуги: разрешить JABSS поднять JPA, получить менеджер транзакций Spring от JNDI (достаточно для того, чтобы add <tx:jta-transaction-manager/>) и т. д.

С другой стороны, если у вас есть весна, зачем вам нужен EJB?

+0

Спасибо Артем, я попытался аннотировать мои классы dao с помощью @TransactionAttribute (NOT_SUPPORTED), похоже, что проблема не устраняет проблему. Если я использую , как мне предоставить источник данных .sessionFactory и т. Д. –

+0

1. Зачем вам 'sessionFactory', если вы используете JPA? 2. 'DataSource' также должен быть захвачен контейнером JBOSS, и вы можете получить его для Spring из JNDI. –

Смежные вопросы