2015-06-09 15 views
0

我無法獲得@Transactional註釋以使用xml定義的bean。我不知道xml定義與它有什麼關係。也許這是OSGi的問題。@Transactional與xml定義的bean不起作用。 (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代理它的作品。

我在同一捆的context.xml其中bean定義指定<tx:annotation-driven transaction-manager="txManager" />

MyDao只是一個簡單的類實現一個方法的接口。

沒有例外,它只是不爲myDao創建代理。

什麼可能會丟失?

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

告訴我們如何將'myDao'注入到使用它的bean中。 –

+0

@AaronDigulla:更新 –

+0

哪個版本的Spring? –

回答

0

試試這個:

  1. 類豆myDao應該是MyDao中(DAO而不是TransactionProxyFactoryBean的類型)。
  2. MyDao.java的每個公共方法中加上註釋@Transactional。然後

春天應該會自動創建一個代理爲您服務。您的問題中的方法看起來像「我嘗試自己創建和配置代理工廠」。

雖然肯定會有這樣做,我不知道你會怎麼做。相反,我依靠<tx:annotation-driven>@Transactional註釋。

編輯你使用Spring 2.5.6A。

我只是檢查和@Transactional與Spring 1.2的加入。但我不確定何時添加<tx:annotation-driven>。相關的EnableTransactionManagement增加了3.1。

但XML元素是在此架構:http://www.springframework.org/schema/tx/spring-tx-2.5.xsd所以應該在2.5可用。

也許你錯過了類路徑上必需的AOP庫(cglib)?

+0

這就是我所做的。我提供的例子是展示什麼爲我工作。當我試圖用MyDao類型和@Transactional註解來實現這一點,並且不會創建代理。 –

+0

檢查類路徑和日誌輸出。在日誌輸出中查找錯誤,並且Spring實際上會選擇''元素。 –

+1

我沒有使用cglib,但myDao有一個接口,所以它應該使用接口代理。我會尋找任何錯誤。 –

相關問題