Указание java.naming.provider.url для конфигурации входящей конечной точки в jndi.properties - PullRequest
1 голос
/ 07 июля 2019

У меня есть конфигурация входящей конечной точки, и я хочу указать значение java.naming.provider.url внутри jndi.properties, что заставит меня динамически конфигурировать входящую конечную точку в соответствии с URL-адресами провайдеров различных сред, которые у меня есть.

Вот моя ось2.xml конфигурация ActiveMq

<transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener">
   <parameter name="myTopicConnectionFactory" locked="false">
       <parameter name="java.naming.factory.initial" locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
       <parameter name="java.naming.provider.url" locked="false">failover:tcp://localhost:6092</parameter>
       <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">TopicConnectionFactory</parameter>
        <parameter name="transport.jms.ConnectionFactoryType" locked="false">topic</parameter>
   </parameter>

   <parameter name="myQueueConnectionFactory" locked="false">
       <parameter name="java.naming.factory.initial" locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
       <parameter name="java.naming.provider.url" locked="false">failover:tcp://localhost:6092</parameter>
       <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">QueueConnectionFactory</parameter>
        <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>
   </parameter>

   <parameter name="default" locked="false">
       <parameter name="java.naming.factory.initial" locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
       <parameter name="java.naming.provider.url" locked="false">failover:tcp://localhost:6092</parameter>
       <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">QueueConnectionFactory</parameter>
        <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>
   </parameter>                                          
</transportReceiver>

и это моя конфигурация входящей конечной точки:

<?xml version="1.0" encoding="UTF-8"?>
<inboundEndpoint name="inboundEP" onError="conf:sequences/om.esb/om.esb-faultSQ.xml" protocol="jms" sequence="inbEPSQ" suspend="false" xmlns="http://ws.apache.org/ns/synapse">
    <parameters>
        <parameter name="interval">1000</parameter>
        <parameter name="sequential">true</parameter>
        <parameter name="coordination">true</parameter>
        <parameter name="transport.jms.Destination">example_request</parameter>
        <parameter name="transport.jms.CacheLevel">3</parameter>
        <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter>
        <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
        <parameter name="java.naming.provider.url" locked="false">conf/jndi.properties</parameter> 
        <parameter name="transport.jms.SessionAcknowledgement">AUTO_ACKNOWLEDGE</parameter>
        <parameter name="transport.jms.SessionTransacted">false</parameter>
        <parameter name="transport.jms.ConnectionFactoryType">queue</parameter>
        <parameter name="transport.jms.ContentType">application/json</parameter>
        <parameter name="transport.jms.SharedSubscription">false</parameter>
    </parameters>
</inboundEndpoint>

В файле jndi.properties я попытался указать java.naming.provider.url следующим образом:

# register some connection factories
# connectionfactory.[jndiname] = [ConnectionURL]
connectionfactory.QueueConnectionFactory = amqp://admin:admin@clientID/carbon?brokerlist='tcp://localhost:5675'
connectionfactory.TopicConnectionFactory = amqp://admin:admin@clientID/carbon?brokerlist='tcp://localhost:5675'


java.naming.provider.url=failover:tcp://localhost:6092
# register some queues in JNDI using the form
# queue.[jndiName] = [physicalName]
queue.MyQueue = example.MyQueue

# register some topics in JNDI using the form
# topic.[jndiName] = [physicalName]
topic.MyTopic = example.MyTopic

но в консоли WSO2 у меня появляется следующая ошибка:

Could not create Transport. Reason: java.io.IOException: Transport not scheme specified: [conf/jndi.properties]

Спасибо за любую идею!

1 Ответ

0 голосов
/ 08 июля 2019

Как следует из названия, 'java.naming.provider.url' должен быть URL-адресом, поэтому что-то начинается с '(protocol): //'

Так как tcp: // localhost: 6092 работал для васв другой конфигурации попробуйте вместо этого:

<parameter name="java.naming.provider.url" locked="false">tcp://localhost:6092</parameter> 

В JNDI происходит то, что сначала создается ваш класс "java.naming.factory.initial" (который является org.apache.activemq.jndi.ActiveMQInitialContextFactoryв вашем случае), а затем вы можете использовать любой из URL провайдера, поддерживаемых этим классом.В зависимости от вашего провайдера он может поддерживать разные типы URL (tcp :, file :, ssl :, ...).ActiveMQ поддерживает vm: и tcp: - при указании tcp: он загрузит эту конфигурацию JNDI, используя TCP от этого брокера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...