Spring + bitronix + Oracle aq

 
 
 
Сообщения:797
Если кто-нибудь настраивал ранее такую связку, просьба поделиться конфигами.

Нет ничего проще, чем заблудиться в иллюзиях, нет ничего сложнее, чем освободиться от них.
 
 
Сообщения:797
Получилось настроить. Пришлось чуть подправить исходники aqapi.jar. Там вот такое чудо было:

 AQjmsGeneralDBConnection(AQjmsDBConnMgr var1, XAConnection var2, boolean var3, boolean var4) throws JMSException {
        this.m_connMgr = var1;
        this.m_xaConn = var2;
        this.m_isExternal = var3;
        this.m_force = var4;
        this.providerKey = this.getProviderKey();
    }

 private String getProviderKey() throws JMSException {
        try {
              OracleConnection var1 = (OracleConnection) this.m_dbConn;
              String var2 = var1.getURL();
             ...


Все это по понятным причинам валилось с NullPointerException.

Исправление:
 OracleConnection var1 = (OracleConnection)this.m_dbConn;
            if (var1 == null) {
                var1 = (OracleConnection) m_xaConn.getConnection();
            }
            String var2 = var1.getURL();
            var1.close();


Далее, все как обычно:

 <!-- Bitronix Transaction Manager embedded configuration -->
    <bean id="btmConfig" factory-method="getConfiguration"
          class="bitronix.tm.TransactionManagerServices">
        <property name="serverId" value="spring-btm" />
    </bean>

    <!-- Create the BTM transaction manager -->
    <bean id="BitronixTransactionManager" factory-method="getTransactionManager"
          class="bitronix.tm.TransactionManagerServices" depends-on="btmConfig"
          destroy-method="shutdown" />

    <!-- Spring JtaTransactionManager -->
    <bean id="jtaTransactionManager"
          class="org.springframework.transaction.jta.JtaTransactionManager">
        <property name="transactionManager" ref="BitronixTransactionManager" />
        <property name="userTransaction" ref="BitronixTransactionManager" />
    </bean>

     <bean id="xaJmsConnectionFactory" class="bitronix.tm.resource.jms.PoolingConnectionFactory"
          init-method="init" destroy-method="close">
        <property name="className" value="oracle.jms.AQjmsXAConnectionFactory" />
        <property name="uniqueName" value="jmsAQ" />
        <property name="minPoolSize" value="1" />
        <property name="maxPoolSize" value="2" />
        <property name="driverProperties">
            <props>
                <prop key="JdbcURL">
                    jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XE)))
                </prop>
                <prop key="username">sys as sysdba</prop>
                <prop key="password">secret</prop>
            </props>
        </property>
    </bean>
  


и , если кому надо, настройки jms компонента для camel:
  <bean id="jmsAQ" class="org.apache.camel.component.jms.JmsComponent">
       <property name="connectionFactory" ref="xaJmsConnectionFactory"/>
        <property name="transacted" value="true"/>
        <property name="transactionManager" ref="jtaTransactionManager"/>
    </bean>

Нет ничего проще, чем заблудиться в иллюзиях, нет ничего сложнее, чем освободиться от них.
Изменен:08 окт 2016 20:30
 
Модераторы:wedens
Сейчас эту тему просматривают:Нет