<!--

    Copyright (c) 1999, 2018 Oracle and/or its affiliates. All rights reserved.

    This program and the accompanying materials are made available under the
    terms of the Eclipse Public License v. 2.0, which is available at
    http://www.eclipse.org/legal/epl-2.0.

    This Source Code may also be made available under the following Secondary
    Licenses when the conditions for such availability set forth in the
    Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
    version 2 with the GNU Classpath Exception, which is available at
    https://www.gnu.org/software/classpath/license.html.

    SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0

-->

<!--
The application-client element is the root element of an application client
deployment descriptor.
The application client deployment descriptor describes the EJB components and
external resources referenced by the application client.
-->
<!ELEMENT application-client (icon?, display-name, description?, env-entry*,
ejb-ref*, resource-ref*)>

<!--
The description element is used to provide text describing the parent element.
The description element should include any information that the
application-client file producer wants to provide to the consumer of the
application-client file (i.e., to the Deployer). Typically, the tools used by
the application-client file consumer will display the description when
processing the parent element that contains the description.
-->
<!ELEMENT description (#PCDATA)>

<!--
The display-name element contains a short name that is intended to be displayed
by tools.
-->
<!ELEMENT display-name (#PCDATA)>

<!--
The ejb-link element is used in the ejb-ref element to specify that an EJB
reference is linked to an enterprise bean in the encompassing J2EE Application
package. The value of the ejb-link element must be the ejb-name of an enterprise
bean in the same J2EE Application package. Used in: ejb-ref
Example: <ejb-link>EmployeeRecord</ejb-link>
-->
<!ELEMENT ejb-link (#PCDATA)>

<!--
The ejb-ref element is used for the declaration of a reference to an enterprise
bean's home. The declaration consists of an optional description; the EJB
reference name used in the code of the referencing application client; the
expected type of the referenced enterprise bean; the expected home and remote
interfaces of the referenced enterprise bean; and an optional ejb-link
information. The optional ejb-link element is used to specify the referenced
enterprise bean.
-->
<!ELEMENT ejb-ref (description?, ejb-ref-name, ejb-ref-type, home, remote,
ejb-link?)>

<!--
The ejb-ref-name element contains the name of an EJB reference. The EJB
reference is an entry in the application client's environment. It is recommended
that name is prefixed with "ejb/". Used in: ejb-ref
Example: <ejb-ref-name>ejb/Payroll</ejb-ref-name>
-->
<!ELEMENT ejb-ref-name (#PCDATA)>

<!--
The ejb-ref-type element contains the expected type of the referenced enterprise
bean. The ejb-ref-type element must be one of the following:
<ejb-ref-type>Entity</ejb-ref-type>
<ejb-ref-type>Session</ejb-ref-type>
Used in: ejb-ref
-->
<!ELEMENT ejb-ref-type (#PCDATA)>

<!--
The env-entry element contains the declaration of an application client's
environment entries. The declaration consists of an optional description, the
name of the environment entry, and an optional value.
-->
<!ELEMENT env-entry (description?, env-entry-name, env-entry-type,
env-entry-value?)>

<!--
The env-entry-name element contains the name of an application client's
environment entry. Used in: env-entry
Example: <env-entry-name>EmployeeAppDB</env-entry-name>
-->
<!ELEMENT env-entry-name (#PCDATA)>

<!--
The env-entry-type element contains the fully-qualified Java type of the
environment entry value that is expected by the application client's code. The
following are the legal values of env-entry-type: java.lang.Boolean,
java.lang.String, java.lang.Integer, java.lang.Double, java.lang.Byte,
java.lang.Short, java.lang.Long, and java.lang.Float.

Used in: env-entry

Example:
<env-entry-type>java.lang.Boolean</env-entry-type>
-->
<!ELEMENT env-entry-type (#PCDATA)>

<!--
The env-entry-value element contains the value of an application client's
environment entry. The value must be a String that is valid for the constructor
of the specified type that takes a single String parameter.

Used in: env-entry

Example:
<env-entry-value>/datasources/MyDatabase</env-entry-value>
-->
<!ELEMENT env-entry-value (#PCDATA)>

<!--
The home element contains the fully-qualified name of the enterprise bean's home
interface.
Used in: ejb-ref
Example: <home>com.aardvark.payroll.PayrollHome</home>
-->
<!ELEMENT home (#PCDATA)>

<!--
The icon element contains a small-icon and large-icon element which specify the
URIs for a small and a large GIF or JPEG icon image used to represent the
application client in a GUI tool.
-->
<!ELEMENT icon (small-icon?, large-icon?)>

<!--
The large-icon element contains the name of a file containing a large (32 x 32)
icon image. The file name is a relative path within the application-client jar
file. The image must be either in the JPEG or GIF format, and the file name must
end with the suffix ".jpg" or ".gif" respectively. The icon can be used by
tools.
Example:
<large-icon>lib/images/employee-service-icon32x32.jpg</large-icon>
-->
<!ELEMENT large-icon (#PCDATA)>

<!--
The remote element contains the fully-qualified name of the enterprise bean's
remote interface.
Used in: ejb-ref
Example:
<remote>com.wombat.empl.EmployeeService</remote>
-->
<!ELEMENT remote (#PCDATA)>

<!--
The res-auth element specifies whether the enterprise bean code signs on
programmatically to the resource manager, or whether the Container will sign on
to the resource manager on behalf of the bean. In the latter case, the Container
uses information that is supplied by the Deployer.
The value of this element must be one of the two following:
<res-auth>Application</res-auth>
<res-auth>Container</res-auth>
-->
<!ELEMENT res-auth (#PCDATA)>

<!--
The res-ref-name element specifies the name of the resource factory reference
name. The resource factory reference name is the name of the application
client's environment entry whose value contains the JNDI name of the data
source.
Used in: resource-ref
-->
<!ELEMENT res-ref-name (#PCDATA)>

<!--
The res-type element specifies the type of the data source. The type is
specified by the Java interface (or class) expected to be implemented by the
data source.
Used in: resource-ref
-->
<!ELEMENT res-type (#PCDATA)>

<!--
The resource-ref element contains a declaration of application clients's
reference to an external resource. It consists of an optional description, the
resource factory reference name, the indication of the resource factory type
expected by the application client's code, and the type of authentication (bean
or container).

Example:
<resource-ref>
<res-ref-name>EmployeeAppDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
-->
<!ELEMENT resource-ref (description?, res-ref-name, res-type, res-auth)>
<!--
The small-icon element contains the name of a file containing a small (16 x 16)
icon image. The file name is a relative path within the application-client jar
file. The image must be either in the JPEG or GIF format, and the file name must
end with the suffix ".jpg" or ".gif" respectively. The icon can be used by
tools.
Example:
<small-icon>lib/images/employee-service-icon16x16.jpg</small-icon>
-->
<!ELEMENT small-icon (#PCDATA)>

<!--
The ID mechanism is to allow tools to easily make tool-specific references to
the elements of the deployment descriptor.
 -->
<!ATTLIST application-client id ID #IMPLIED>
<!ATTLIST description id ID #IMPLIED>
<!ATTLIST display-name id ID #IMPLIED>
<!ATTLIST ejb-link id ID #IMPLIED>
<!ATTLIST ejb-ref id ID #IMPLIED>
<!ATTLIST ejb-ref-name id ID #IMPLIED>
<!ATTLIST ejb-ref-type id ID #IMPLIED>
<!ATTLIST env-entry id ID #IMPLIED>
<!ATTLIST env-entry-name id ID #IMPLIED>
<!ATTLIST env-entry-type id ID #IMPLIED>
<!ATTLIST env-entry-value id ID #IMPLIED>
<!ATTLIST home id ID #IMPLIED>
<!ATTLIST icon id ID #IMPLIED>
<!ATTLIST large-icon id ID #IMPLIED>
<!ATTLIST remote id ID #IMPLIED>
<!ATTLIST res-auth id ID #IMPLIED>
<!ATTLIST res-ref-name id ID #IMPLIED>
<!ATTLIST res-type id ID #IMPLIED>
<!ATTLIST resource-ref id ID #IMPLIED>
<!ATTLIST small-icon id ID #IMPLIED>
