Не удается подключиться к серверу Tibco JMS - PullRequest
4 голосов
/ 13 сентября 2011

У меня есть Java-приложение, которое выполняет JMS-функции отправки и получения.Но я нашел интересную проблему.Например, я установил следующее для java.naming.provider.url.

tcp://hostnameA.foo.bar:7222

Но я получил ошибку, как показано ниже.Только имя хоста в нем, а не полное доменное имя.

javax.jms.JMSException: Failed to connect to the server at tcp://hostnameA:7222

Если я не добавлю имя хоста A в файл хостов вручную, он не будет подключаться к серверу Tibco.

Как исправитьэто?

Заранее спасибо.

Ответы [ 2 ]

9 голосов
/ 29 октября 2011

Сервер EMS имеет собственный встроенный сервер JNDI. То, что вы на самом деле делаете при подключении: 1) запрашивает у сервера JNDI EMS определение фабрики соединений, а затем 2) создает соединение на основе возвращенной фабрики. Это подразумевается тем фактом, что вы используете java.naming.provider.url.

Измените определение фабрики соединений (factories.conf) на сервере EMS для используемой вами фабрики соединений. Определение по умолчанию для заводов по умолчанию (например, QueueConnectionFactory) при новой установке - «tcp: // 7222», которое будет заменено на «tcp: // hostname: 7222» сервером при получении. Вы можете изменить это определение, например, "tcp: //hostname.myfqdn.com: 7222" и все должно работать.

Вы также можете полностью обойти сервер JNDI, создав прямое соединение, но я бы не рекомендовал это, поскольку определение фабрики соединений, возвращаемое сервером, может содержать информацию о балансировке нагрузки и отказоустойчивых парах, настройках SSL или указывать на совершенно другая пара серверов и т. д. Это также позволяет администраторам EMS изменять определение фабрик соединений без необходимости изменения кода или даже конфигурации клиентов.

1 голос
/ 13 сентября 2011

Полагаю, это не имеет никакого отношения к уровню программирования.
Ваш DNS-запрос для этого имени неразрешим, поэтому он работает при редактировании файла hosts.
Либо проверьте настройки DNS вашей системы (или убедитесь, что DNS-сервер, который находится в конфигурации вашей системы, отвечает на ваш запрос имени), либо используйте вместо этого IP-адрес.

...