2013-10-01 67 views
1

在我的ActiveMQ配置中,我想將默認數據庫鎖定事務隔離級別更改爲TRANSACTION_REPEATABLE_READActiveMQ:如何正確設置數據庫鎖定事務隔離類型?

API documentation寫道:

public void setTransactionIsolation(int transactionIsolation)

設置的事務隔離級別的其他東西, TRANSACTION_READ_UNCOMMITTED這允許髒的隔離級別可能 無法在集羣數據庫環境中實現的,從而更嚴格的 和昂貴可能需要選項TRANSACTION_REPEATABLE_READ 請參閱隔離級別常量Connection

在XML配置中,jdbcPersistenceAdaptertransactionIsolation屬性只接受整型值,所以我不能使用Connection.TRANSACTION_REPEATABLE_READ常數直接,但只有它的value (4)代替:

<persistenceAdapter> 
    <jdbcPersistenceAdapter dataDirectory="${activemq.data}" dataSource="#mysql-ds" transactionIsolation="4" lockKeepAlivePeriod="5000"> 
     <locker> 
      <lease-database-locker lockAcquireSleepInterval="10000"/> 
     </locker> 
    </jdbcPersistenceAdapter> 
</persistenceAdapter> 

有沒有一種方法,我可以指定常量而不是硬編碼數字「4」?

由於ActiveMQ是基於Spring的,我想我可以嘗試通過使用<util:constant>莫名其妙地分配給它,但無法找到該怎麼辦呢?

回答

0

試試這樣:

<util:constant id="transactionType" static-field="java.sql.Connection.TRANSACTION_REPEATABLE_READ" /> 

編輯:

的問題是不是在春天,但在ActiveMQ的XML模式:

<xs:attribute name="transactionIsolation" type="xs:integer"> 

所以它不會接受比硬編碼INT任何其他值 - 你可以嘗試把這裏屬性佔位符:

transactionIsolation="#{myproperty}" 

,但我不知道這是否會工作。

解決此問題的方法是以某種方式配置activemq,使用純彈簧豆(bean id=...),而不使用專用的amq標記。 編輯2:這裏你有純彈簧標籤的樣本配置http://activemq.apache.org/jms-and-jdbc-operations-in-one-transaction.html

+0

是的,我能讀出常數值,但我不能將它傳遞給'',因爲XML驗證失敗,因爲非整數值。 .. – Laimoncijus

+0

@Laimoncijus嘗試從我的初始答案的編輯部分解決方法 – smajlo