2015-03-23 4 views
1

Я пытаюсь доказать, что мне не нужен activemq rar, развернутый в JBoss EAP 6.3, чтобы использовать транзакции XA ... Я бы хотел использовать только активную клиентскую банку mq. Я создал простой проект весенней загрузки и выставил метод, который открывается через спокойную веб-службу. Следующий код корректно откатывается, если у меня развернут активный-mq rar.Операции XA, использующие весну и activemq

@Transactional 
public void work() throws Exception { 

    ConnectionFactory connectionFactory = (ConnectionFactory) this.context 
      .getBean("jmsConnectionFactory"); 

    // Send a message 
    MessageCreator messageCreator = new MessageCreator() { 
     @Override 
     public Message createMessage(Session session) throws JMSException { 
      return session.createTextMessage("Test message!"); 
     } 
    }; 

    JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory); 
    System.out.println("Sending a new message."); 
    jmsTemplate.send("test-destination", messageCreator); 

    throw new Exception("Something bad happened!!"); 
} 

Однако, когда я создаю свой собственный ConnectionFactory через JNDI, код не откатить и сообщение не отправляется.

@Transactional 
public void work() throws Exception { 

    ConnectionFactory connectionFactory = null; 
    try { 
     Context ctx = new InitialContext(); 
     connectionFactory = (ConnectionFactory) ctx.lookup("java:/ConnectionFactory"); 
    } catch (NamingException e) { 
     e.printStackTrace(); 
     throw new RuntimeException(e); 
    } 

    // Send a message 
    MessageCreator messageCreator = new MessageCreator() { 
     @Override 
     public Message createMessage(Session session) throws JMSException { 
      return session.createTextMessage("Test message!"); 
     } 
    }; 

    JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory); 
    System.out.println("Sending a new message."); 
    jmsTemplate.send("test-destination", messageCreator); 

    throw new Exception("Something bad happened!!"); 
} 

То, что я хотел бы понять, что весна-ботинки делают во время загрузки, чтобы обеспечить поддержку XA, когда ActiveMQ гАг развернут в качестве адаптера ресурсов на EAP. Если я это понимаю, я думаю, что мне нужно будет просто скомпоновать банку с активным mq-клиентом и банком базы данных в моем весеннем приложении (не основанном на Spring-загрузке) и по-прежнему предоставлять поддержку XA, т. Е. Получить весну для управления транзакциями XA путем делегирования в PlatformTransactionManager.

Любая помощь будет оценена по достоинству.

Спасибо, будет

+0

Какая версия Spring Boot и почему вы не используете Spring boot ... Идет, если вы вручную настроите все, а не позволяете Spring Boot делать автоматическую настройку. –

+0

Привет, Я использую spring-boot 1.2.1, чтобы попытаться доказать суть. Я хотел бы использовать весеннюю обувь. Тем не менее, я работаю с 5-летней системой (которая использует весну, iBatis размещена на weblogic) Они перемещают приложение в JBoss EAP и JBoss A-MQ. Они требуют поддержки транзакций XA и . Я хотел бы узнать, могу ли я достичь этого, используя банку клиента A-MQ в сочетании с соответствующим драйвером базы данных XA. –

+0

Я хотел бы понять, как использовать делегат PlatformManager Spring на сервере приложений, когда он присутствует. Когда я использую весеннюю загрузку, я вижу загрузку платформ PlatformManager и jmsConnectionFactory. Однако, когда я не использую activemq rar и использую клиент, ActiveMQConnectionFactory появляется как , а не ActiveMQXAConnectionFactory. –

ответ

0

Весенняя обувь - это все о соглашениях. Необходимо указать Spring Boot, который вы подключаете к фабрике соединений XA. Согласно Spring загрузки документации (32.3 Using a Java EE managed transaction manager):

Spring загрузки будет пытаться автоматически настроить JMS, ища ConnectionFactory на JNDI пути Java:/JmsXA или Java:/XAConnectionFactory

+0

Thankyou Damien. Когда я автоподсчитал –

+0

Thankyou Damien –

+0

Thankyou Damien, когда autowire defaultConnectionFactory, он работает. // Ввод первичной информации (XA) ConnectionFactory @Autowired private ConnectionFactory defaultConnectionFactory; I –

Смежные вопросы