A revision to clarify the EJB 3.2 spec section 15.5 ("Deployment
Descriptor and Annotation Processing") follows below:
--- subsection 15.5.1 ---
[This is intended to replace the paragraph at the beginning of section
15.5.1]
The metadata-complete attribute defines whether this deployment
descriptor and the related web service descriptor for this module, if
any, are complete, or whether the class files available to this module
and packaged with this application should be examined for annotations
that specify deployment information. Deployment information, in this
sense, refers to any information that could have been specified by the
EJB and related web service deployment descriptors for this module.
If the value of the metadata-complete attribute is specified as
“trueâ€, the deployment tool must ignore any annotations that specify
such deployment information in the class files packaged in the ejb-jar
file. Such annotations must also be ignored in the class files that
are available to the EJB module according to section EE.8.5.2 of the
Java EE Platform specification ("Deploying a Java EE Application")
except for those class files that are available to another module for
which the metadata-complete attribute is not specified or whose value
is set to "false".
Note that a "true" value for the metadata-complete attribute does
*not* preempt the processing of *all* annotations, only those
listed below.
The annotations to which the metadata-complete attribute applies
consist of the following: [Include here the list appended further below.]
If the metadata-complete attribute is not specified or its value is
“falseâ€, the deployment tool must examine the class files of the
application for such annotations.
Table 16 summarizes the requirements for determining when to process
annotations that specify deployment information on the classes in a
standalone ejb-jar file or an ejb-jar file packaged within an .ear
file. If the deployment descriptor is not included or is included but
does not specify metadata-complete as "true", the deployment tool must
process such annotations.
[In Table 16, the second item under "process annotations?" should
be modified as "No, except as indicated above"
--- rewrite of subsection 15.5.2 ---
Table 17 summarizes the requirements for determining when to process
annotations that specify deployment information on the enterprise bean
classes of a .war file. If the .war file contains an ejb-jar.xml file,
the deployment tool must process such annotations unless the
ejb-jar.xml specifies the value of the metadata-complete attribute as
"true". If the .war file does not contain an ejb-jar.xml file, the
deployment tool must process such annotations unless the web.xml
specifies the value of the metadata-complete attibute as "true" or its
version is prior to web-app_2_5.
---- Annotations covered by metadata-complete in ejb-jar.xml ------
The following are the annotations in javax.ejb. All of these have
corresponding deployment descriptor metadata covered by the EJB xsd.
javax.ejb.AccessTimeout
javax.ejb.ActivationConfigProperty
javax.ejb.AfterBegin
javax.ejb.AfterCompletion
javax.ejb.ApplicationException
javax.ejb.Asynchronous
javax.ejb.BeforeCompletion
javax.ejb.ConcurrencyManagement
javax.ejb.DependsOn
javax.ejb.EJB
javax.ejb.EJBs
javax.ejb.Init
javax.ejb.Lock
javax.ejb.Local
javax.ejb.LocalBean
javax.ejb.LocalHome
javax.ejb.MessageDriven
javax.ejb.PostActivate
javax.ejb.PrePassivate
javax.ejb.Remote
javax.ejb.RemoteHome
javax.ejb.Remove
javax.ejb.Schedule
javax.ejb.Schedules
javax.ejb.Singleton
javax.ejb.Startup
javax.ejb.Stateful
javax.ejb.StatefulTimeout
javax.ejb.Stateless
javax.ejb.Timeout
javax.ejb.TransactionAttribute
javax.ejb.TransactionManagement
The following annotations from related packages are also covered
by the EJB descriptor.
javax.annotation.PostConstruct
javax.annotation.PreDestroy
javax.annotation.Resource
javax.annotation.Resources
javax.annotation.security.DeclareRoles
javax.annotation.security.DenyAll
javax.annotation.security.PermitAll
javax.annotation.security.RolesAllowed
javax.annotation.security.RunAs
javax.annotation.sql.DataSourceDefinition
javax.annotation.sql.DataSourceDefinitions
javax.jms.JMSConnectionFactoryDefinition
javax.jms.JMSConnectionFactoryDefinitions
javax.jms.JMSDestinationDefinition
javax.jms.JMSDestinationDefinitions
javax.mail.MailSessionDefinition
javax.mail.MailSessionDefinitions
javax.interceptor.AroundConstruct
javax.interceptor.AroundInvoke
javax.interceptor.AroundTimeout
javax.interceptor.ExcludeClassInterceptors
javax.interceptor.ExcludeDefaultInterceptors
javax.interceptor.Interceptors
javax.jws.WebService
javax.jws.WebMethod
javax.persistence.PersistenceContext
javax.persistence.PersistenceContexts
javax.persistence.PersistenceUnit
javax.persistence.PersistenceUnits
javax.resource.AdministeredObjectDefinition
javax.resource.AdministeredObjectDefinitions
javax.resource.ConnectionFactoryDefinition
javax.resource.ConnectionFactoryDefinitions
javax.xml.ws.WebServiceRef
javax.xml.ws.WebServiceRefs