Как загрузить конфигурацию JMS из файла .bindings в Spring - PullRequest
0 голосов
/ 17 февраля 2020

Я все еще новичок в Spring и Ibm / mq, но я использую JMSTemplate в проекте Spring (сборка с maven) для отправки сообщений в MQ. Он отлично работает, когда я использую файл application.propeties для определения информации о сервере MQ.

Теперь я хочу сделать то же самое с файлом «.bindings», который я сгенерировал на своем сервере MQ. В нем есть такие строки: QUEUE_CONNECTION_FACTORY_NAME/ClassName=com.ibm.mq.jms.MyQueueConnectionFactory

  • Можно ли использовать JMSTemplate для загрузки конфигурации из этого файла привязки? Как?

Что я знаю, так это то, что основным способом использования этого файла является JNDI FSContext, но я не нашел, как:

  • Где вы положили Файл .bindings?
  • Как вы его загружаете? (и вы загружаете из bean-компонента xml или из контекста в коде java)

Возможно ли это вообще? На доске я видел несколько старых сообщений, в которых говорилось: «Spring не поддерживает файл .binding. Любые элементы конфигурации в файле .binding должны быть переведены в соответствующую конфигурацию Spring XML».

In с другой стороны у меня есть это, у которого есть неполный ответ на мой вопрос: Как загрузить контекст JNDI из файловой системы в Spring?

У меня перегрузка информацией, но не так просто, как чтобы сделать это.

РЕДАКТИРОВАТЬ: Теперь я могу загрузить содержимое файла, но он кажется несовместимым Мой код выглядит так:

environment.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");
environment.put(Context.PROVIDER_URL, "file:/Users/user/jndi");

Context mycontext = new InitialContext( environment );
ConnectionFactory connectionFactory = (ConnectionFactory) mycontext.lookup("QCONNECTION_FACTORY");

JmsTemplate jmsTemplate = new JmsTemplate();
jmsTemplate.setConnectionFactory(connectionFactory);
MQQueue dest = (MQQueue) mycontext.lookup("LQ1");

//Connection connection = connectionFactory.createConnection("***","***");
//Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

jmsTemplate.convertAndSend(dest, "hello");

Информация о моей очереди jndi:

LQ1/RefAddr/12/Type=MDCTX
LQ1/RefAddr/12/Encoding=String
LQ1/RefAddr/12/Content=0
LQ1/RefAddr/16/Content=LQ1
LQ1/RefAddr/16/Type=QU

и сценарий JMSAdmin:

DEF Q(LQ1) QUEUE(LQ1)
def qcf(QCONNECTION_FACTORY)transport(CLIENT)channel(DEV.APP.CHANNEL)host(localhost)port(1414)qmgr(QM1)
end

Но я получаю:

org.springframework.jms.JmsSecurityException: JMSWMQ2008: Failed to open MQ queue 'LQ1'.; nested exception is com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2008: Failed to open MQ queue 'LQ1'
JMS attempted to perform an MQOPEN, but IBM MQ reported an error.
Use the linked exception to determine the cause of this error. Check that the specified queue and queue manager are defined correctly.; nested exception is com.ibm.mq.MQException: JMSCMQ0001: IBM MQ call failed with compcode '2' ('MQCC_FAILED') reason '2035' ('MQRC_NOT_AUTHORIZED').
...