Переменная среды не берется в блоке соединителя-соединения-пула в glassfish-resrources.xml - PullRequest
0 голосов
/ 11 октября 2018

Один из моих java-проектов должен использовать JMS для отправки сообщения на другой конец через очередь сообщений (используя IBM MQ для разработки).

Конфигурация в glassfish-reources.xml проекта работает на самом деле нормально,который изначально выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE resources PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Resource Definitions//EN"
    "http://glassfish.org/dtds/glassfish-resources_1_5.dtd">
<resources>
    <admin-object-resource enabled="true" jndi-name="java:app/jms/myQueue" object-type="user" res-adapter="someadapter" res-type="javax.jms.Queue">
        <property name="Name" value="myQueue"/>
        <property name="baseQueueManagerName" value="TEST_Q_MNGR"/>
        <property name="baseQueueName" value="Q_NAME"/>
    </admin-object-resource>

    <connector-connection-pool resource-adapter-name="someadapter" name="jms/myConnectionPool" connection-definition-name="javax.jms.ConnectionFactory">
        <property name="hostName" value="localhost" />
        <property name="port" value="1414"/>
        <property name="queueManager" value="TEST_Q_MNGR" />
        <property name="channel" value="DEV.APP.SVRCONN"/>
    </connector-connection-pool>

    <connector-resource pool-name="jms/myConnectionPool" jndi-name="java:app/jms/myConnectionFactory"/>
</resources>

Мне удалось успешно получить экземпляр очереди и отправить сообщение.

Дальнейшие потребности проекта - использовать разные конфигурации в зависимости от разныхтаким образом, я заменил некоторую «жестко закодированную» информацию о конфигурации, например,

${ENV=QUEUE_MANAGER_NAME}

для обоих блоков: admin-object-resource и connector-connection-pool, которая затем выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE resources PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Resource Definitions//EN"
    "http://glassfish.org/dtds/glassfish-resources_1_5.dtd">
<resources>
    <admin-object-resource enabled="true" jndi-name="java:app/jms/myQueue" object-type="user" res-adapter="someadapter" res-type="javax.jms.Queue">
        <property name="Name" value="myQueue"/>
        <property name="baseQueueManagerName" value="${ENV=QUEUE_MANAGER_NAME}"/>
        <property name="baseQueueName" value="${ENV=Q_NAME}"/>
    </admin-object-resource>

    <connector-connection-pool resource-adapter-name="someadapter" name="jms/myConnectionPool" connection-definition-name="javax.jms.ConnectionFactory">
        <property name="hostName" value="${ENV=QUEUE_HOSTNAME}" />
        <property name="port" value="${ENV=QUEUE_PORT}"/>
        <property name="queueManager" value="${ENV=QUEUE_MANAGER_NAME}" />
        <property name="channel" value="DEV.APP.SVRCONN"/>
    </connector-connection-pool>

    <connector-resource pool-name="jms/myConnectionPool" jndi-name="java:app/jms/myConnectionFactory"/>
</resources>

Но интересно то, что только блок $ {ENV = XXX} в

admin-object-resource

был заменен на правильное значение среды, но не те, что в

connector-connection-pool

block.

Даже при попытке использовать $ {ENV = XXX} только в блоке соединителя-соединения-пула, не работало, $ {ENV = XXX} в соединителе-соединенииБлок ection-pool всегда используется как строковый литерал, и я всегда получаю что-то вроде:

could not create connection to '${ENV=XXX}'

Как это могло быть возможно?Использовал glassfish-resources.xml для настройки jdbc-resources и jdbc-connection-pool в другом проекте, вся информация о среде была заменена на правильную информацию без каких-либо проблем, поэтому она оказалась более странной.1026 * Любая помощь, предложения будут полезны!

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

...