  ------
  Specifying Resource Refs For The Generated application.xml
  ------
  Karl Heinz Marbaise <khmarbaise@apache.org>
  ------
  August 27, 2017

~~ Copyright 2006 The Apache Software Foundation.
~~
~~ Licensed under the Apache License, Version 2.0 (the "License");
~~ you may not use this file except in compliance with the License.
~~ You may obtain a copy of the License at
~~
~~      http://www.apache.org/licenses/LICENSE-2.0
~~
~~ Unless required by applicable law or agreed to in writing, software
~~ distributed under the License is distributed on an "AS IS" BASIS,
~~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~~ See the License for the specific language governing permissions and
~~ limitations under the License.

~~ NOTE: For help with the syntax of this file, see:
~~ http://maven.apache.org/doxia/references/apt-format.html


Specifying Resource Ref entries For The Generated application.xml

  Resource Ref entries can be added as from the JavaEE 6 spec. For instance:

+--------
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-ear-plugin</artifactId>
        <version>${project.version}</version>
        <configuration>
           [...]
           <version>6</version>
           [...]
           <resourceRefs>
             <resourceRef>
               <res-ref-name>jdbc/myDs1</res-ref-name>
               <res-type>javax.sql.DataSource</res-type>
               <res-auth>Container</res-auth>
             </resourceRef>
             <resourceRef>
               <res-ref-name>jdbc/myDs2</res-ref-name>
               <res-type>javax.sql.DataSource</res-type>
               <res-auth>Container</res-auth>
             </resourceRef>
            </resourceRefs>
          </configuration>
      </plugin>
    </plugins>
  </build>
+---------
