You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
149 lines
4.7 KiB
Plaintext
149 lines
4.7 KiB
Plaintext
## Introduction
|
|
|
|
This application is intended to run inside of a Java EE application server such as
|
|
JBoss Wildfly. It demonstrates Spring Boot's auto-configuration defaulting for a
|
|
container-managed `TransactionManager` and `DataSource`. This example unfortunately
|
|
requires a fully configured Wildfly installation. You'll need to configure a PostgreSQL
|
|
XA `DataSource` and an XA `ConnectionFactory` in the Java EE application server's
|
|
JNDI machinery.
|
|
|
|
## Setup
|
|
|
|
### Postgres
|
|
We will use postgres as the underlying database, v9.3.5 or above is recommend. Follow
|
|
the installation instructions from https://www.postgresql.org/[postgresql.org] or use
|
|
a package manager to install the appropriate binaries.
|
|
|
|
Once installed you will need to initialize and start the server.
|
|
|
|
[source,indent=0]
|
|
----
|
|
$ initdb /usr/local/var/postgres -E utf8
|
|
$ pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
|
|
----
|
|
|
|
With the server running you can create a user and a database:
|
|
|
|
[source,indent=0]
|
|
----
|
|
$ createuser springboot
|
|
$ createdb bootdemo
|
|
----
|
|
|
|
Finally you can type `psql bootdemo` to configure a password:
|
|
|
|
[source,indent=0]
|
|
----
|
|
ALTER USER springboot WITH PASSWORD 'springboot';
|
|
\q
|
|
----
|
|
|
|
|
|
### WildFly 8.1
|
|
Download an install WildFly 8.1 from https://wildfly.org/downloads/[wildfly.org]. Once
|
|
installed you will need to add a management user by running `$JBOSS_HOME/bin/add-user.sh`
|
|
(see the WildFly documentation for details).
|
|
|
|
You will also need to add a postgresql module. The following commands setup the basic
|
|
structure:
|
|
|
|
[source,indent=0]
|
|
----
|
|
$ cd $JBOSS_HOME
|
|
mkdir -p modules/org/postgresql/main
|
|
wget https://jdbc.postgresql.org/download/postgresql-9.3-1102.jdbc41.jar
|
|
mv postgresql-9.3-1102.jdbc41.jar modules/org/postgresql/main
|
|
----
|
|
|
|
You can then add the following to `$JBOSS_HOME/modules/org/postgresql/main/module.xml`:
|
|
|
|
[source,indent=0]
|
|
----
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
<module xmlns="urn:jboss:module:1.0" name="org.postgresql">
|
|
<resources>
|
|
<resource-root path="postgresql-9.3-1102.jdbc41.jar"/>
|
|
</resources>
|
|
<dependencies>
|
|
<module name="javax.api"/>
|
|
<module name="javax.transaction.api"/>
|
|
</dependencies>
|
|
</module>
|
|
----
|
|
|
|
## Configuration
|
|
A custom WildFly configuration is required for the XA `DataSource` and `ConnectionFactory`
|
|
elements. The `$JBOSS_HOME/standalone/configuration/standalone-full.xml` is a good
|
|
starting point, copy this file to
|
|
`$JBOSS_HOME/standalone/configuration/standalone-boot-demo.xml` then make the following
|
|
changes.
|
|
|
|
### DataSource
|
|
You need to register a PostgreSQL XA `Driver` and then configure an `xa-datasource`.
|
|
|
|
Here's a complete listing of the `xa-datasource` contribution to the `datasources`
|
|
element, and the `driver` contribution to the `drivers` element to configure a PostgreSQL
|
|
DB connection to localhost.
|
|
https://access.redhat.com/documentation/en-US/JBoss_Enterprise_Application_Platform/6/html-single/Administration_and_Configuration_Guide/index.html#Install_a_JDBC_Driver_with_the_Management_Console[You can learn more from the documentation].
|
|
|
|
[source,xml,indent=0,subs="verbatim,attributes"]
|
|
----
|
|
<datasources>
|
|
...
|
|
<xa-datasource
|
|
jndi-name="java:jboss/datasources/bootdemo"
|
|
pool-name="CrmXADS"
|
|
enabled="true">
|
|
<xa-datasource-property name="url">jdbc:postgresql://localhost:5432/crm</xa-datasource-property>
|
|
<driver>postgres</driver>
|
|
<xa-pool>
|
|
<min-pool-size>10</min-pool-size>
|
|
<max-pool-size>20</max-pool-size>
|
|
<prefill>true</prefill>
|
|
</xa-pool>
|
|
<security>
|
|
<user-name>springboot</user-name>
|
|
<password>springboot</password>
|
|
</security>
|
|
</xa-datasource>
|
|
<drivers>
|
|
...
|
|
<driver name="postgres" module="org.postgresql">
|
|
<xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
|
|
</driver>
|
|
</drivers>
|
|
</datasources>
|
|
----
|
|
|
|
### JMS Destination
|
|
You will also need to configure a `javax.jms.Destination` by contributing the following to
|
|
the `hornetq-server` element:
|
|
|
|
[source,xml,indent=0,subs="verbatim,attributes"]
|
|
----
|
|
<jms-destinations>
|
|
<jms-queue name="accounts">
|
|
<entry name="java:/jms/queue/bootdemo"/>
|
|
</jms-queue>
|
|
...
|
|
</jms-destinations>
|
|
----
|
|
|
|
|
|
## Running and deploying the sample
|
|
Run Wildfly with the following command:
|
|
|
|
[source,indent=0]
|
|
----
|
|
$JBOSS_HOME/bin/standalone.sh -c standalone-boot-demo.xml
|
|
----
|
|
|
|
Once running you can deploy the application by copying
|
|
`target/spring-boot-sample-jta-jndi.war` to `$JBOSS_HOME/standalone/deployments`.
|
|
|
|
Open a browser to http://localhost:8080/spring-boot-sample-jta-jndi to trigger the
|
|
sample. You should see the current count (it will increment by one on each refresh). If
|
|
you check the logs you should see a `----> Josh` message and some counts. Notice how the
|
|
`error` message triggers an exception with causes both the database insert and the JMS
|
|
message to be rolled back.
|