# Adding Resources Examples

The add-resources goal allows you to add resources such as datsources etc to a running WildFly instance.

## Adding datasources

This can be combined with the add-resource goal to automatically deploy the datasource drivers.

The example below shows how to add a datasource that uses the default h2 database:

    <project>
        ...
        <build>
            <plugins>
                <plugin>
                    <groupId>org.wildfly.plugins</groupId>
                    <artifactId>wildfly-maven-plugin</artifactId>
                    <version>3.0.0.Final</version>
                    <executions>
                        <execution>
                            <id>add-datasource</id>
                            <phase>package</phase>
                            <goals>
                                <goal>add-resource</goal>
                            </goals>
                            <configuration>
                                <address>subsystem=datasources,data-source=java:jboss/myDs</address>
                                <resources>
                                    <resource>
                                        <properties>
                                            <jndi-name>java:jboss/myDs</jndi-name>
                                            <enabled>true</enabled>
                                            <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</connection-url>
                                            <driver-class>org.h2.Driver</driver-class>
                                            <driver-name>h2</driver-name>
                                            <user-name>sa</user-name>
                                            <password>sa</password>
                                        </properties>
                                    </resource>
                                </resources>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    ...
    </project>

The example below shows how to configure a postgresql XA data source, including deploying the driver. The postgresql driver module must be listed in the <dependencies> section of the pom.

    <project>
        ...
        <build>
            ...
            <plugins>
                ...
                <plugin>
                    <groupId>org.wildfly.plugins</groupId>
                    <artifactId>wildfly-maven-plugin</artifactId>
                    <version>3.0.0.Final</version>
                    <executions>
                        <execution>
                            <id>deploy-postgresql</id>
                            <phase>package</phase>
                            <goals>
                                <goal>deploy-artifact</goal>
                            </goals>
                            <configuration>
                                <groupId>postgresql</groupId>
                                <artifactId>postgresql</artifactId>
                                <name>postgresql.jar</name>
                            </configuration>
                        </execution>
                        <execution>
                            <id>add-datasource</id>
                            <phase>install</phase>
                            <goals>
                                <goal>add-resource</goal>
                            </goals>
                            <configuration>
                                <address>subsystem=datasources</address>
                                <resources>
                                    <resource>
                                        <address>xa-data-source=java:jboss/datasources/postgresDS</address>
                                        <properties>
                                            <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
                                            <jndi-name>java:jboss/datasources/postgresDS</jndi-name>
                                            <enabled>true</enabled>
                                            <driver-name>postgresql.jar</driver-name>
                                        </properties>
                                        <resources>
                                            <resource>
                                                <address>
                                                    xa-datasource-properties=DatabaseName
                                                </address>
                                                <properties>
                                                    <value>myDatabase</value>
                                                </properties>
                                            </resource>
                                            <resource>
                                                <address>
                                                    xa-datasource-properties=ServerName
                                                </address>
                                                <properties>
                                                    <value>localhost</value>
                                                </properties>
                                            </resource>
                                            <resource>
                                                <address>
                                                    xa-datasource-properties=User
                                                </address>
                                                <properties>
                                                    <value>dbuser</value>
                                                </properties>
                                            </resource>
                                            <resource>
                                                <address>
                                                    xa-datasource-properties=Password
                                                </address>
                                                <properties>
                                                    <value>supersecret</value>
                                                </properties>
                                            </resource>
                                        </resources>
                                    </resource>
                                </resources>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                ...
            </plugins>
            ...
        </build>
    ...
    </project>

The xml tags in the <properties> element correspond directly to the DMR nodes in the corresponding management operation. If you need to use DMR nodes of a non-primitive type then you must prefix the value with the !! escape sequence, which will cause the value to be interpreted as a string representation of a DMR node. For example in the <xa-data-source-properties> element about <xa-datasource-properties> is a DMR property list.

## Adding other resources

It is also possible to deploy resources other than datasources, the example below shows how to deploy a JMS queue:

    <project>
        ...
        <build>
            ...
            <plugins>
                ...
                <plugin>
                    <groupId>org.wildfly.plugins</groupId>
                    <artifactId>wildfly-maven-plugin</artifactId>
                    <version>3.0.0.Final</version>
                    <executions>
                        <execution>
                            <id>add-jms-queue</id>
                            <phase>install</phase>
                            <goals>
                                <goal>add-resource</goal>
                            </goals>
                            <configuration>
                                <resources>
                                    <resource>
                                        <address>subsystem=messaging,hornetq-server=default,jms-queue=myJmsQueue</address>
                                        <properties>
                                            <durable>true</durable>
                                            <entries>!!["java:jboss/myJmsQueue", "java:jboss/myJmsQueueAlias"]</entries>
                                        </properties>
                                    </resource>
                                </resources>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                ...
            </plugins>
            ...
        </build>
    ...
    </project>

## Adding resources in domain mode

Adding resources in domain mode works the same as the examples above, except you need to add the <profiles> property as well as specify at least one profile.

    <project>
        ...
        <build>
            ...
            <plugins>
                ...
                <plugin>
                    <groupId>org.wildfly.plugins</groupId>
                    <artifactId>wildfly-maven-plugin</artifactId>
                    <version>3.0.0.Final</version>
                    <executions>
                        <execution>
                            <id>add-datasource</id>
                            <phase>package</phase>
                            <goals>
                                <goal>add-resource</goal>
                            </goals>
                            <configuration>
                                <profiles>
                                    <profile>default</profile>
                                </profiles>
                                <address>subsystem=datasources,data-source=java:jboss/myDs</address>
                                 <resources>
                                    <resource>
                                        <properties>
                                            <jndi-name>java:jboss/myDs</jndi-name>
                                            <enabled>true</enabled>
                                            <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</connection-url>
                                            <driver-class>org.h2.Driver</driver-class>
                                            <driver-name>h2</driver-name>
                                            <user-name>sa</user-name>
                                            <password>sa</password>
                                        </properties>
                                    </resource>
                                 </resources>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                ...
            </plugins>
            ...
        </build>
    ...
    </project>