@Transactional与xml定义的bean无法正常工作。 (OSGi的)

时间:2015-06-09 12:37:31

标签: java spring osgi transactional

我无法获得@Transactional注释来使用xml定义的bean。我不知道xml定义是否与它有关。也许是OSGi的问题。

<bean id="myDao"
          class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="transactionManager" ref="txManager"/>
        <property name="target" ref="myDao_t"/>
        <property name="transactionAttributes">
            <props>
                <prop key="*">PROPAGATION_MANDATORY,
                    timeout_60,
                    -Exception
                </prop>
            </props>
        </property>
    </bean>

当我使用上面的xml指定代理时,它可以工作。

我在bean定义所在的bundle-context.xml中指定了<tx:annotation-driven transaction-manager="txManager" />

MyDao只是一个用一个方法实现接口的简单类。

没有例外,它只是没有为myDao创建代理。

可能缺少什么?

<bean id="myPlanner" class="com.something.planner.MyPlanner">
     <property name="myDao" ref="myDao" />
</bean>

1 个答案:

答案 0 :(得分:0)

试试这个:

  1. bean myDao的类应该是MyDao(DAO的类型而不是TransactionProxyFactoryBean)。
  2. 将注释@Transactional放在MyDao.java
  3. 中的每个公开方法上

    然后Spring应该自动为您创建代理。您问题中的方法看起来像#34;我尝试自己创建和配置代理工厂&#34;。

    虽然肯定会有这样做,但我并不确切知道你会怎么做。相反,我依赖<tx:annotation-driven>@Transactional注释。

    编辑您正在使用Spring 2.5.6A。

    我刚刚检查过,并在Spring 1.2中添加了@Transactional。但是我不确定添加<tx:annotation-driven>的时间。相关的EnableTransactionManagement添加了3.1。

    但是XML元素在这个模式中:http://www.springframework.org/schema/tx/spring-tx-2.5.xsd所以它应该在2.5中可用。

    也许您在类路径上缺少必要的AOP库(cglib)?