У меня есть экземпляр Apache ActiveMQ Artemis (1.3), к которому я пытаюсь подключиться из автономного приложения Spring (4.3.2), над которым работает моя команда. У этого есть Весна JTATransactionManager с использованием Atomikos (4.0.4) UserTransactionManager как поставщик, и во время этих транзакций мне нужно подключиться к нескольким ресурсам, включая вышеупомянутый MQ. Следуя инструкциям Artemis и Atomikos, мы установили ActiveMQConnectionFactory, который затем передается в AtomikosConnectionFactoryBean. Все это происходит в контейнере Spring, но это, похоже, не связано с нашей проблемой.Создание аутентифицированного ресурса XA из ActiveMQConnectionFactory
Все работало хорошо, пока я не попытался добавить аутентификацию в соединение MQ. Можно установить пользователя и пароль свойства на экземпляре ActiveMQConnectionFactory, однако, они, кажется, должны быть приняты во внимание только при создании обычного соединения:
@Override
public Connection createConnection() throws JMSException {
return createConnection(user, password);
}
@Override
public Connection createConnection(final String username, final String password) throws JMSException {
return createConnectionInternal(username, password, false, ActiveMQConnection.TYPE_GENERIC_CONNECTION);
}
Atomikos звонит createXAConnection() (от Интерфейс XAConnectionFactory), который, как я вижу в его реализации, игнорирует учетные данные, если явно не передано:
@Override
public XAConnection createXAConnection() throws JMSException {
return createXAConnection(null, null);
}
@Override
public XAConnection createXAConnection(final String username, final String password) throws JMSException {
return (XAConnection) createConnectionInternal(username, password, true, ActiveMQConnection.TYPE_GENERIC_CONNECTION);
}
Вот как работают и другие методы в этом классе, поэтому я предполагаю, что это не ошибка. Если да, то как я должен получить аутентифицированный XAConnection? Я не вижу возможности Atomicos вызывать перегруженную версию, глядя на ее код.
С уважением, Якуб