While i had been using glassfish/payara for most of my projects, i decided to switch to Wildfly for a project in which i preferred to have ActiveMQ als a JMS provider.
Using the JBOSS_CLI to create the JMS configurations was quite easy, but i did have a small challenge in figuring out how to create the mariadb driver/(xa)datasource.
This is what i ended up using:
1. Configure-buildTime.sh – a script that i run during docker build
1 2 3 4 5 |
# Download the maria-db driver curl https://downloads.mariadb.com/Connectors/java/connector-java-2.7.2/mariadb-java-client-2.7.2.jar > /opt/jboss/mariadb.driver.jar # Execute the client script that will register the driver & datasources $JBOSS_CLI --file=/opt/jboss/wildfly/jdbc.command.cli |
2. jdbc.command.cli – the JBOSS_CLI script that registers the driver and datasources.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
connect batch module add \ --name=org.mariadb \ --dependencies=javax.api,javax.transaction.api \ --resources=/opt/jboss/mariadb.driver.jar \ /subsystem=datasources/jdbc-driver=mariadb:add(driver-name="mariadb", driver-module-name="org.mariadb", driver-class-name="org.mariadb.jdbc.Driver", driver-xa-datasource-class-name="org.mariadb.jdbc.MariaDbDataSource") data-source add \ --name=MyDatasource \ --jndi-name=java:/jdbc/MyDatasource \ --driver-name=mariadb \ --connection-url=jdbc:mysql://${env.RDS_HOSTNAME:${env.RDS_HOSTNAME}}:${env.RDS_PORT:${env.RDS_PORT}}/${env.RDS_DB_NAME:${env.RDS_DB_NAME}} \ --user-name=${env.RDS_USERNAME:${env.RDS_USERNAME}} \ --password=${env.RDS_PASSWORD:${env.RDS_PASSWORD}} \ --check-valid-connection-sql="/* ping */ SELECT 1" xa-data-source add --name=MyDatasourceXA \ --driver-name=mariadb \ --jndi-name=java:/jdbc/MyDatasourceXA \ --user-name=${env.RDS_USERNAME:${env.RDS_USERNAME}} \ --password=${env.RDS_PASSWORD:${env.RDS_PASSWORD}} \ --recovery-username=${env.RDS_USERNAME:${env.RDS_USERNAME}} \ --recovery-password=${env.RDS_PASSWORD:${env.RDS_PASSWORD}} \ --xa-datasource-properties=Url=jdbc:mysql://${env.RDS_HOSTNAME:${env.RDS_HOSTNAME}}:${env.RDS_PORT:${env.RDS_PORT}}/${env.RDS_DB_NAME:${env.RDS_DB_NAME}} \ --xa-datasource-class=org.mariadb.jdbc.MariaDbDataSource\ --check-valid-connection-sql="/* ping */ SELECT 1" run-batch exit |
Notice how i give my parameters a default value recursing to the parameter itself. This is done because the JBOSS_CLI apparantly tries to expand the values (although default configured not to do so version 21.0.1), and i could not find another way to prevent this – it feels like a bug. My goal was to have the parameters to be resolved at image-runtime – and that worked!
3. My war/META-INF/persistence.xml
1 2 3 |
.. <jta-data-source>jdbc/MyDatasourceXA</jta-data-source> .. |