  ------
  Specifying Security Roles For The Generated application.xml
  ------
  Stephane Nicoll
  <snicoll@apache.org>
  ------
  2017-08-27

~~ 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 Environment entries For The Generated application.xml

  Environment 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>
           [...]
           <env-entries>
             <env-entry>
               <description>A complete entry.</description>
               <env-entry-name>complete</env-entry-name>
               <env-entry-type>java.lang.Integer</env-entry-type>
               <env-entry-value>4</env-entry-value>
               <lookup-name>java:global/Example</lookup-name>
             </env-entry>
             <env-entry>
               <env-entry-name>no-type</env-entry-name>
               <env-entry-value>4</env-entry-value>
             </env-entry>
             <env-entry>
               <env-entry-name>no-value</env-entry-name>
               <env-entry-type>java.lang.String</env-entry-type>
             </env-entry>
           </env-entries>
        </configuration>
      </plugin>
    </plugins>
  </build>
+---------
