Соединение EMS работает с "tcp", но не с "tibjmsnaming"
Мне дали URL соединения Tibco EMS "tibjmsnaming://xx.xx.xx.xxx:7551,tibjmsnaming://xx.xx.xx.xxx:7551" (IP-адрес здесь маскируется). Когда я пытался подключиться с помощью JMS, как это:
ConnectionFactory factory = new TibjmsConnectionFactory("tibjmsnaming://xx.xx.xx.xxx:7551,tibjmsnaming://xx.xx.xx.xxx:7551");
Connection connection = factory.createConnection("test", "abcd");
Я получил исключение:
javax.jms.JMSException: Protocol not supported
Однако, если я изменю "tibjmsnaming" на "tcp", как показано ниже, соединение будет успешным.
ConnectionFactory factory = new TibjmsConnectionFactory("tcp://xx.xx.xx.xxx:7551,tcp://xx.xx.xx.xxx:7551");
Connection connection = factory.createConnection("test", "abcd");
Так как я могу соединиться с "tcp", я, вероятно, могу оставить это так. Но я хотел бы знать, не пропускаю ли я что-то при переходе от "tibjmsnaming" к "tcp" (например, с точки зрения ущерба безопасности).
1 ответ
Префикс "tcp://" или "ssl://" является правильным способом подключения к функции JMS сервера TIBCO EMS. Так что, если вы используете TibjmsConnectionFactory, это правильно.
Однако альтернативным способом в JMS является JMS ConnectionFactory по имени из реализации JNDI. И для доступа к JNDI-репозиторию TIBCO EMS используйте префикс "tibjmsnaming://". Ниже приведен пример загрузки фабрики с именем "ConnectionFactory". Преимущество этого кода в том, что он не зависит от реализации.
// provider-specific code
String providerContextFactory = "com.tibco.tibjms.naming.TibjmsInitialContextFactory";
String providerUrl = "tibjmsnaming://localhost:51515";
String cfName = "ConnectionFactory";
// JMS generic code
Hashtable<String,String> env = new Hashtable<String,String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, providerContextFactory);
env.put(Context.PROVIDER_URL, providerUrl);
if (userName != null) {
env.put(Context.SECURITY_PRINCIPAL, userName);
if (password != null)
env.put(Context.SECURITY_CREDENTIALS, password);
}
InitialContext jndiContext = new InitialContext(env);
ConnectionFactory factory = (ConnectionFactory)jndiContext.lookup(cfName);