Is there a way to use environment variable in payara-resources.xml when creating connector-connection-pool

336 Views Asked by At

I am running an application on Payara micro and trying to create a connector-connection-pool in the payara-resources.xml file that uses environment variables to pass in data as below:

<connector-connection-pool resource-adapter-name="wmq.jmsra" name="jms/MyConnectionPool"
                           connection-definition-name="javax.jms.ConnectionFactory">
    <property name="transportType" value="CLIENT"/>
    <property name="port" value="${ENV=CONFIGURATION_PORT}"/>
    <property name="channel" value="${ENV=CONFIGURATION_CHANNEL}"/>
    <property name="queueManager" value="${ENV=CONFIGURATION_MANAGER}"/>
    <property name="username" value="${ENV=CONFIGURATION_USERNAME}"/>
    <property name="hostName" value="${ENV=CONFIGURATION_HOST}"/>
</connector-connection-pool>

However this fails with the error below, but when I hardcode the values it works fine:

    ... 320 more
Caused by: com.ibm.mq.connector.DetailedResourceException: MQJCA1012: Failed to create a JMS connection factory., error code: MQJCA1012 A JCA ManagedConnectionFactory object was not able to create a WebSphere MQ classes for JMS ConnectionFactory object. Check the properties of the ConnectionFactory object.
    ... 321 more
Caused by: com.ibm.msg.client.jms.DetailedJMSException: JMSCC0005: The specified value '${ENV=CONFIGURATION_MANAGER}' is not allowed for 'XMSC_WMQ_QUEUE_MANAGER'.
The given value is not allowed for the property specified.
...
    ... 324 more

In the same file, I have created a jdbc-connection-pool in a similar way but it is able to resolve the environment variable successfully work:

<jdbc-connection-pool datasource-classname="org.postgresql.ds.PGConnectionPoolDataSource"
                      name="my_database" res-type="javax.sql.ConnectionPoolDataSource">
    <property name="port" value="5432"/>
    <property name="user" value="${ENV=DB_USER}"/>
    <property name="password" value="${ENV=DB_PWD}"/>
    <property name="ServerName" value="${ENV=DB_HOST}"/>
    <property name="DatabaseName" value="${ENV=DB_NAME}"/>
</jdbc-connection-pool>
1

There are 1 best solutions below

0
FourtyTwo On

I solved my problem by moving away from defining resources in payara-resources.xml. I created a new class and defined all the resources in Java using these annotations, @DataSourceDefinition, @ConnectionFactoryDefinition, @AdministeredObjectDefinition and @MailSessionDefinition.

So the connector-connection-pool that was giving problems ended up looking like this:

@ConnectionFactoryDefinitions({
        @ConnectionFactoryDefinition(
                name = "java:app/jms/MyConnectionPool",
                interfaceName = "javax.jms.ConnectionFactory",
                resourceAdapter = "wmq.jmsra",
                properties = {
                        "transactionSupport=XATransaction",
                        "transportType=CLIENT",
                        "channel=${ENV=CONFIGURATION_CHANNEL}",
                        "queueManager=${ENV=CONFIGURATION_MANAGER}",
                        "hostName=${ENV=CONFIGURATION_HOST}",
                        "port=${ENV=CONFIGURATION_PORT}",
                        "username=${ENV=CONFIGURATION_USERNAME}",
                }
        ),
// other connection pools went here...
})