春天的问题。如何确保在提交后调用拦截器?

时间:2011-07-22 21:32:25

标签: java spring aop commit interceptor

我使用spring 3.0.5和hibernate。

  1. 拦截器正在工作。
  2. 将域ID发送到jms队列。
  3. 消费者收回它并搜索域,但比数据库提交更快,我得到null。
  4. 如何避免在db commit之后调用拦截器?

    appCtx.xml

    <tx:annotation-driven order="10"  />
    
    
     <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
            <property name="entityManagerFactory" ref="entityManagerFactory" />
        </bean>
    
    <aop:aspectj-autoproxy />
    
    <bean id="domainProducerHandler" depends-on="domainEventService"
            class="org.test.service.DomainProducerHandler" factory-method="aspectOf">
            <property name="domainEventService" ref="domainEventService" />
            <property name="order" value="1" />
    </bean>
    
    ===================service class=====================
    @SendDomainEvent
    @Transactional
    public ProtoMessage sendDonation(String aa) {
       Domain domainObj = new Domain();
       domainRepository.saveAndFlush(domainObj);
    
       return domain;
    }
    
    
    ==================interceptor class===================**
    
    
    
    
        @AfterReturning(
        pointcut="@annotation(org.test.service.SendDomainEvent)",
        returning="retVal")
    public void processDomainReturn(Object retVal) {        
    
    ....
    
    try {       
        domainEventService.publishToQueue(endDonationSuccessEvent);
    } catch (Exception e) {
        log.error("error during send endDonationSuccessEvent: " + e);
    }
    

    }

  5. Interceptor类实现Ordered接口。我将order参数设置为tx:annotation-driven order =“10”但它不起作用。

1 个答案:

答案 0 :(得分:0)

“订单参数”是什么意思? Spring AOP中ordering advice支持的方式是@Ordered annotationorg.springframework.core.Ordered接口,它还定义了最高和最低优先级的常量。