Один из моих 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 * Любая помощь, предложения будут полезны!
Заранее спасибо.