Initial commit of respository.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..107dbad
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,59 @@
+# Contributing to Jakarta Annotations
+
+Thanks for your interest in this project.
+
+## Project description
+
+**Jakarta Annotations** defines a collection of annotations representing common
+semantic concepts that enable a declarative style of programming that applies
+across a variety of Java technologies.
+
+ * https://projects.eclipse.org/projects/ee4j.ca
+
+## Developer resources
+
+Information regarding source code management, builds, coding standards, and
+more.
+
+ * https://projects.eclipse.org/projects/ee4j.ca/developer
+
+The project maintains the following source code repositories
+
+ * https://github.com/eclipse-ee4j/common-annotations-api
+
+## Eclipse Development Process
+
+This Eclipse Foundation open project is governed by the Eclipse Foundation
+Development Process and operates under the terms of the Eclipse IP Policy.
+
+The Jakarta EE Specification Committee has adopted the Jakarta EE Specification
+Process (JESP) in accordance with the Eclipse Foundation Specification Process
+v1.2 (EFSP) to ensure that the specification process is complied with by all
+Jakarta EE specification projects.
+
+* https://eclipse.org/projects/dev_process
+* https://www.eclipse.org/org/documents/Eclipse_IP_Policy.pdf
+* https://jakarta.ee/about/jesp/
+* https://www.eclipse.org/legal/efsp_non_assert.php
+
+## Eclipse Contributor Agreement
+
+Before your contribution can be accepted by the project team contributors must
+electronically sign the Eclipse Contributor Agreement (ECA).
+
+ * http://www.eclipse.org/legal/ECA.php
+
+Commits that are provided by non-committers must have a Signed-off-by field in
+the footer indicating that the author is aware of the terms by which the
+contribution has been provided to the project. The non-committer must
+additionally have an Eclipse Foundation account and must have a signed Eclipse
+Contributor Agreement (ECA) on file.
+
+For more information, please see the Eclipse Committer Handbook:
+https://www.eclipse.org/projects/handbook/#resources-commit
+
+## Contact
+
+Contact the project developers via the project's "dev" list.
+
+ * https://accounts.eclipse.org/mailing-list/ca-dev
diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
index 0000000..5de3d1b
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,637 @@
+# Eclipse Public License - v 2.0
+
+ THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+ PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
+ OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+ 1. DEFINITIONS
+
+ "Contribution" means:
+
+ a) in the case of the initial Contributor, the initial content
+ Distributed under this Agreement, and
+
+ b) in the case of each subsequent Contributor:
+ i) changes to the Program, and
+ ii) additions to the Program;
+ where such changes and/or additions to the Program originate from
+ and are Distributed by that particular Contributor. A Contribution
+ "originates" from a Contributor if it was added to the Program by
+ such Contributor itself or anyone acting on such Contributor's behalf.
+ Contributions do not include changes or additions to the Program that
+ are not Modified Works.
+
+ "Contributor" means any person or entity that Distributes the Program.
+
+ "Licensed Patents" mean patent claims licensable by a Contributor which
+ are necessarily infringed by the use or sale of its Contribution alone
+ or when combined with the Program.
+
+ "Program" means the Contributions Distributed in accordance with this
+ Agreement.
+
+ "Recipient" means anyone who receives the Program under this Agreement
+ or any Secondary License (as applicable), including Contributors.
+
+ "Derivative Works" shall mean any work, whether in Source Code or other
+ form, that is based on (or derived from) the Program and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship.
+
+ "Modified Works" shall mean any work in Source Code or other form that
+ results from an addition to, deletion from, or modification of the
+ contents of the Program, including, for purposes of clarity any new file
+ in Source Code form that contains any contents of the Program. Modified
+ Works shall not include works that contain only declarations,
+ interfaces, types, classes, structures, or files of the Program solely
+ in each case in order to link to, bind by name, or subclass the Program
+ or Modified Works thereof.
+
+ "Distribute" means the acts of a) distributing or b) making available
+ in any manner that enables the transfer of a copy.
+
+ "Source Code" means the form of a Program preferred for making
+ modifications, including but not limited to software source code,
+ documentation source, and configuration files.
+
+ "Secondary License" means either the GNU General Public License,
+ Version 2.0, or any later versions of that license, including any
+ exceptions or additional permissions as identified by the initial
+ Contributor.
+
+ 2. GRANT OF RIGHTS
+
+ a) Subject to the terms of this Agreement, each Contributor hereby
+ grants Recipient a non-exclusive, worldwide, royalty-free copyright
+ license to reproduce, prepare Derivative Works of, publicly display,
+ publicly perform, Distribute and sublicense the Contribution of such
+ Contributor, if any, and such Derivative Works.
+
+ b) Subject to the terms of this Agreement, each Contributor hereby
+ grants Recipient a non-exclusive, worldwide, royalty-free patent
+ license under Licensed Patents to make, use, sell, offer to sell,
+ import and otherwise transfer the Contribution of such Contributor,
+ if any, in Source Code or other form. This patent license shall
+ apply to the combination of the Contribution and the Program if, at
+ the time the Contribution is added by the Contributor, such addition
+ of the Contribution causes such combination to be covered by the
+ Licensed Patents. The patent license shall not apply to any other
+ combinations which include the Contribution. No hardware per se is
+ licensed hereunder.
+
+ c) Recipient understands that although each Contributor grants the
+ licenses to its Contributions set forth herein, no assurances are
+ provided by any Contributor that the Program does not infringe the
+ patent or other intellectual property rights of any other entity.
+ Each Contributor disclaims any liability to Recipient for claims
+ brought by any other entity based on infringement of intellectual
+ property rights or otherwise. As a condition to exercising the
+ rights and licenses granted hereunder, each Recipient hereby
+ assumes sole responsibility to secure any other intellectual
+ property rights needed, if any. For example, if a third party
+ patent license is required to allow Recipient to Distribute the
+ Program, it is Recipient's responsibility to acquire that license
+ before distributing the Program.
+
+ d) Each Contributor represents that to its knowledge it has
+ sufficient copyright rights in its Contribution, if any, to grant
+ the copyright license set forth in this Agreement.
+
+ e) Notwithstanding the terms of any Secondary License, no
+ Contributor makes additional grants to any Recipient (other than
+ those set forth in this Agreement) as a result of such Recipient's
+ receipt of the Program under the terms of a Secondary License
+ (if permitted under the terms of Section 3).
+
+ 3. REQUIREMENTS
+
+ 3.1 If a Contributor Distributes the Program in any form, then:
+
+ a) the Program must also be made available as Source Code, in
+ accordance with section 3.2, and the Contributor must accompany
+ the Program with a statement that the Source Code for the Program
+ is available under this Agreement, and informs Recipients how to
+ obtain it in a reasonable manner on or through a medium customarily
+ used for software exchange; and
+
+ b) the Contributor may Distribute the Program under a license
+ different than this Agreement, provided that such license:
+ i) effectively disclaims on behalf of all other Contributors all
+ warranties and conditions, express and implied, including
+ warranties or conditions of title and non-infringement, and
+ implied warranties or conditions of merchantability and fitness
+ for a particular purpose;
+
+ ii) effectively excludes on behalf of all other Contributors all
+ liability for damages, including direct, indirect, special,
+ incidental and consequential damages, such as lost profits;
+
+ iii) does not attempt to limit or alter the recipients' rights
+ in the Source Code under section 3.2; and
+
+ iv) requires any subsequent distribution of the Program by any
+ party to be under a license that satisfies the requirements
+ of this section 3.
+
+ 3.2 When the Program is Distributed as Source Code:
+
+ a) it must be made available under this Agreement, or if the
+ Program (i) is combined with other material in a separate file or
+ files made available under a Secondary License, and (ii) the initial
+ Contributor attached to the Source Code the notice described in
+ Exhibit A of this Agreement, then the Program may be made available
+ under the terms of such Secondary Licenses, and
+
+ b) a copy of this Agreement must be included with each copy of
+ the Program.
+
+ 3.3 Contributors may not remove or alter any copyright, patent,
+ trademark, attribution notices, disclaimers of warranty, or limitations
+ of liability ("notices") contained within the Program from any copy of
+ the Program which they Distribute, provided that Contributors may add
+ their own appropriate notices.
+
+ 4. COMMERCIAL DISTRIBUTION
+
+ Commercial distributors of software may accept certain responsibilities
+ with respect to end users, business partners and the like. While this
+ license is intended to facilitate the commercial use of the Program,
+ the Contributor who includes the Program in a commercial product
+ offering should do so in a manner which does not create potential
+ liability for other Contributors. Therefore, if a Contributor includes
+ the Program in a commercial product offering, such Contributor
+ ("Commercial Contributor") hereby agrees to defend and indemnify every
+ other Contributor ("Indemnified Contributor") against any losses,
+ damages and costs (collectively "Losses") arising from claims, lawsuits
+ and other legal actions brought by a third party against the Indemnified
+ Contributor to the extent caused by the acts or omissions of such
+ Commercial Contributor in connection with its distribution of the Program
+ in a commercial product offering. The obligations in this section do not
+ apply to any claims or Losses relating to any actual or alleged
+ intellectual property infringement. In order to qualify, an Indemnified
+ Contributor must: a) promptly notify the Commercial Contributor in
+ writing of such claim, and b) allow the Commercial Contributor to control,
+ and cooperate with the Commercial Contributor in, the defense and any
+ related settlement negotiations. The Indemnified Contributor may
+ participate in any such claim at its own expense.
+
+ For example, a Contributor might include the Program in a commercial
+ product offering, Product X. That Contributor is then a Commercial
+ Contributor. If that Commercial Contributor then makes performance
+ claims, or offers warranties related to Product X, those performance
+ claims and warranties are such Commercial Contributor's responsibility
+ alone. Under this section, the Commercial Contributor would have to
+ defend claims against the other Contributors related to those performance
+ claims and warranties, and if a court requires any other Contributor to
+ pay any damages as a result, the Commercial Contributor must pay
+ those damages.
+
+ 5. NO WARRANTY
+
+ EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+ PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS"
+ BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
+ IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF
+ TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR
+ PURPOSE. Each Recipient is solely responsible for determining the
+ appropriateness of using and distributing the Program and assumes all
+ risks associated with its exercise of rights under this Agreement,
+ including but not limited to the risks and costs of program errors,
+ compliance with applicable laws, damage to or loss of data, programs
+ or equipment, and unavailability or interruption of operations.
+
+ 6. DISCLAIMER OF LIABILITY
+
+ EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+ PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS
+ SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+ PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
+ EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGES.
+
+ 7. GENERAL
+
+ If any provision of this Agreement is invalid or unenforceable under
+ applicable law, it shall not affect the validity or enforceability of
+ the remainder of the terms of this Agreement, and without further
+ action by the parties hereto, such provision shall be reformed to the
+ minimum extent necessary to make such provision valid and enforceable.
+
+ If Recipient institutes patent litigation against any entity
+ (including a cross-claim or counterclaim in a lawsuit) alleging that the
+ Program itself (excluding combinations of the Program with other software
+ or hardware) infringes such Recipient's patent(s), then such Recipient's
+ rights granted under Section 2(b) shall terminate as of the date such
+ litigation is filed.
+
+ All Recipient's rights under this Agreement shall terminate if it
+ fails to comply with any of the material terms or conditions of this
+ Agreement and does not cure such failure in a reasonable period of
+ time after becoming aware of such noncompliance. If all Recipient's
+ rights under this Agreement terminate, Recipient agrees to cease use
+ and distribution of the Program as soon as reasonably practicable.
+ However, Recipient's obligations under this Agreement and any licenses
+ granted by Recipient relating to the Program shall continue and survive.
+
+ Everyone is permitted to copy and distribute copies of this Agreement,
+ but in order to avoid inconsistency the Agreement is copyrighted and
+ may only be modified in the following manner. The Agreement Steward
+ reserves the right to publish new versions (including revisions) of
+ this Agreement from time to time. No one other than the Agreement
+ Steward has the right to modify this Agreement. The Eclipse Foundation
+ is the initial Agreement Steward. The Eclipse Foundation may assign the
+ responsibility to serve as the Agreement Steward to a suitable separate
+ entity. Each new version of the Agreement will be given a distinguishing
+ version number. The Program (including Contributions) may always be
+ Distributed subject to the version of the Agreement under which it was
+ received. In addition, after a new version of the Agreement is published,
+ Contributor may elect to Distribute the Program (including its
+ Contributions) under the new version.
+
+ Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+ receives no rights or licenses to the intellectual property of any
+ Contributor under this Agreement, whether expressly, by implication,
+ estoppel or otherwise. All rights in the Program not expressly granted
+ under this Agreement are reserved. Nothing in this Agreement is intended
+ to be enforceable by any entity that is not a Contributor or Recipient.
+ No third-party beneficiary rights are created under this Agreement.
+
+ Exhibit A - Form of Secondary Licenses Notice
+
+ "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: {name license(s),
+ version(s), and exceptions or additional permissions here}."
+
+ Simply including a copy of this Agreement, including this Exhibit A
+ is not sufficient to license the Source Code under Secondary Licenses.
+
+ If it is not possible or desirable to put the notice in a particular
+ file, then You may include the notice in a location (such as a LICENSE
+ file in a relevant directory) where a recipient would be likely to
+ look for such a notice.
+
+ You may add additional accurate notices of copyright ownership.
+
+---
+
+## The GNU General Public License (GPL) Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor
+ Boston, MA 02110-1335
+ USA
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your freedom to
+ share and change it. By contrast, the GNU General Public License is
+ intended to guarantee your freedom to share and change free software--to
+ make sure the software is free for all its users. This General Public
+ License applies to most of the Free Software Foundation's software and
+ to any other program whose authors commit to using it. (Some other Free
+ Software Foundation software is covered by the GNU Library General
+ Public License instead.) You can apply it to your programs, too.
+
+ When we speak of free software, we are referring to freedom, not price.
+ Our General Public Licenses are designed to make sure that you have the
+ freedom to distribute copies of free software (and charge for this
+ service if you wish), that you receive source code or can get it if you
+ want it, that you can change the software or use pieces of it in new
+ free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid anyone
+ to deny you these rights or to ask you to surrender the rights. These
+ restrictions translate to certain responsibilities for you if you
+ distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether gratis
+ or for a fee, you must give the recipients all the rights that you have.
+ You must make sure that they, too, receive or can get the source code.
+ And you must show them these terms so they know their rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+ (2) offer you this license which gives you legal permission to copy,
+ distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+ that everyone understands that there is no warranty for this free
+ software. If the software is modified by someone else and passed on, we
+ want its recipients to know that what they have is not the original, so
+ that any problems introduced by others will not reflect on the original
+ authors' reputations.
+
+ Finally, any free program is threatened constantly by software patents.
+ We wish to avoid the danger that redistributors of a free program will
+ individually obtain patent licenses, in effect making the program
+ proprietary. To prevent this, we have made it clear that any patent must
+ be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+ modification follow.
+
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains a
+ notice placed by the copyright holder saying it may be distributed under
+ the terms of this General Public License. The "Program", below, refers
+ to any such program or work, and a "work based on the Program" means
+ either the Program or any derivative work under copyright law: that is
+ to say, a work containing the Program or a portion of it, either
+ verbatim or with modifications and/or translated into another language.
+ (Hereinafter, translation is included without limitation in the term
+ "modification".) Each licensee is addressed as "you".
+
+ Activities other than copying, distribution and modification are not
+ covered by this License; they are outside its scope. The act of running
+ the Program is not restricted, and the output from the Program is
+ covered only if its contents constitute a work based on the Program
+ (independent of having been made by running the Program). Whether that
+ is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's source
+ code as you receive it, in any medium, provided that you conspicuously
+ and appropriately publish on each copy an appropriate copyright notice
+ and disclaimer of warranty; keep intact all the notices that refer to
+ this License and to the absence of any warranty; and give any other
+ recipients of the Program a copy of this License along with the Program.
+
+ You may charge a fee for the physical act of transferring a copy, and
+ you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion of
+ it, thus forming a work based on the Program, and copy and distribute
+ such modifications or work under the terms of Section 1 above, provided
+ that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any part
+ thereof, to be licensed as a whole at no charge to all third parties
+ under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a notice
+ that there is no warranty (or else, saying that you provide a
+ warranty) and that users may redistribute the program under these
+ conditions, and telling the user how to view a copy of this License.
+ (Exception: if the Program itself is interactive but does not
+ normally print such an announcement, your work based on the Program
+ is not required to print an announcement.)
+
+ These requirements apply to the modified work as a whole. If
+ identifiable sections of that work are not derived from the Program, and
+ can be reasonably considered independent and separate works in
+ themselves, then this License, and its terms, do not apply to those
+ sections when you distribute them as separate works. But when you
+ distribute the same sections as part of a whole which is a work based on
+ the Program, the distribution of the whole must be on the terms of this
+ License, whose permissions for other licensees extend to the entire
+ whole, and thus to each and every part regardless of who wrote it.
+
+ Thus, it is not the intent of this section to claim rights or contest
+ your rights to work written entirely by you; rather, the intent is to
+ exercise the right to control the distribution of derivative or
+ collective works based on the Program.
+
+ In addition, mere aggregation of another work not based on the Program
+ with the Program (or with a work based on the Program) on a volume of a
+ storage or distribution medium does not bring the other work under the
+ scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+ under Section 2) in object code or executable form under the terms of
+ Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections 1
+ and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your cost
+ of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer to
+ distribute corresponding source code. (This alternative is allowed
+ only for noncommercial distribution and only if you received the
+ program in object code or executable form with such an offer, in
+ accord with Subsection b above.)
+
+ The source code for a work means the preferred form of the work for
+ making modifications to it. For an executable work, complete source code
+ means all the source code for all modules it contains, plus any
+ associated interface definition files, plus the scripts used to control
+ compilation and installation of the executable. However, as a special
+ exception, the source code distributed need not include anything that is
+ normally distributed (in either source or binary form) with the major
+ components (compiler, kernel, and so on) of the operating system on
+ which the executable runs, unless that component itself accompanies the
+ executable.
+
+ If distribution of executable or object code is made by offering access
+ to copy from a designated place, then offering equivalent access to copy
+ the source code from the same place counts as distribution of the source
+ code, even though third parties are not compelled to copy the source
+ along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+ except as expressly provided under this License. Any attempt otherwise
+ to copy, modify, sublicense or distribute the Program is void, and will
+ automatically terminate your rights under this License. However, parties
+ who have received copies, or rights, from you under this License will
+ not have their licenses terminated so long as such parties remain in
+ full compliance.
+
+ 5. You are not required to accept this License, since you have not
+ signed it. However, nothing else grants you permission to modify or
+ distribute the Program or its derivative works. These actions are
+ prohibited by law if you do not accept this License. Therefore, by
+ modifying or distributing the Program (or any work based on the
+ Program), you indicate your acceptance of this License to do so, and all
+ its terms and conditions for copying, distributing or modifying the
+ Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+ Program), the recipient automatically receives a license from the
+ original licensor to copy, distribute or modify the Program subject to
+ these terms and conditions. You may not impose any further restrictions
+ on the recipients' exercise of the rights granted herein. You are not
+ responsible for enforcing compliance by third parties to this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+ infringement or for any other reason (not limited to patent issues),
+ conditions are imposed on you (whether by court order, agreement or
+ otherwise) that contradict the conditions of this License, they do not
+ excuse you from the conditions of this License. If you cannot distribute
+ so as to satisfy simultaneously your obligations under this License and
+ any other pertinent obligations, then as a consequence you may not
+ distribute the Program at all. For example, if a patent license would
+ not permit royalty-free redistribution of the Program by all those who
+ receive copies directly or indirectly through you, then the only way you
+ could satisfy both it and this License would be to refrain entirely from
+ distribution of the Program.
+
+ If any portion of this section is held invalid or unenforceable under
+ any particular circumstance, the balance of the section is intended to
+ apply and the section as a whole is intended to apply in other
+ circumstances.
+
+ It is not the purpose of this section to induce you to infringe any
+ patents or other property right claims or to contest validity of any
+ such claims; this section has the sole purpose of protecting the
+ integrity of the free software distribution system, which is implemented
+ by public license practices. Many people have made generous
+ contributions to the wide range of software distributed through that
+ system in reliance on consistent application of that system; it is up to
+ the author/donor to decide if he or she is willing to distribute
+ software through any other system and a licensee cannot impose that choice.
+
+ This section is intended to make thoroughly clear what is believed to be
+ a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+ certain countries either by patents or by copyrighted interfaces, the
+ original copyright holder who places the Program under this License may
+ add an explicit geographical distribution limitation excluding those
+ countries, so that distribution is permitted only in or among countries
+ not thus excluded. In such case, this License incorporates the
+ limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new
+ versions of the General Public License from time to time. Such new
+ versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the Program
+ specifies a version number of this License which applies to it and "any
+ later version", you have the option of following the terms and
+ conditions either of that version or of any later version published by
+ the Free Software Foundation. If the Program does not specify a version
+ number of this License, you may choose any version ever published by the
+ Free Software Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+ programs whose distribution conditions are different, write to the
+ author to ask for permission. For software which is copyrighted by the
+ Free Software Foundation, write to the Free Software Foundation; we
+ sometimes make exceptions for this. Our decision will be guided by the
+ two goals of preserving the free status of all derivatives of our free
+ software and of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
+ WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+ EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+ OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND,
+ EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
+ ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH
+ YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
+ NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+ WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+ AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR
+ DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL
+ DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM
+ (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED
+ INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF
+ THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR
+ OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+ possible use to the public, the best way to achieve this is to make it
+ free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest to
+ attach them to the start of each source file to most effectively convey
+ the exclusion of warranty; and each file should have at least the
+ "copyright" line and a pointer to where the full notice is found.
+
+ One line to give the program's name and a brief idea of what it does.
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA
+
+ Also add information on how to contact you by electronic and paper mail.
+
+ If the program is interactive, make it output a short notice like this
+ when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type
+ `show w'. This is free software, and you are welcome to redistribute
+ it under certain conditions; type `show c' for details.
+
+ The hypothetical commands `show w' and `show c' should show the
+ appropriate parts of the General Public License. Of course, the commands
+ you use may be called something other than `show w' and `show c'; they
+ could even be mouse-clicks or menu items--whatever suits your program.
+
+ You should also get your employer (if you work as a programmer) or your
+ school, if any, to sign a "copyright disclaimer" for the program, if
+ necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ program `Gnomovision' (which makes passes at compilers) written by
+ James Hacker.
+
+ signature of Ty Coon, 1 April 1989
+ Ty Coon, President of Vice
+
+ This General Public License does not permit incorporating your program
+ into proprietary programs. If your program is a subroutine library, you
+ may consider it more useful to permit linking proprietary applications
+ with the library. If this is what you want to do, use the GNU Library
+ General Public License instead of this License.
+
+---
+
+## CLASSPATH EXCEPTION
+
+ Linking this library statically or dynamically with other modules is
+ making a combined work based on this library. Thus, the terms and
+ conditions of the GNU General Public License version 2 cover the whole
+ combination.
+
+ As a special exception, the copyright holders of this library give you
+ permission to link this library with independent modules to produce an
+ executable, regardless of the license terms of these independent
+ modules, and to copy and distribute the resulting executable under
+ terms of your choice, provided that you also meet, for each linked
+ independent module, the terms and conditions of the license of that
+ module. An independent module is a module which is not derived from or
+ based on this library. If you modify this library, you may extend this
+ exception to your version of the library, but you are not obligated to
+ do so. If you do not wish to do so, delete this exception statement
+ from your version.
diff --git a/NOTICE.md b/NOTICE.md
new file mode 100644
index 0000000..6e7560a
--- /dev/null
+++ b/NOTICE.md
@@ -0,0 +1,38 @@
+# Notices for Jakarta Annotations
+
+This content is produced and maintained by the Jakarta Annotations project.
+
+ * Project home: https://projects.eclipse.org/projects/ee4j.ca
+
+## Trademarks
+
+Jakarta Annotations is a trademark of the Eclipse Foundation.
+
+## Declared Project Licenses
+
+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
+
+## Source Code
+
+The project maintains the following source code repositories:
+
+ * https://github.com/eclipse-ee4j/common-annotations-api
+
+## Third-party Content
+
+## Cryptography
+
+Content may contain encryption software. The country in which you are currently
+may have restrictions on the import, possession, and use, and/or re-export to
+another country, of encryption software. BEFORE using any encryption software,
+please check the country's laws, regulations and policies concerning the import,
+possession, or use, and re-export of encryption software, to see if this is
+permitted.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..a9ba718
--- /dev/null
+++ b/README.md
@@ -0,0 +1,8 @@
+# Jakarta Annotations [![Build Status](https://travis-ci.org/eclipse-ee4j/common-annotations-api.svg?branch=master)](https://travis-ci.org/eclipse-ee4j/common-annotations-api)
+
+**Jakarta Annotations** defines a collection of annotations representing common
+semantic concepts that enable a declarative style of programming that applies
+across a variety of Java technologies.
+
+Jakarta Annotations uses a [Java Platform Module System](http://openjdk.java.net/projects/jigsaw/spec/)
+module name `jakarta.annotation`.
diff --git a/api/pom.xml b/api/pom.xml
new file mode 100644
index 0000000..60e530a
--- /dev/null
+++ b/api/pom.xml
@@ -0,0 +1,362 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Copyright (c) 2012, 2020 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
+
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.eclipse.ee4j</groupId>
+ <artifactId>project</artifactId>
+ <version>1.0.6</version>
+ <relativePath/>
+ </parent>
+
+ <groupId>jakarta.annotation</groupId>
+ <artifactId>jakarta.annotation-api</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+
+ <name>Jakarta Annotations API</name>
+ <description>Jakarta Annotations API</description>
+
+ <url>https://projects.eclipse.org/projects/ee4j.ca</url>
+
+ <inceptionYear>2004</inceptionYear>
+
+ <developers>
+ <developer>
+ <name>Linda De Michiel</name>
+ <organization>Oracle Corp.</organization>
+ </developer>
+ </developers>
+
+ <licenses>
+ <license>
+ <name>EPL 2.0</name>
+ <url>http://www.eclipse.org/legal/epl-2.0</url>
+ <distribution>repo</distribution>
+ </license>
+ <license>
+ <name>GPL2 w/ CPE</name>
+ <url>https://www.gnu.org/software/classpath/license.html</url>
+ <distribution>repo</distribution>
+ </license>
+ </licenses>
+
+ <scm>
+ <connection>scm:git:https://github.com/eclipse-ee4j/common-annotations-api.git</connection>
+ <developerConnection>scm:git:git@github.com:eclipse-ee4j/common-annotations-api.git</developerConnection>
+ <url>https://github.com/eclipse-ee4j/common-annotations-api</url>
+ <tag>HEAD</tag>
+ </scm>
+
+ <issueManagement>
+ <system>github</system>
+ <url>https://github.com/eclipse-ee4j/common-annotations-api/issues</url>
+ </issueManagement>
+
+ <mailingLists>
+ <mailingList>
+ <name>Jakarta Annotations mailing list</name>
+ <post>ca-dev@eclipse.org</post>
+ <subscribe>https://dev.eclipse.org/mailman/listinfo/ca-dev</subscribe>
+ <unsubscribe>https://dev.eclipse.org/mailman/listinfo/ca-dev</unsubscribe>
+ <archive>https://dev.eclipse.org/mhonarc/lists/ca-dev</archive>
+ </mailingList>
+ </mailingLists>
+
+ <properties>
+ <copyright.ignoreyear>false</copyright.ignoreyear>
+ <copyright.scmonly>true</copyright.scmonly>
+ <copyright.update>false</copyright.update>
+ <spotbugs.skip>false</spotbugs.skip>
+ <spotbugs.threshold>Low</spotbugs.threshold>
+ <spotbugs.version>4.0.4</spotbugs.version>
+
+ <non.final>false</non.final>
+ <spec.version>2.0</spec.version>
+ <extension.name>jakarta.annotation</extension.name>
+ <vendor.name>Eclipse Foundation</vendor.name>
+ <implementation.vendor.id>org.glassfish</implementation.vendor.id>
+ </properties>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <version>3.2.0</version>
+ </plugin>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>3.8.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.glassfish.copyright</groupId>
+ <artifactId>glassfish-copyright-maven-plugin</artifactId>
+ <version>2.3</version>
+ </plugin>
+ <plugin>
+ <groupId>org.glassfish.build</groupId>
+ <artifactId>spec-version-maven-plugin</artifactId>
+ <version>2.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <version>5.1.1</version>
+ <configuration>
+ <instructions>
+ <_noextraheaders>true</_noextraheaders>
+ </instructions>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>3.2.0</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-source-plugin</artifactId>
+ <version>3.2.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <version>3.2.0</version>
+ </plugin>
+ <plugin>
+ <groupId>com.github.spotbugs</groupId>
+ <artifactId>spotbugs-maven-plugin</artifactId>
+ <version>${spotbugs.version}</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-enforcer-plugin</artifactId>
+ <version>3.0.0-M3</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-enforcer-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>enforce-maven</id>
+ <goals>
+ <goal>enforce</goal>
+ </goals>
+ <configuration>
+ <rules>
+ <requireJavaVersion>
+ <version>[11,)</version>
+ </requireJavaVersion>
+ <requireMavenVersion>
+ <version>[3.6.0,)</version>
+ </requireMavenVersion>
+ </rules>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.glassfish.copyright</groupId>
+ <artifactId>glassfish-copyright-maven-plugin</artifactId>
+ <configuration>
+ <!-- skip files not under SCM-->
+ <scmOnly>${copyright.scmonly}</scmOnly>
+ <!-- for use with repair -->
+ <update>${copyright.update}</update>
+ <!-- check that year is correct -->
+ <ignoreYear>${copyright.ignoreyear}</ignoreYear>
+ </configuration>
+ <executions>
+ <execution>
+ <phase>validate</phase>
+ <goals>
+ <goal>check</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>add-resource</id>
+ <phase>generate-resources</phase>
+ <goals>
+ <goal>add-resource</goal>
+ </goals>
+ <configuration>
+ <resources>
+ <resource>
+ <directory>${basedir}/..</directory>
+ <targetPath>META-INF</targetPath>
+ <includes>
+ <include>LICENSE.md</include>
+ <include>NOTICE.md</include>
+ </includes>
+ </resource>
+ </resources>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <release>9</release>
+ <compilerArgs>
+ <arg>-Xlint:all</arg>
+ </compilerArgs>
+ </configuration>
+ <executions>
+ <execution>
+ <id>base-compile</id>
+ <goals>
+ <goal>compile</goal>
+ </goals>
+ <configuration>
+ <release>8</release>
+ <excludes>
+ <exclude>module-info.java</exclude>
+ </excludes>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.glassfish.build</groupId>
+ <artifactId>spec-version-maven-plugin</artifactId>
+ <configuration>
+ <specMode>jakarta</specMode>
+ <spec>
+ <nonFinal>${non.final}</nonFinal>
+ <jarType>api</jarType>
+ <specBuild>${spec.build}</specBuild>
+ <specVersion>${spec.version}</specVersion>
+ <newSpecVersion>${new.spec.version}</newSpecVersion>
+ <specImplVersion>${project.version}</specImplVersion>
+ <apiPackage>${extension.name}</apiPackage>
+ </spec>
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>set-spec-properties</goal>
+ <!-- TODO:
+ glassfish-spec-version-maven-plugin needs to be updated
+ in order to check 'jakarta.' prefixed values in manifest entries
+ -->
+ <!--<goal>check-module</goal>-->
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <configuration>
+ <instructions>
+ <Bundle-Version>${spec.bundle.version}</Bundle-Version>
+ <Bundle-SymbolicName>${spec.bundle.symbolic-name}</Bundle-SymbolicName>
+ <Extension-Name>${spec.extension.name}</Extension-Name>
+ <Implementation-Version>${spec.implementation.version}</Implementation-Version>
+ <Specification-Version>${spec.specification.version}</Specification-Version>
+ <Bundle-Description>${project.name}</Bundle-Description>
+ <Specification-Vendor>${vendor.name}</Specification-Vendor>
+ <Implementation-Vendor>${project.organization.name}</Implementation-Vendor>
+ <Implementation-Vendor-Id>${implementation.vendor.id}</Implementation-Vendor-Id>
+ </instructions>
+ </configuration>
+ <executions>
+ <execution>
+ <id>bundle-manifest</id>
+ <phase>process-classes</phase>
+ <goals>
+ <goal>manifest</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <configuration>
+ <archive>
+ <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
+ </archive>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-source-plugin</artifactId>
+ <configuration>
+ <archive>
+ <manifest>
+ <addDefaultEntries>false</addDefaultEntries>
+ <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
+ </manifest>
+ <manifestEntries>
+ <Implementation-Build-Id>${buildNumber}</Implementation-Build-Id>
+ </manifestEntries>
+ </archive>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <archive>
+ <manifest>
+ <addDefaultEntries>false</addDefaultEntries>
+ </manifest>
+ </archive>
+ <release>11</release>
+ <additionalOptions>--add-modules java.sql</additionalOptions>
+ <notimestamp>true</notimestamp>
+ <nosince>true</nosince>
+ <docfilessubdirs>true</docfilessubdirs>
+ <doctitle>Jakarta Annotations ${project.version} API Specification</doctitle>
+ <header><![CDATA[<br>Jakarta Annotations API v${project.version}]]></header>
+ <bottom><![CDATA[
+ Copyright © 2019, 2020 Eclipse Foundation. All rights reserved.<br>
+ Use is subject to <a href="{@docRoot}/doc-files/EFSL.html" target="_top">license terms</a>.]]>
+ </bottom>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>com.github.spotbugs</groupId>
+ <artifactId>spotbugs-maven-plugin</artifactId>
+ <configuration>
+ <skip>${spotbugs.skip}</skip>
+ <threshold>${spotbugs.threshold}</threshold>
+ <findbugsXmlWithMessages>true</findbugsXmlWithMessages>
+ <fork>true</fork>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/api/src/main/java/jakarta/annotation/Generated.java b/api/src/main/java/jakarta/annotation/Generated.java
new file mode 100644
index 0000000..8ccd0de
--- /dev/null
+++ b/api/src/main/java/jakarta/annotation/Generated.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2005, 2020 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
+ */
+
+package jakarta.annotation;
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+/**
+ * The <code>Generated</code> annotation is used to mark source code
+ * that has been generated.
+ * It can also be used to differentiate user written code from generated code
+ * in a single file.
+ * <p>The <code>value</code> element must have the name of the
+ * code generator. The recommended convention is to use the fully qualified
+ * name of the code generator in the value field,
+ * for example <code>com.company.package.classname</code>.</p>
+ * <p>The <code>date</code> element is used to indicate the date the
+ * source was generated.
+ * The <code>date</code> element must follow the ISO 8601 standard.
+ * For example, the <code>date</code> element could have the
+ * value <code>2001-07-04T12:08:56.235-0700</code>,
+ * which represents 2001-07-04 12:08:56 local time in the U.S. Pacific
+ * time zone.</p>
+ * <p>The <code>comment</code> element is a place holder for any comments
+ * that the code generator may want to include in the generated code.</p>
+ *
+ * @since 1.6, Common Annotations 1.0
+ */
+
+@Documented
+@Retention(SOURCE)
+@Target({PACKAGE, TYPE, ANNOTATION_TYPE, METHOD, CONSTRUCTOR, FIELD,
+ LOCAL_VARIABLE, PARAMETER})
+public @interface Generated {
+ /**
+ * The value element must have the name of the code generator.
+ * The recommended convention is to use the fully qualified name of the
+ * code generator. For example: <code>com.acme.generator.CodeGen</code>.
+ */
+ String[] value();
+
+ /**
+ * Date when the source was generated.
+ */
+ String date() default "";
+
+ /**
+ * A place holder for any comments that the code generator may want to
+ * include in the generated code.
+ */
+ String comments() default "";
+}
+
diff --git a/api/src/main/java/jakarta/annotation/ManagedBean.java b/api/src/main/java/jakarta/annotation/ManagedBean.java
new file mode 100644
index 0000000..496ac9e
--- /dev/null
+++ b/api/src/main/java/jakarta/annotation/ManagedBean.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2009, 2020 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
+ */
+
+package jakarta.annotation;
+
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+/**
+ * The <code>ManagedBean</code> annotation marks a POJO (Plain Old Java Object)
+ * as a ManagedBean. A ManagedBean supports a small set of basic services
+ * such as resource injection, lifecycle callbacks and interceptors.
+ *
+ * @since Common Annotations 1.1
+ */
+@Target(TYPE)
+@Retention(RUNTIME)
+public @interface ManagedBean {
+ /**
+ * The name of the Jakarta Managed Bean. Jakarta Managed Bean names must be unique within a
+ * Jakarta EE module. For each named Jakarta Managed Bean, Jakarta EE containers must make
+ * available the following entries in JNDI, using the same naming scheme used
+ * for Jakarta Enterprise Beans components.
+ * <p>
+ * In the application namespace: <p>
+ * java:app/<module-name>/<bean-name> <p>
+ * In the module namespace of the module containing the Jakarta Managed Bean:
+ * <p> java:module/<bean-name>
+ *
+ */
+ public String value() default "";
+}
diff --git a/api/src/main/java/jakarta/annotation/PostConstruct.java b/api/src/main/java/jakarta/annotation/PostConstruct.java
new file mode 100644
index 0000000..29b156e
--- /dev/null
+++ b/api/src/main/java/jakarta/annotation/PostConstruct.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2005, 2020 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
+ */
+
+package jakarta.annotation;
+
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+/**
+ * The <code>PostConstruct</code> annotation is used on a method that
+ * needs to be executed after dependency injection is done to perform
+ * any initialization. This method must be invoked before the class
+ * is put into service. This annotation must be supported on all classes
+ * that support dependency injection. The method annotated with
+ * <code>PostConstruct</code> must be invoked even if the class does
+ * not request any resources to be injected. Only one
+ * method in a given class can be annotated with this annotation.
+ * The method on which the <code>PostConstruct</code> annotation is
+ * applied must fulfill all of the following criteria:
+ * <ul>
+ * <li>The method must not have any parameters except in the case of
+ * interceptors in which case it takes an <code>InvocationContext</code>
+ * object as defined by the Jakarta Interceptors specification.</li>
+ * <li>The method defined on an interceptor class or superclass of an
+ * interceptor class must have one of the following signatures:
+ * <p>
+ * void <METHOD>(InvocationContext)
+ * <p>
+ * Object <METHOD>(InvocationContext) throws Exception
+ * <p>
+ * <i>Note: A PostConstruct interceptor method must not throw application
+ * exceptions, but it may be declared to throw checked exceptions including
+ * the java.lang.Exception if the same interceptor method interposes on
+ * business or timeout methods in addition to lifecycle events. If a
+ * PostConstruct interceptor method returns a value, it is ignored by
+ * the container.</i>
+ * </li>
+ * <li>The method defined on a non-interceptor class must have the
+ * following signature:
+ * <p>
+ * void <METHOD>()
+ * </li>
+ * <li>The method on which the <code>PostConstruct</code> annotation
+ * is applied may be public, protected, package private or private.</li>
+ * <li>The method must not be static except for the application client.</li>
+ * <li>The method should not be final.</li>
+ * <li>If the method throws an unchecked exception the class must not be put into
+ * service except in the case where the exception is handled by an
+ * interceptor.</li></ul>
+ *
+ * @see jakarta.annotation.PreDestroy
+ * @see jakarta.annotation.Resource
+ * @since 1.6, Common Annotations 1.0
+ */
+@Documented
+@Retention (RUNTIME)
+@Target(METHOD)
+public @interface PostConstruct {
+}
diff --git a/api/src/main/java/jakarta/annotation/PreDestroy.java b/api/src/main/java/jakarta/annotation/PreDestroy.java
new file mode 100644
index 0000000..ea93380
--- /dev/null
+++ b/api/src/main/java/jakarta/annotation/PreDestroy.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2005, 2020 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
+ */
+
+package jakarta.annotation;
+
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+/**
+ * The <code>PreDestroy</code> annotation is used on a method as a
+ * callback notification to signal that the instance is in the
+ * process of being removed by the container. The method annotated
+ * with <code>PreDestroy</code> is typically used to
+ * release resources that it has been holding. This annotation must be
+ * supported by all container-managed objects that support the use of
+ * the <code>PostConstruct</code> annotation except the Jakarta EE application
+ * client. The method on which the <code>PreDestroy</code> annotation
+ * is applied must fulfill all of the following criteria:
+ * <ul>
+ * <li>The method must not have any parameters except in the case of
+ * interceptors in which case it takes an <code>InvocationContext</code>
+ * object as defined by the Jakarta Interceptors specification.</li>
+ * <li>The method defined on an interceptor class or superclass of an
+ * interceptor class must have one of the following signatures:
+ * <p>
+ * void <METHOD>(InvocationContext)
+ * <p>
+ * Object <METHOD>(InvocationContext) throws Exception
+ * <p>
+ * <i>Note: A PreDestroy interceptor method must not throw application
+ * exceptions, but it may be declared to throw checked exceptions including
+ * the java.lang.Exception if the same interceptor method interposes on
+ * business or timeout methods in addition to lifecycle events. If a
+ * PreDestroy interceptor method returns a value, it is ignored by
+ * the container.</i>
+ * </li>
+ * <li>The method defined on a non-interceptor class must have the
+ * following signature:
+ * <p>
+ * void <METHOD>()
+ * </li>
+ * <li>The method on which PreDestroy is applied may be public, protected,
+ * package private or private.</li>
+ * <li>The method must not be static.</li>
+ * <li>The method should not be final.</li>
+ * <li>If the method throws an unchecked exception it is ignored by
+ * the container.</li>
+ * </ul>
+ *
+ * @see jakarta.annotation.PostConstruct
+ * @see jakarta.annotation.Resource
+ * @since 1.6, Common Annotations 1.0
+ */
+
+@Documented
+@Retention (RUNTIME)
+@Target(METHOD)
+public @interface PreDestroy {
+}
diff --git a/api/src/main/java/jakarta/annotation/Priority.java b/api/src/main/java/jakarta/annotation/Priority.java
new file mode 100644
index 0000000..dfd7b1c
--- /dev/null
+++ b/api/src/main/java/jakarta/annotation/Priority.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2005, 2020 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
+ */
+
+package jakarta.annotation;
+
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+/**
+ * The <code>Priority</code> annotation can be applied to classes
+ * or parameters to indicate in what order they should be used.
+ * The effect of using the <code>Priority</code> annotation in
+ * any particular instance is defined by other specifications that
+ * define the use of a specific class.
+ * <p>
+ * For example, the Jakarta Interceptors specification defines the use of
+ * priorities on interceptors to control the order in which
+ * interceptors are called.</p>
+ * <p>
+ * Priority values should generally be non-negative, with negative values
+ * reserved for special meanings such as "undefined" or "not specified".
+ * A specification that defines use of the <code>Priority</code> annotation may define
+ * the range of allowed priorities and any priority values with special
+ * meaning.</p>
+ *
+ * @since Common Annotations 1.2
+ */
+@Target({TYPE,PARAMETER})
+@Retention(RUNTIME)
+@Documented
+public @interface Priority {
+ /**
+ * The priority value.
+ */
+ int value();
+}
diff --git a/api/src/main/java/jakarta/annotation/Resource.java b/api/src/main/java/jakarta/annotation/Resource.java
new file mode 100644
index 0000000..cb39804
--- /dev/null
+++ b/api/src/main/java/jakarta/annotation/Resource.java
@@ -0,0 +1,119 @@
+/*
+ * Copyright (c) 2005, 2020 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
+ */
+
+package jakarta.annotation;
+
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+/**
+ * The <code>Resource</code> annotation marks a resource that is needed
+ * by the application. This annotation may be applied to an
+ * application component class, or to fields or methods of the
+ * component class. When the annotation is applied to a
+ * field or method, the container will inject an instance
+ * of the requested resource into the application component
+ * when the component is initialized. If the annotation is
+ * applied to the component class, the annotation declares a
+ * resource that the application will look up at runtime.
+ * <p>
+ * Even though this annotation is not marked <code>Inherited</code>, deployment
+ * tools are required to examine all superclasses of any component
+ * class to discover all uses of this annotation in all superclasses.
+ * All such annotation instances specify resources that are needed
+ * by the application component. Note that this annotation may
+ * appear on private fields and methods of superclasses; the container
+ * is required to perform injection in these cases as well.</p>
+ *
+ * @since 1.6, Common Annotations 1.0
+ */
+@Target({TYPE, FIELD, METHOD})
+@Retention(RUNTIME)
+@Repeatable(Resources.class)
+public @interface Resource {
+ /**
+ * The JNDI name of the resource. For field annotations,
+ * the default is the field name. For method annotations,
+ * the default is the JavaBeans property name corresponding
+ * to the method. For class annotations, there is no default
+ * and this must be specified.
+ */
+ String name() default "";
+
+ /**
+ * The name of the resource that the reference points to. It can
+ * link to any compatible resource using the global JNDI names.
+ *
+ * @since 1.7, Common Annotations 1.1
+ */
+
+ String lookup() default "";
+
+ /**
+ * The Java type of the resource. For field annotations,
+ * the default is the type of the field. For method annotations,
+ * the default is the type of the JavaBeans property.
+ * For class annotations, there is no default and this must be
+ * specified.
+ */
+ Class<?> type() default java.lang.Object.class;
+
+ /**
+ * The two possible authentication types for a resource.
+ */
+ enum AuthenticationType {
+ CONTAINER,
+ APPLICATION
+ }
+
+ /**
+ * The authentication type to use for this resource.
+ * This may be specified for resources representing a
+ * connection factory of any supported type, and must
+ * not be specified for resources of other types.
+ */
+ AuthenticationType authenticationType() default AuthenticationType.CONTAINER;
+
+ /**
+ * Indicates whether this resource can be shared between
+ * this component and other components.
+ * This may be specified for resources representing a
+ * connection factory of any supported type, and must
+ * not be specified for resources of other types.
+ */
+ boolean shareable() default true;
+
+ /**
+ * A product-specific name that this resource should be mapped to.
+ * The <code>mappedName</code> element provides for mapping the
+ * resource reference to the name of a resource known to the
+ * applicaiton server. The mapped name could be of any form.
+ * <p>Application servers are not required to support any particular
+ * form or type of mapped name, nor the ability to use mapped names.
+ * The mapped name is product-dependent and often installation-dependent.
+ * No use of a mapped name is portable.</p>
+ */
+ String mappedName() default "";
+
+ /**
+ * Description of this resource. The description is expected
+ * to be in the default language of the system on which the
+ * application is deployed. The description can be presented
+ * to the Deployer to help in choosing the correct resource.
+ */
+ String description() default "";
+}
diff --git a/api/src/main/java/jakarta/annotation/Resources.java b/api/src/main/java/jakarta/annotation/Resources.java
new file mode 100644
index 0000000..eaa2d4c
--- /dev/null
+++ b/api/src/main/java/jakarta/annotation/Resources.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2005, 2020 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
+ */
+
+package jakarta.annotation;
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+/**
+ * This class is used to allow multiple resources declarations.
+ *
+ * @see jakarta.annotation.Resource
+ * @since 1.6, Common Annotations 1.0
+ */
+
+@Documented
+@Retention(RUNTIME)
+@Target(TYPE)
+public @interface Resources {
+ /**
+ * Array used for multiple resource declarations.
+ */
+ Resource[] value();
+}
diff --git a/api/src/main/java/jakarta/annotation/package-info.java b/api/src/main/java/jakarta/annotation/package-info.java
new file mode 100644
index 0000000..f108b8c
--- /dev/null
+++ b/api/src/main/java/jakarta/annotation/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2018, 2020 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
+ */
+
+/**
+ * This package defines the common annotations.
+ */
+package jakarta.annotation;
diff --git a/api/src/main/java/jakarta/annotation/security/DeclareRoles.java b/api/src/main/java/jakarta/annotation/security/DeclareRoles.java
new file mode 100644
index 0000000..36c1ce8
--- /dev/null
+++ b/api/src/main/java/jakarta/annotation/security/DeclareRoles.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2005, 2020 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
+ */
+
+package jakarta.annotation.security;
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+/**
+ * Used by application to declare security roles. It can be
+ * specified on a class. The value of the <code>DeclareRoles</code>
+ * annotation is a list of security role names.
+ *
+ * @since Common Annotations 1.0
+ */
+@Documented
+@Retention (RUNTIME)
+@Target(TYPE)
+public @interface DeclareRoles {
+ /**
+ * List of security role names.
+ */
+ String[] value();
+}
diff --git a/api/src/main/java/jakarta/annotation/security/DenyAll.java b/api/src/main/java/jakarta/annotation/security/DenyAll.java
new file mode 100644
index 0000000..e32a7e1
--- /dev/null
+++ b/api/src/main/java/jakarta/annotation/security/DenyAll.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2005, 2020 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
+ */
+
+package jakarta.annotation.security;
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+/**
+ * Specifies that no security roles are allowed to invoke the specified
+ * method(s).
+ *
+ * @see jakarta.annotation.security.RolesAllowed
+ * @see jakarta.annotation.security.PermitAll
+ * @since Common Annotations 1.0
+ */
+@Documented
+@Retention (RUNTIME)
+@Target({TYPE, METHOD})
+public @interface DenyAll {
+}
diff --git a/api/src/main/java/jakarta/annotation/security/PermitAll.java b/api/src/main/java/jakarta/annotation/security/PermitAll.java
new file mode 100644
index 0000000..256bee9
--- /dev/null
+++ b/api/src/main/java/jakarta/annotation/security/PermitAll.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2005, 2020 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
+ */
+
+package jakarta.annotation.security;
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+/**
+ * Specifies that all security roles are allowed to invoke the specified
+ * method(s) — i.e., that the specified method(s) are "unchecked".
+ * It can be specified on a class or on methods. Specifying it on the class
+ * means that it applies to all methods of the class. If specified at the
+ * method level, it only affects that method. If the <code>RolesAllowed</code>
+ * annotation is specified at the class level and this annotation is
+ * applied at the method level, the <code>PermitAll</code>
+ * annotation overrides the <code>RolesAllowed</code> annotation for
+ * the specified method.
+ *
+ * @see jakarta.annotation.security.RolesAllowed
+ * @see jakarta.annotation.security.DenyAll
+ *
+ * @since Common Annotations 1.0
+ */
+@Documented
+@Retention (RUNTIME)
+@Target({TYPE, METHOD})
+public @interface PermitAll {
+}
diff --git a/api/src/main/java/jakarta/annotation/security/RolesAllowed.java b/api/src/main/java/jakarta/annotation/security/RolesAllowed.java
new file mode 100644
index 0000000..9c717de
--- /dev/null
+++ b/api/src/main/java/jakarta/annotation/security/RolesAllowed.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2005, 2020 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
+ */
+
+package jakarta.annotation.security;
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+/**
+ * Specifies the list of security roles permitted to access method(s) in an
+ * application. The value of the <code>RolesAllowed</code> annotation
+ * is a list of security role names.
+ * This annotation can be specified on a class or on method(s). Specifying it
+ * at a class level means that it applies to all the methods in the class.
+ * Specifying it on a method means that it is applicable to that method only.
+ * If applied at both the class and methods level, the method value overrides
+ * the class value if the two conflict.
+ *
+ * @since Common Annotations 1.0
+ */
+@Documented
+@Retention (RUNTIME)
+@Target({TYPE, METHOD})
+public @interface RolesAllowed {
+ /**
+ * List of roles that are permitted access.
+ */
+ String[] value();
+}
diff --git a/api/src/main/java/jakarta/annotation/security/RunAs.java b/api/src/main/java/jakarta/annotation/security/RunAs.java
new file mode 100644
index 0000000..5a744eb
--- /dev/null
+++ b/api/src/main/java/jakarta/annotation/security/RunAs.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2005, 2020 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
+ */
+
+package jakarta.annotation.security;
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+/**
+ * Defines the identity of the application during execution.
+ * This allows developers to execute an application under a particular role.
+ * The role must map to the user / group information in the container's
+ * security realm. Its value is the name of a security role.
+ *
+ * @since Common Annotations 1.0
+ */
+@Documented
+@Retention (RUNTIME)
+@Target(TYPE)
+public @interface RunAs {
+ /**
+ * Name of a security role.
+ */
+ String value();
+}
diff --git a/api/src/main/java/jakarta/annotation/security/package-info.java b/api/src/main/java/jakarta/annotation/security/package-info.java
new file mode 100644
index 0000000..7482fd3
--- /dev/null
+++ b/api/src/main/java/jakarta/annotation/security/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2018, 2020 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
+ */
+
+/**
+ * This package contains the security common annotations.
+ */
+package jakarta.annotation.security;
diff --git a/api/src/main/java/jakarta/annotation/sql/DataSourceDefinition.java b/api/src/main/java/jakarta/annotation/sql/DataSourceDefinition.java
new file mode 100644
index 0000000..845e48c
--- /dev/null
+++ b/api/src/main/java/jakarta/annotation/sql/DataSourceDefinition.java
@@ -0,0 +1,313 @@
+/*
+ * Copyright (c) 2009, 2020 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
+ */
+
+package jakarta.annotation.sql;
+
+import java.lang.annotation.*;
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Annotation used to define a container <code>DataSource</code> to
+ * be registered with JNDI. The <code>DataSource</code> may be configured by
+ * setting the annotation elements for commonly used <code>DataSource</code>
+ * properties. Additional standard and vendor-specific properties may be
+ * specified using the <code>properties</code> element.
+ * <p>
+ *
+ * The data source will be registered under the name specified in the
+ * <code>name</code> element. It may be defined to be in any valid
+ * Jakarta EE namespace, which will determine the accessibility of
+ * the data source from other components.
+ * <p>
+ * A JDBC driver implementation class of the appropriate type, either
+ * <code>DataSource</code>, <code>ConnectionPoolDataSource</code>, or
+ * <code>XADataSource</code>, must be indicated by the <code>className</code>
+ * element. The availability of the driver class will be assumed at runtime.
+ *<p>
+ * DataSource properties should not be specified more than once. If
+ * the url annotation element contains a DataSource property that was also
+ * specified using the corresponding annotation element or was specified in
+ * the properties annotation element, the precedence order is undefined
+ * and implementation specific:
+ * <p>
+ * <pre>
+ * @DataSourceDefinition(name="java:global/MyApp/MyDataSource",
+ * className="org.apache.derby.jdbc.ClientDataSource",
+ * url="jdbc:derby://localhost:1527/myDB;user=bill",
+ * user="lance",
+ * password="secret",
+ * databaseName="testDB",
+ * serverName="luckydog"
+ * )// DO NOT DO THIS!!!
+ * </pre>
+ * <p>
+ * In the above example, the <code>databaseName</code>, <code>user</code>
+ * and <code>serverName</code> properties were specified as part of the
+ * <code>url</code> property and using the corresponding
+ * annotation elements. This should be avoided.
+ * <p>
+ * If the <code>properties</code> annotation element is used and contains a
+ * DataSource property that was also specified using the corresponding
+ * annotation element, the annotation element value takes precedence.
+ * For example:
+ * <p>
+ * <pre>
+ * @DataSourceDefinition(name="java:global/MyApp/MyDataSource",
+ * className="org.apache.derby.jdbc.ClientDataSource",
+ * user="lance",
+ * password="secret",
+ * databaseName="testDB",
+ * serverName="luckydog",
+ * properties= {"databaseName=myDB", "databaseProp=doThis"}
+ * )// DO NOT DO THIS!!!
+ * </pre>
+ * <p>
+ * This would result in the following values being used when configuring
+ * the DataSource:
+ * <ul>
+ * <li>serverName=luckydog</li>
+ * <li>portNumber=1527</li>
+ * <li>databaseName=testDB</li>
+ * <li>user=lance</li>
+ * <li>password=secret</li>
+ * <li>databaseProp=doThis</li>
+ * </ul>
+ * <p>
+ * Vendors are not required to support properties that do not normally
+ * apply to a specific data source type. For example, specifying the
+ * <code>transactional</code> property to be <code>true</code> but supplying
+ * a value for <code>className</code> that implements a data source class
+ * other than <code>XADataSource</code> may not be supported.
+ * <p>
+ * Vendor-specific properties may be combined with or used to
+ * override standard data source properties defined using this annotation.
+ * <p>
+ * <code>DataSource</code> properties that are specified and are not supported
+ * in a given configuration or cannot be mapped to a vendor specific
+ * configuration property may be ignored.
+ * <p>
+ * Examples:
+ * <br>
+ * <pre>
+ * @DataSourceDefinition(name="java:global/MyApp/MyDataSource",
+ * className="com.foobar.MyDataSource",
+ * portNumber=6689,
+ * serverName="myserver.com",
+ * user="lance",
+ * password="secret"
+ * )
+ *
+ * </pre>
+ * <p>
+ * Using a <code>URL</code>:
+ * <br>
+ * <pre>
+ * @DataSourceDefinition(name="java:global/MyApp/MyDataSource",
+ * className="org.apache.derby.jdbc.ClientDataSource",
+ * url="jdbc:derby://localhost:1527/myDB",
+ * user="lance",
+ * password="secret"
+ * )
+ * </pre>
+ * <p>
+ * An example lookup of the DataSource from an Jakarta Enterprise Beans:
+ * <pre>
+ * @Stateless
+ * public class MyStatelessEJB {
+ * @Resource(lookup="java:global/MyApp/myDataSource")
+ * DataSource myDB;
+ * ...
+ * }
+ * </pre>
+ * <p>
+ * @see javax.sql.DataSource
+ * @see javax.sql.XADataSource
+ * @see javax.sql.ConnectionPoolDataSource
+ * @since Common Annotations 1.1
+ */
+@Target({ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+@Repeatable(DataSourceDefinitions.class)
+public @interface DataSourceDefinition {
+
+ /**
+ * JNDI name by which the data source will be registered.
+ * @since 1.1
+ */
+ String name();
+
+ /**
+ * Name of a DataSource class that implements
+ * <code>javax.sql.DataSource</code> or <code>javax.sql.XADataSource</code>
+ * or <code>javax.sql.ConnectionPoolDataSource</code>.
+ * @since 1.1
+ */
+ String className();
+
+ /**
+ * Description of this data source
+ * @since 1.1
+ */
+ String description() default "";
+
+ /**
+ * A JDBC URL. If the <code>url</code> annotation element contains a
+ * DataSource property that was also specified using the corresponding
+ * annotation element, the precedence order is undefined and
+ * implementation specific.
+ * @since 1.1
+ */
+ String url() default "";
+
+ /**
+ * User name to use for connection authentication.
+ * @since 1.1
+ */
+ String user() default "";
+
+ /**
+ * Password to use for connection authentication.
+ * @since 1.1
+ */
+ String password() default "";
+
+ /**
+ * Name of a database on a server.
+ * @since 1.1
+ */
+ String databaseName() default "";
+
+ /**
+ * Port number where a server is listening for requests.
+ * @since 1.1
+ */
+ int portNumber() default -1;
+
+ /**
+ * Database server name.
+ * @since 1.1
+ */
+ String serverName() default "localhost";
+
+ /**
+ * Isolation level for connections. The Isolation level
+ * must be one of the following:
+ * <p>
+ * <ul>
+ * <li>Connection.TRANSACTION_NONE,
+ * <li>Connection.TRANSACTION_READ_ UNCOMMITTED,
+ * <li>Connection.TRANSACTION_READ_COMMITTED,
+ * <li>Connection.TRANSACTION_REPEATABLE_READ,
+ * <li>Connection.TRANSACTION_SERIALIZABLE
+ *</ul>
+ * <p>
+ * Default is vendor-specific.
+ * @since 1.1
+ */
+ int isolationLevel() default -1;
+
+ /**
+ * Set to <code>false</code> if connections should not participate
+ * in transactions.
+ * <p>
+ * Default is to enlist in a transaction when one is active or becomes
+ * active.
+ * @since 1.1
+ */
+ boolean transactional() default true;
+
+ /**
+ * Number of connections that should be created when a connection pool
+ * is initialized.
+ * <p>
+ * Default is vendor-specific
+ * @since 1.1
+ */
+ int initialPoolSize() default -1;
+
+ /**
+ * Maximum number of connections that should be concurrently allocated for a
+ * connection pool.
+ * <p>
+ * Default is vendor-specific.
+ * @since 1.1
+ */
+ int maxPoolSize() default -1;
+
+ /**
+ * Minimum number of connections that should be allocated for a
+ * connection pool.
+ * <p>
+ * Default is vendor-specific.
+ * @since 1.1
+ */
+ int minPoolSize() default -1;
+
+ /**
+ * The number of seconds that a physical connection
+ * should remain unused in the pool before the
+ * connection is closed for a connection pool.
+ * <p>
+ * Default is vendor-specific
+ * @since 1.1
+ */
+ int maxIdleTime() default -1;
+
+ /**
+ * The total number of statements that a connection pool should keep open.
+ * A value of 0 indicates that the caching of statements is disabled for
+ * a connection pool.
+ * <p>
+ * Default is vendor-specific
+ * @since 1.1
+ */
+ int maxStatements() default -1;
+ /**
+ * Used to specify vendor-specific properties and less commonly
+ * used <code>DataSource</code> properties such as:
+ * <p>
+ * <ul>
+ * <li>dataSourceName
+ * <li>networkProtocol
+ * <li>propertyCycle
+ * <li>roleName
+ * </ul>
+ * <p>
+ * Properties are specified using the format:
+ * <i>propertyName=propertyValue</i> with one property per array element.
+ * <p>
+ * If a DataSource property is specified in the <code>properties</code>
+ * element and the annotation element for the property is also
+ * specified, the annotation element value takes precedence.
+ * @since 1.1
+ */
+ String[] properties() default {};
+
+
+ /**
+ * Sets the maximum time in seconds that this data source will wait while
+ * attempting to connect to a database. A value of zero specifies that
+ * the timeout is the default system timeout if there is one; otherwise,
+ * it specifies that there is no timeout.
+ * <p>
+ * Default is vendor-specific.
+ * @since 1.1
+ */
+ int loginTimeout() default 0;
+}
diff --git a/api/src/main/java/jakarta/annotation/sql/DataSourceDefinitions.java b/api/src/main/java/jakarta/annotation/sql/DataSourceDefinitions.java
new file mode 100644
index 0000000..cd9bfa9
--- /dev/null
+++ b/api/src/main/java/jakarta/annotation/sql/DataSourceDefinitions.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2009, 2020 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
+ */
+
+package jakarta.annotation.sql;
+
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Declares one or more <code>DataSourceDefinition</code> annotations.
+ *
+ * @see jakarta.annotation.sql.DataSourceDefinition
+ * @since Common Annotations 1.1
+ */
+@Target({ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface DataSourceDefinitions {
+ DataSourceDefinition[] value ();
+
+}
diff --git a/api/src/main/java/module-info.java b/api/src/main/java/module-info.java
new file mode 100644
index 0000000..ce87894
--- /dev/null
+++ b/api/src/main/java/module-info.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2020 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
+ */
+
+
+module jakarta.annotation {
+
+ exports jakarta.annotation;
+ exports jakarta.annotation.security;
+ exports jakarta.annotation.sql;
+
+}
diff --git a/api/src/main/javadoc/doc-files/EFSL.html b/api/src/main/javadoc/doc-files/EFSL.html
new file mode 100644
index 0000000..4a2cd9b
--- /dev/null
+++ b/api/src/main/javadoc/doc-files/EFSL.html
@@ -0,0 +1,90 @@
+<html>
+<head>
+<!--
+
+ Copyright (c) 2020 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
+
+-->
+
+<title>Eclipse Foundation Specification License - v1.0</title>
+</head>
+<body>
+<h1>Eclipse Foundation Specification License - v1.0</h1>
+<p>By using and/or copying this document, or the Eclipse Foundation
+ document from which this statement is linked, you (the licensee) agree
+ that you have read, understood, and will comply with the following
+ terms and conditions:</p>
+
+<p>Permission to copy, and distribute the contents of this document, or
+ the Eclipse Foundation document from which this statement is linked, in
+ any medium for any purpose and without fee or royalty is hereby
+ granted, provided that you include the following on ALL copies of the
+ document, or portions thereof, that you use:</p>
+
+<ul>
+ <li> link or URL to the original Eclipse Foundation document.</li>
+ <li>All existing copyright notices, or if one does not exist, a notice
+ (hypertext is preferred, but a textual representation is permitted)
+ of the form: "Copyright © [$date-of-document]
+ “Eclipse Foundation, Inc. <<url to this license>>
+ "
+ </li>
+</ul>
+
+<p>Inclusion of the full text of this NOTICE must be provided. We
+ request that authorship attribution be provided in any software,
+ documents, or other items or products that you create pursuant to the
+ implementation of the contents of this document, or any portion
+ thereof.</p>
+
+<p>No right to create modifications or derivatives of Eclipse Foundation
+ documents is granted pursuant to this license, except anyone may
+ prepare and distribute derivative works and portions of this document
+ in software that implements the specification, in supporting materials
+ accompanying such software, and in documentation of such software,
+ PROVIDED that all such works include the notice below. HOWEVER, the
+ publication of derivative works of this document for use as a technical
+ specification is expressly prohibited.</p>
+
+<p>The notice is:</p>
+
+<p>"Copyright © 2018 Eclipse Foundation. This software or
+ document includes material copied from or derived from [title and URI
+ of the Eclipse Foundation specification document]."</p>
+
+<h2>Disclaimers</h2>
+
+<p>THIS DOCUMENT IS PROVIDED "AS IS," AND THE COPYRIGHT
+ HOLDERS AND THE ECLIPSE FOUNDATION MAKE NO REPRESENTATIONS OR
+ WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+ WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
+ NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THE DOCUMENT ARE
+ SUITABLE FOR ANY PURPOSE; NOR THAT THE IMPLEMENTATION OF SUCH CONTENTS
+ WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR
+ OTHER RIGHTS.</p>
+
+<p>THE COPYRIGHT HOLDERS AND THE ECLIPSE FOUNDATION WILL NOT BE LIABLE
+ FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT
+ OF ANY USE OF THE DOCUMENT OR THE PERFORMANCE OR IMPLEMENTATION OF THE
+ CONTENTS THEREOF.</p>
+
+<p>The name and trademarks of the copyright holders or the Eclipse
+ Foundation may NOT be used in advertising or publicity pertaining to
+ this document or its contents without specific, written prior
+ permission. Title to copyright in this document will at all times
+ remain with copyright holders.</p>
+
+</body>
+</html>
diff --git a/spec/README.md b/spec/README.md
new file mode 100644
index 0000000..b42636f
--- /dev/null
+++ b/spec/README.md
@@ -0,0 +1,26 @@
+Jakarta Annotations Specification
+============================
+
+This project generates the Jakarta Annotations Specification.
+
+Building
+--------
+
+Prerequisites:
+
+* JDK8+
+* Maven 3.0.3+
+
+Run the full build:
+
+`mvn install`
+
+Generate specification with given status (ex. "Final Release"):
+
+`mvn clean install -Dstatus="Final Release"`
+
+Locate the html files:
+- `target/generated-docs/annotations-spec-<version>.html`
+
+Locate the PDF files:
+- `target/generated-docs/annotations-spec-<version>.pdf`
diff --git a/spec/assembly.xml b/spec/assembly.xml
new file mode 100644
index 0000000..3ab0450
--- /dev/null
+++ b/spec/assembly.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!--
+
+ Copyright (c) 2019 Contributors to the Eclipse Foundation.
+
+ 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
+
+-->
+
+<assembly>
+ <id>spec</id>
+ <formats>
+ <format>zip</format>
+ </formats>
+ <baseDirectory>annotations-spec</baseDirectory>
+ <fileSets>
+ <fileSet>
+ <directory>target/generated-docs</directory>
+ <outputDirectory></outputDirectory>
+ </fileSet>
+ </fileSets>
+</assembly>
diff --git a/spec/pom.xml b/spec/pom.xml
new file mode 100644
index 0000000..15ef070
--- /dev/null
+++ b/spec/pom.xml
@@ -0,0 +1,190 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Copyright (c) 2019, 2020 Contributors to the Eclipse Foundation.
+
+ 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
+
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <parent>
+ <groupId>org.eclipse.ee4j</groupId>
+ <artifactId>project</artifactId>
+ <version>1.0.6</version>
+ <relativePath/>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>annotations-spec</artifactId>
+ <version>2.0-SNAPSHOT</version>
+ <packaging>pom</packaging>
+
+ <name>Jakarta Annotations Specification</name>
+ <description>Jakarta Annotations Specification</description>
+
+ <url>https://projects.eclipse.org/projects/ee4j.ca</url>
+
+ <properties>
+ <site.output.dir>${project.build.directory}/staging</site.output.dir>
+ <maven.site.skip>true</maven.site.skip>
+ <asciidoctor.maven.plugin.version>2.0.0</asciidoctor.maven.plugin.version>
+ <asciidoctorj.pdf.version>1.5.3</asciidoctorj.pdf.version>
+ <!-- status: DRAFT, BETA, etc., or blank for final -->
+ <status>DRAFT</status>
+ <maven.build.timestamp.format>MMMM dd, yyyy</maven.build.timestamp.format>
+ <revisiondate>${maven.build.timestamp}</revisiondate>
+ </properties>
+
+ <build>
+ <defaultGoal>package</defaultGoal>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-enforcer-plugin</artifactId>
+ <version>3.0.0-M3</version>
+ <executions>
+ <execution>
+ <id>enforce-versions</id>
+ <goals>
+ <goal>enforce</goal>
+ </goals>
+ <configuration>
+ <rules>
+ <requireJavaVersion>
+ <version>[1.8.0,)</version>
+ <message>You need JDK8 or higher</message>
+ </requireJavaVersion>
+ </rules>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.asciidoctor</groupId>
+ <artifactId>asciidoctor-maven-plugin</artifactId>
+ <version>${asciidoctor.maven.plugin.version}</version>
+ <dependencies>
+ <dependency>
+ <groupId>org.asciidoctor</groupId>
+ <artifactId>asciidoctorj-pdf</artifactId>
+ <version>${asciidoctorj.pdf.version}</version>
+ </dependency>
+ </dependencies>
+ <executions>
+ <execution>
+ <id>asciidoc-to-html</id>
+ <phase>generate-resources</phase>
+ <goals>
+ <goal>process-asciidoc</goal>
+ </goals>
+ <configuration>
+ <backend>html5</backend>
+ <outputFile>${project.build.directory}/generated-docs/annotations-spec-${project.version}.html</outputFile>
+ <attributes>
+ <doctype>book</doctype>
+ <status>${status}</status>
+ <data-uri />
+ <icons>font</icons>
+ <toc>left</toc>
+ <icons>font</icons>
+ <sectanchors>true</sectanchors>
+ <idprefix />
+ <idseparator>-</idseparator>
+ <docinfo1>true</docinfo1>
+ </attributes>
+ </configuration>
+ </execution>
+ <execution>
+ <id>asciidoc-to-pdf</id>
+ <phase>generate-resources</phase>
+ <goals>
+ <goal>process-asciidoc</goal>
+ </goals>
+ <configuration>
+ <backend>pdf</backend>
+ <outputFile>${project.build.directory}/generated-docs/annotations-spec-${project.version}.pdf</outputFile>
+ <attributes>
+ <pdf-stylesdir>${project.basedir}/src/main/theme</pdf-stylesdir>
+ <pdf-style>jakartaee</pdf-style>
+ <doctype>book</doctype>
+ <status>${status}</status>
+ <data-uri />
+ <icons>font</icons>
+ <pagenums />
+ <toc />
+ <icons>font</icons>
+ <sectanchors>true</sectanchors>
+ <idprefix />
+ <idseparator>-</idseparator>
+ <docinfo1>true</docinfo1>
+ <embedAssets>true</embedAssets>
+ </attributes>
+ </configuration>
+ </execution>
+ </executions>
+ <configuration>
+ <sourceDocumentName>annotations-spec.adoc</sourceDocumentName>
+ <sourceHighlighter>coderay</sourceHighlighter>
+ <attributes>
+ <revnumber>${project.version}</revnumber>
+ <revremark>${status}</revremark>
+ <revdate>${revisiondate}</revdate>
+ </attributes>
+ </configuration>
+
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-release-plugin</artifactId>
+ <version>2.5.2</version>
+ <configuration>
+ <mavenExecutorId>forked-path</mavenExecutorId>
+ <useReleaseProfile>false</useReleaseProfile>
+ <arguments>${release.arguments}</arguments>
+ </configuration>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.scm</groupId>
+ <artifactId>maven-scm-provider-gitexe</artifactId>
+ <version>1.9.4</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+
+ <!--
+ This is the rule that builds the zip file for download.
+ -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <version>3.3.0</version>
+ <inherited>false</inherited>
+ <executions>
+ <execution>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ <configuration>
+ <appendAssemblyId>false</appendAssemblyId>
+ <descriptors>
+ <descriptor>assembly.xml</descriptor>
+ </descriptors>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/spec/src/main/asciidoc/annotations-spec.adoc b/spec/src/main/asciidoc/annotations-spec.adoc
new file mode 100644
index 0000000..5a46c65
--- /dev/null
+++ b/spec/src/main/asciidoc/annotations-spec.adoc
@@ -0,0 +1,32 @@
+//
+// Copyright (c) 2017, 2020 Contributors to the Eclipse Foundation
+//
+
+= Jakarta Annotations
+:authors: Jakarta Annotations Team, https://projects.eclipse.org/projects/ee4j.ca
+:email: https://dev.eclipse.org/mailman/listinfo/ca-dev
+:version-label!:
+:doctype: book
+:license: Eclipse Foundation Specification License v1.0
+:source-highlighter: coderay
+:toc: left
+:toclevels: 4
+:sectnumlevels: 4
+:sectanchors:
+ifdef::backend-pdf[]
+:pagenums:
+:numbered:
+:title-logo-image: image:images/jakarta_ee_logo_schooner_color_stacked_default.png[pdfwidth=4.25in,align=right]
+endif::[]
+
+// == License
+:sectnums!:
+include::license-efsl.adoc[]
+
+// == Scope
+:sectnums:
+include::scope.adoc[]
+
+// == Spec
+:sectnums:
+include::spec.adoc[]
diff --git a/spec/src/main/asciidoc/images/annotations-10.png b/spec/src/main/asciidoc/images/annotations-10.png
new file mode 100644
index 0000000..191893b
--- /dev/null
+++ b/spec/src/main/asciidoc/images/annotations-10.png
Binary files differ
diff --git a/spec/src/main/asciidoc/images/annotations-3.png b/spec/src/main/asciidoc/images/annotations-3.png
new file mode 100644
index 0000000..ae10fab
--- /dev/null
+++ b/spec/src/main/asciidoc/images/annotations-3.png
Binary files differ
diff --git a/spec/src/main/asciidoc/images/annotations-4.png b/spec/src/main/asciidoc/images/annotations-4.png
new file mode 100644
index 0000000..191893b
--- /dev/null
+++ b/spec/src/main/asciidoc/images/annotations-4.png
Binary files differ
diff --git a/spec/src/main/asciidoc/images/annotations-5.png b/spec/src/main/asciidoc/images/annotations-5.png
new file mode 100644
index 0000000..ef59b76
--- /dev/null
+++ b/spec/src/main/asciidoc/images/annotations-5.png
Binary files differ
diff --git a/spec/src/main/asciidoc/images/annotations-6.png b/spec/src/main/asciidoc/images/annotations-6.png
new file mode 100644
index 0000000..ae10fab
--- /dev/null
+++ b/spec/src/main/asciidoc/images/annotations-6.png
Binary files differ
diff --git a/spec/src/main/asciidoc/images/annotations-7.png b/spec/src/main/asciidoc/images/annotations-7.png
new file mode 100644
index 0000000..191893b
--- /dev/null
+++ b/spec/src/main/asciidoc/images/annotations-7.png
Binary files differ
diff --git a/spec/src/main/asciidoc/images/annotations-8.png b/spec/src/main/asciidoc/images/annotations-8.png
new file mode 100644
index 0000000..ef59b76
--- /dev/null
+++ b/spec/src/main/asciidoc/images/annotations-8.png
Binary files differ
diff --git a/spec/src/main/asciidoc/images/annotations-9.png b/spec/src/main/asciidoc/images/annotations-9.png
new file mode 100644
index 0000000..ae10fab
--- /dev/null
+++ b/spec/src/main/asciidoc/images/annotations-9.png
Binary files differ
diff --git a/spec/src/main/asciidoc/images/jakarta_ee_logo_schooner_color_stacked_default.png b/spec/src/main/asciidoc/images/jakarta_ee_logo_schooner_color_stacked_default.png
new file mode 100644
index 0000000..97b46ce
--- /dev/null
+++ b/spec/src/main/asciidoc/images/jakarta_ee_logo_schooner_color_stacked_default.png
Binary files differ
diff --git a/spec/src/main/asciidoc/license-efsl.adoc b/spec/src/main/asciidoc/license-efsl.adoc
new file mode 100644
index 0000000..2aa72e0
--- /dev/null
+++ b/spec/src/main/asciidoc/license-efsl.adoc
@@ -0,0 +1,78 @@
+[subs="normal"]
+....
+Specification: {doctitle}
+
+Version: {revnumber}
+
+ifeval::["{revremark}" != ""]
+Status: {revremark}
+endif::[]
+ifeval::["{revremark}" == ""]
+Status: Final Release
+endif::[]
+
+Release: {revdate}
+....
+Copyright (c) 2020 Eclipse Foundation.
+
+=== Eclipse Foundation Specification License
+
+By using and/or copying this document, or the Eclipse Foundation
+document from which this statement is linked, you (the licensee) agree
+that you have read, understood, and will comply with the following
+terms and conditions:
+
+Permission to copy, and distribute the contents of this document, or
+the Eclipse Foundation document from which this statement is linked, in
+any medium for any purpose and without fee or royalty is hereby
+granted, provided that you include the following on ALL copies of the
+document, or portions thereof, that you use:
+
+* link or URL to the original Eclipse Foundation document.
+* All existing copyright notices, or if one does not exist, a notice
+ (hypertext is preferred, but a textual representation is permitted)
+ of the form: "Copyright (c) [$date-of-document]
+ Eclipse Foundation, Inc. <<url to this license>>"
+
+Inclusion of the full text of this NOTICE must be provided. We
+request that authorship attribution be provided in any software,
+documents, or other items or products that you create pursuant to the
+implementation of the contents of this document, or any portion
+thereof.
+
+No right to create modifications or derivatives of Eclipse Foundation
+documents is granted pursuant to this license, except anyone may
+prepare and distribute derivative works and portions of this document
+in software that implements the specification, in supporting materials
+accompanying such software, and in documentation of such software,
+PROVIDED that all such works include the notice below. HOWEVER, the
+publication of derivative works of this document for use as a technical
+specification is expressly prohibited.
+
+The notice is:
+
+"Copyright (c) 2018 Eclipse Foundation. This software or
+document includes material copied from or derived from [title and URI
+of the Eclipse Foundation specification document]."
+
+==== Disclaimers
+
+THIS DOCUMENT IS PROVIDED "AS IS," AND THE COPYRIGHT
+HOLDERS AND THE ECLIPSE FOUNDATION MAKE NO REPRESENTATIONS OR
+WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
+NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THE DOCUMENT ARE
+SUITABLE FOR ANY PURPOSE; NOR THAT THE IMPLEMENTATION OF SUCH CONTENTS
+WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR
+OTHER RIGHTS.
+
+THE COPYRIGHT HOLDERS AND THE ECLIPSE FOUNDATION WILL NOT BE LIABLE
+FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT
+OF ANY USE OF THE DOCUMENT OR THE PERFORMANCE OR IMPLEMENTATION OF THE
+CONTENTS THEREOF.
+
+The name and trademarks of the copyright holders or the Eclipse
+Foundation may NOT be used in advertising or publicity pertaining to
+this document or its contents without specific, written prior
+permission. Title to copyright in this document will at all times
+remain with copyright holders.
diff --git a/spec/src/main/asciidoc/scope.adoc b/spec/src/main/asciidoc/scope.adoc
new file mode 100644
index 0000000..6675b31
--- /dev/null
+++ b/spec/src/main/asciidoc/scope.adoc
@@ -0,0 +1,3 @@
+== Specification Scope
+
+Jakarta Annotations defines a collection of annotations representing common semantic concepts that enable a declarative style of programming that applies across a variety of Java technologies.
diff --git a/spec/src/main/asciidoc/spec.adoc b/spec/src/main/asciidoc/spec.adoc
new file mode 100644
index 0000000..07a5f8f
--- /dev/null
+++ b/spec/src/main/asciidoc/spec.adoc
@@ -0,0 +1,1196 @@
+== Introduction
+
+With the addition of JSR 175 (A Metadata
+Facility for the JavaTM Programming Language) in the Java platform we
+envision that various technologies will use annotations to enable a
+declarative style of programming. It would be unfortunate if these
+technologies each independently defined their own annotations for common
+concepts. It would be valuable to have consistency within the Jakarta EE
+and Java SE component technologies, but it will also be valuable to
+allow consistency between Jakarta EE and Java SE.
+
+It is the intention of this specification to
+define a small set of common annotations that will be available for use
+within other specifications. It is hoped that this will help to avoid
+unnecessary redundancy or duplication between annotations defined in
+different Jakarta EE specifications. This would allow us to have
+the common annotations all in one place and let the technologies refer
+to this specification rather than have them specified in multiple
+specifications. This way all technologies can use the same version of
+the annotations and there will be consistency in the annotations used
+across the platforms.
+
+=== Goals
+
+Define annotations for use in Jakarta EE: This
+spec will define annotations for use within component technologies in
+Jakarta EE as well as the platform as a whole.
+
+=== Non-Goals
+
+Support for Java versions prior to J2SE 5.0
+
+Annotations were introduced in J2SE 5.0. It
+is not possible to do annotation processing in versions prior to J2SE
+5.0. It is not a goal of this specification to define a way of doing
+annotation processing of any kind for versions prior to J2SE 5.0.
+
+=== Compatibility
+
+The annotations defined in this specification
+may be included individually as needed in products that make use of
+them. Other Java specifications will require support for subsets of
+these annotations. Products that support these Java specifications must
+include the required annotations.
+
+=== Conventions
+
+The keywords ‘MUST’, ‘MUST NOT’, ‘REQUIRED’,
+‘SHALL’, ‘SHALL NOT’, ‘SHOULD’, ‘SHOULD NOT’, ‘RECOMMENDED’, ‘MAY’ AND
+‘OPTIONAL’ in this document are to be interpreted as described in RFC
+2119.
+
+Java code is formatted as shown below:
+
+[source,java]
+----
+package com.wombat.hello;
+
+public class Hello {
+ public static void main(String[] args) {
+ System.out.println("Hello world");
+ }
+}
+----
+
+=== Expert Group Members
+
+The following expert group members
+participated in JSR 250:
+
+- Cedric Beust (individual)
+- Bill Burke (JBoss)
+- Wayne Carr (Intel)
+- Robert Clevenger (Oracle)
+- Evan Ireland (Sybase)
+- Woo Jin Kim (Tmax Soft)
+- Gavin King (JBoss)
+- Rajiv Mordani (Oracle Corporation, Specification lead)
+- Ted Neward (individual)
+- Anurag Parashar (Pramati technologies)
+- Michael Santos (individual)
+- Hani Suleiman (Ironflare AB)
+- Seth White (BEA)
+
+=== Acknowledgements
+
+In addition to the expert group listed above,
+Linda DeMichiel, Ron Monzillo, Lance Andersen and Bill Shannon all of
+whom work at Oracle Corporation have provided input to this
+specification.
+
+== Annotations
+
+This chapter describes the standard
+annotations, some guidelines for annotation inheritance and the usage of
+these annotations where possible.
+
+=== General Guidelines for Inheritance of Annotations
+
+The interplay of annotations and inheritance
+in the Java language is potentially a source of complexity for
+developers. Developers will rely on some implicit assumptions when
+figuring out how annotations compose with other language features. At
+the same time, annotation semantics are defined by individual
+specifications, hence the potential for inconsistencies to arise. For
+instance, consider the following example:
+
+[source,java]
+----
+public class Base {
+ @TransactionAttribute(REQUIRES_NEW)
+ public void foo {...}
+}
+
+@Stateless
+public class Derived extends Base {
+ @TransactionAttribute(NEVER)
+ public void foo {...}
+}
+----
+
+In keeping with the concept of method
+overriding, most developers will assume that in the _Derived_ class, the
+effective _TransactionAttribute_ annotation for method _foo_ is
+_TransactionAttribute(NEVER)_ . On the other hand, it might have been
+possible for the specification governing the semantics of the
+_TransactionAttribute_ annotations type to require that the effective
+_TransactionAttribute_ to be the most restrictive one in the whole
+inheritance tree, that is, in the example above
+_TransactionAttribute(REQUIRES_NEW)_ . A motivation for these semantics
+might have been that the _foo_ method in the _Derived_ class may call
+_super.foo()_ , resulting in the execution of some code that needs a
+transaction to be in place. Such a choice on the part of the
+specification for _TransactionAttribute_ would have contradicted a
+developer’s intuition on how method overriding works.
+
+In order to keep the resulting complexity in
+control, below are some guidelines recommended for how annotations
+defined in the different specifications should interact with
+inheritance:
+
+. Class-level annotations only affect the
+class they annotate and its members, that is, its methods and fields.
+They never affect a member declared by a superclass, even if it is not
+hidden or overridden by the class in question.
+
+. In addition to affecting the annotated class,
+class-level annotations may act as a shorthand for member-level
+annotations. If a member carries a specific member-level annotation, any
+annotations of the same type implied by a class-level annotation are
+ignored. In other words, explicit member-level annotations have priority
+over member-level annotations implied by a class-level annotation. For
+example, a _TransactionAttribute(REQUIRED)_ annotation on a class
+implies that all the public methods in the class that it is applied on
+are annotated with _TransactionAttribute(REQUIRED)_ . However if there
+is a _TransactionAttribute(NEVER)_ annotation on a particular method,
+then the _TransactionAttribute(NEVER)_ applies for that particular
+method and not _TransactionAttribute(REQUIRED)_ .
+
+. The interfaces implemented by a class never
+contribute annotations to the class itself or any of its members.
+
+. Members inherited from a superclass and which
+are not hidden or overridden maintain the annotations they had in the
+class that declared them, including member-level annotations implied by
+class-level ones.
+
+. Member-level annotations on a hidden or overridden member are always ignored.
+
+This set of guidelines guarantees that the
+effects of an annotation are local to the class on, or inside, which it
+appears. In order to find the effective annotation for a class member, a
+developer has to track down its last non-hidden and non-overridden
+declaration and examine it. If the sought-for annotation is not found
+there, then (s)he will have to examine the enclosing class declaration.
+If even this step fails to provide an annotation, no other source file
+will be consulted.
+
+Below are some examples that explain how the
+guidelines defined above will be applied to the _TransactionAttribute_
+annotation.
+
+[source,java]
+----
+@TransactionAttribute(REQUIRED)
+class Base {
+ @TransactionAttribute(NEVER)
+ public void foo() {...}
+
+ public void bar() {...}
+}
+
+@Stateless
+class ABean extends Base {
+ public void foo() {...}
+}
+
+@Stateless
+public class BBean extends Base {
+ @TransactionAttribute(REQUIRES_NEW)
+ public void foo() {...}
+}
+
+@Stateless
+@TransactionAttribute(REQUIRES_NEW)
+public class CBean extends Base {
+ public void foo() {...}
+ public void bar() {...}
+}
+
+@Stateless
+@TransactionAttribute(REQUIRES_NEW)
+public class DBean extends Base {
+ public void bar() {...}
+}
+
+@Stateless
+@TransactionAttribute(REQUIRES_NEW)
+public class EBean extends Base {
+ // ...
+}
+----
+
+The table below shows the effective
+_TransactionAttribute_ annotation in each of the cases above by applying
+the guidelines specified for annotations and inheritance:
+
+|===
+|Methods in derived classes |Effective TransactionAttribute value
+|foo() in ABean
+|TransactionAttribute(REQUIRED). (Default TransactionAttribute as defined by the Jakarta Enterprise Beans specification).
+|bar() in ABean
+|TransactionAttribute(REQUIRED)
+|foo() in BBean
+|TransactionAttribute(REQUIRES_NEW)
+|bar() in BBean
+|TransactionAttribute(REQUIRED)
+|foo() in CBean
+|TransactionAttribute(REQUIRES_NEW)
+|bar() in CBean
+|TransactionAttribute(REQUIRES_NEW)
+|foo() in DBean
+|TransactionAttribute(NEVER) (from Base class)
+|bar() in DBean
+|TransactionAttribute(REQUIRES_NEW)
+|foo() in EBean
+|TransactionAttribute(NEVER) (from Base class)
+|bar() in EBean
+|TransactionAttribute(REQUIRED) (from Base class)
+|===
+
+For more details about the _TransactionAttribute_ annotation, see the _Jakarta Enterprise Beans Core Contracts_
+specification.
+
+All annotations defined in this specification
+follow the guidelines defined above unless explicitly stated otherwise.
+
+=== jakarta.annotation.Generated
+
+The _Generated_ annotation is used to mark
+source code that has been generated. It can be specified on a class,
+method, or field. It can also be used to differentiate user-written code
+from generated code in a single file.
+
+The _value_ element MUST have the name of the
+code generator. The recommended convention is to use the fully qualified
+name of the code generator. For example: _com.company.package.classname_
+.
+
+The _date_ element is used to indicate the
+date the source was generated. The _date_ element MUST follow the ISO
+8601 standard. For example the _date_ element could have the following
+value:
+
+ 2001-07-04T12:08:56.235-0700
+
+which represents 2001-07-04 12:08:56 local
+time in the U.S. Pacific time zone.
+
+The _comments_ element is a place holder for
+any comments that the code generator may want to include in the
+generated code.
+
+[source,java]
+----
+package jakarta.annotation;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+@Target({ANNOTATION_TYPE, CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
+@Retention(SOURCE)
+public @interface Generated {
+ String[] value();
+ String date() default "";
+ String comments() default "";
+}
+----
+
+|===
+|Element |Description |Default
+|value |Name of the code generator |
+|date |Date source was generated. MUST follow ISO 8601 standard |""
+|comments |placeholder for comments that the generator may want to include in the generated code |""
+|===
+
+The following example shows the usage of the annotation defined above:
+
+[source,java]
+----
+@Generated("com.sun.xml.rpc.AProcessor")
+public interface StockQuoteService extends java.rmi.Remote {
+ this.context = context;
+}
+----
+
+=== jakarta.annotation.Resource
+
+The _Resource_ annotation is used to declare
+a reference to a resource. It can be specified on a class, method, or
+field. When the annotation is applied on a field or method, the
+container will inject an instance of the requested resource into the
+application when the application is initialized. If the annotation is
+applied to a class, the annotation declares a resource that the
+application will look up at runtime. Even though this annotation is not
+marked _Inherited_ , all superclasses MUST be examined to discover all
+uses of this annotation. All such annotation instances specify resources
+that are needed by the application. Note that this annotation may appear
+on private fields and methods of superclasses. Injection of the declared
+resources needs to happen in these cases as well, even if a method with
+such an annotation is overridden by a subclass.
+
+The _name_ element is the JNDI name of the
+resource. When the _Resource_ annotation is applied on a field, the
+default value of the _name_ element is the field name qualified by the
+class name. When applied on a method, the default is the JavaBeans
+property name corresponding to the method qualified by the class name.
+When applied on a class, there is no default and the name MUST be
+specified.
+
+The _type_ element defines the Java type of
+the resource. When the _Resource_ annotation is applied on a field, the
+default value of the _type_ element is the type of the field. When
+applied on a method, the default is the type of the JavaBeans property.
+When applied on a class, there is no default and the type MUST be
+specified. When used, the type MUST be assignment compatible.
+
+The _authenticationType_ element is used to
+indicate the authentication type to use for the resource. It can take
+one of two values defined as an _Enum_ : _CONTAINER_ or _APPLICATION_ .
+This element may be specified for resources representing a connection
+factory of any supported type and MUST NOT be specified for resources of
+other types.
+
+The _shareable_ element is used to indicate
+whether a resource can be shared between this component and other
+components. This element may be specified for resources representing a
+connection factory of any supported type or ORB object instances and
+MUST NOT be specified for resources of other types.
+
+The _mappedName_ element is a
+product-specific name that this resource should be mapped to. The
+_mappedName_ element provides for mapping the resource reference
+specified by the _Resource_ annotation to the name of a resource known
+to the application server. The mapped name could be of any form.
+Application servers are not required to support any particular form or
+type of mapped name, nor the ability to use mapped names. The mapped
+name is product dependent and often installation dependent. No use of
+mapped name is portable.
+
+The _description_ element is the description
+of the resource. The description is expected to be in the default
+language of the system on which the application is deployed. The
+description can be presented to help in choosing the correct resource.
+
+The _lookup_ element specifies the JNDI name
+of a resource that the resource being defined will be bound to. The type
+of the referenced resource must be compatible with that of the resource
+being defined.
+
+[source,java]
+----
+package jakarta.annotation;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+@Target({TYPE, METHOD, FIELD})
+@Retention(RUNTIME)
+@Repeatable(Resources.class)
+public @interface Resource {
+ public enum AuthenticationType {
+ CONTAINER,
+ APPLICATION
+ }
+
+ String name() default "";
+
+ Class<?> type() default Object.class;
+
+ AuthenticationType authenticationType() default AuthenticationType.CONTAINER;
+
+ boolean shareable() default true;
+
+ String mappedName() default "";
+
+ String description() default "";
+
+ String lookup() default "";
+}
+----
+
+
+|===
+|Element |Description |Default
+|name |The JNDI name of the resource |""
+|type |The Java type of the resource |Object.class
+|authenticationType |The authentication type to use for the resource |CONTAINER
+|shareable |Indicates whether the resource can be shared. |true
+|mappedName |A product-specific name that the resource should map to. |""
+|description |Description of the resource. |""
+|lookup |the JNDI name of a resource that the resource being defined will be bound to |""
+|===
+
+==== Field based injection
+
+To access a resource a developer declares a
+field and annotates it as being a resource reference. If the name and
+type elements are missing from the annotation they will be inferred by
+looking at the field declaration itself. It is an error if the type
+specified by the _Resource_ annotation and the type of the field are
+incompatible.
+
+For example:
+
+[source,java]
+----
+@Resource
+private DataSource myDB;
+----
+
+In the example above the effective name is
+_com.example.class/myDB_ and the effective type is
+_javax.sql.DataSource.class_ .
+
+[source,java]
+----
+@Resource(name="customerDB")
+private DataSource myDB;
+----
+
+In the example above the name is _customerDB_
+and the effective type is _javax.sql.DataSource.class_ .
+
+==== Setter based injection
+
+To access a resource a developer declares a
+setter method and annotates it as being a resource reference. The name
+and type of resource may be inferred by inspecting the method
+declaration if necessary. The name of the resource, if not declared, is
+the name of the JavaBeans property as determined from the name of the
+setter method. The setter method MUST follow the standard JavaBeans
+convention—the name starts with “ _set_ ”; the return type is _void_ ;
+and there is only one parameter. Additionally, the type of the parameter
+MUST be compatible with the _type_ element of the _Resource_ annotation,
+if specified.
+
+For example:
+
+[source,java]
+----
+@Resource
+private void setMyDB(DataSource ds) {
+ myDB = ds;
+}
+
+private DataSource myDB;
+----
+
+In the example above the effective name is
+_com.example.class/myDB_ and the type is _javax.sql.DataSource.class_ .
+
+[source,java]
+----
+@Resource(name="customerDB")
+private void setMyDB(DataSource ds) {
+ myDB = ds;
+}
+
+private DataSource myDB;
+----
+
+In the example above the name is _customerDB_
+and the type is _javax.sql.DataSource.class_ .
+
+The table below shows the mapping from Java
+type to the equivalent resource type in the Jakarta EE 9 (and later)
+deployment descriptors:
+
+[options="header"]
+|===
+|Java Type |Equivalent Resource type
+|java.lang.String |env-entry
+|java.lang.Character |env-entry
+|java.lang.Integer |env-entry
+|java.lang.Boolean |env-entry
+|java.lang.Double |env-entry
+|java.lang.Byte |env-entry
+|java.lang.Short |env-entry
+|java.lang.Long |env-entry
+|java.lang.Float |env-entry
+|jakarta.xml.ws.Service |service-ref
+|jakarta.jws.WebService |service-ref
+|javax.sql.DataSource |resource-ref
+|jakarta.jms.ConnectionFactory |resource-ref
+|jakarta.jms.QueueConnectionFactory |resource-ref
+|jakarta.jms.TopicConnectionFactory |resource-ref
+|jakarta.mail.Session |resource-ref
+|java.net.URL |resource-ref
+|jakarta.resource.cci.ConnectionFactory |resource-ref
+|any other connection factory defined by a resource adapter |resource-ref
+|jakarta.jms.Queue |message-destination-ref
+|jakarta.jms.Topic |message-destination-ref
+|jakarta.resource.cci.InteractionSpec |resource-env-ref
+|jakarta.transaction.UserTransaction |resource-env-ref
+|Everything else |resource-env-ref
+|===
+
+=== jakarta.annotation.Resources
+
+The _Resource_ annotation is used to declare
+a reference to a resource. The _Resources_ annotation acts as a
+container for multiple resource declarations.
+
+[source,java]
+----
+package jakarta.annotation;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+@Target({TYPE})
+@Retention(RUNTIME)
+public @interface Resources {
+ Resource[] value;
+}
+----
+
+|===
+|Element |Description |Default
+|value |Container for defining multiple resources. |
+|===
+
+The following example shows the usage of the annotation defined above:
+
+[source,java]
+----
+@Resources ({
+ @Resource(name="myDB", type=javax.sql.DataSource),
+ @Resource(name="myMQ", type=jakarta.jms.ConnectionFactory)
+})
+
+public class CalculatorBean {
+ // ...
+}
+----
+
+=== jakarta.annotation.PostConstruct
+
+The _PostConstruct_ annotation is used on a
+method that needs to be executed after dependency injection is done to
+perform any initialization. This method MUST be invoked before the class
+is put into service. This annotation MUST be supported on all classes
+that support dependency injection. The method annotated with
+_PostConstruct_ MUST be invoked even if the class does not request any
+resources to be injected. Only one method in a given class can be
+annotated with this annotation. The method on which the _PostConstruct_
+annotation is applied MUST fulfill all of the following requirements,
+except in cases where these requirements have been relaxed by another
+specification. See in particular the _Jakarta Interceptors_ specification.
+
+- The method MUST NOT have any para meters.
+
+- The return type of the method MUST be _void_ .
+
+- The method MUST NOT throw a checked exception.
+
+- The method on which _PostConstruct_ is
+applied MAY be _public_ , _protected_ , package private or _private_ .
+
+- The method MUST NOT be static except for the application client.
+
+- In general, the method MUST NOT be final.
+However, other specifications are permitted to relax this requirement on
+a per-component basis.
+
+- If the method throws an unchecked exception the class MUST NOT be put into service.
+
+[source,java]
+----
+package jakarta.annotation;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+@Target(METHOD)
+@Retention(RUNTIME)
+public @interface PostConstruct {
+
+}
+----
+
+The following example shows the usage of the annotation defined above:
+
+[source,java]
+----
+@Resource
+private void setMyDB(DataSource ds) {
+ myDB = ds;
+}
+
+@PostConstruct
+private void initialize() {
+ // Initialize the connection object from the DataSource
+ connection = myDB.getConnection();
+}
+
+private DataSource myDB;
+private Connection connection;
+----
+
+
+=== jakarta.annotation.PreDestroy
+
+The _PreDestroy_ annotation is used on a
+method as a callback notification to signal that the instance is in the
+process of being removed by the container. The method annotated with
+_PreDestroy_ is typically used to release resources that the instance
+has been holding. This annotation MUST be supported by all container
+managed objects that support _PostConstruct_ except the application
+client. The method on which the _PreDestroy_ annotation is applied MUST
+fulfill all of the following requirements, except in cases where these
+requirements have been relaxed by another specification. See in
+particular the _Jakarta Interceptors_ specification.
+
+- The method MUST NOT have any para meters.
+
+- The return type of the method MUST be _void_ .
+
+- The method MUST NOT throw a checked exception.
+
+- The method on which _PreDestroy_ is applied
+MAY be _public_ , _protected_ , package private or _private_ .
+
+- The method MUST NOT be static.
+
+- In general, the method MUST NOT be final.
+However, other specifications are permitted to relax this requirement on
+a per-component basis.
+
+- If the method throws an unchecked exception it is ignored.
+
+[source,java]
+----
+package jakarta.annotation;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+@Target(METHOD)
+@Retention(RUNTIME)
+public @interface PreDestroy {
+
+}
+----
+
+The following example shows the usage of the annotation defined above:
+
+[source,java]
+----
+@Resource
+private void setMyDB(DataSource ds) {
+ myDB = ds;
+}
+
+@PostConstruct
+private void initialize() {
+ // Initialize the connection object from the DataSource
+ connection = myDB.getConnection();
+}
+
+@PreDestroy
+private void cleanup() {
+ // Close the connection to the DataSource.
+ connection.close();
+}
+
+private DataSource myDB;
+private Connection connection;
+----
+
+=== jakarta.annotation.Priority
+
+The _Priority_ annotation can be applied to
+classes or parameters to indicate in what order they should be used. The
+effect of using the _Priority_ annotation in any particular instance is
+defined by other specifications that define the use of a specific class.
+
+For example, the _Jakarta Interceptors_ specification
+defines the use of priorities on interceptors to control the order in
+which interceptors are called.
+
+Priority values should generally be
+non-negative, with negative values reserved for special meanings such as
+“undefined” or “not specified”. A specification that defines use of the
+_Priority_ annotation may define the range of allowed priorities and any
+priority values with special meaning.
+
+[source,java]
+----
+package jakarta.annotation;
+
+import java.lang.annotation.*;
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+@Target({TYPE, PARAMETER})
+@Retention(RUNTIME)
+@Documented
+public @interface Priority {
+ // The priority value.
+ int value();
+}
+----
+
+=== jakarta.annotation.security.RunAs
+
+The _RunAs_ annotation defines the security
+role of the application during execution in a Jakarta EE container. It can
+be specified on a class. This allows developers to execute an
+application under a particular role. The role MUST map to the user /
+group information in the container’s security realm. The _value_ element
+in the annotation is the name of a security role.
+
+[source,java]
+----
+package jakarta.annotation.security;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+@Target(TYPE)
+@Retention(RUNTIME)
+public @interface RunAs {
+ String value();
+}
+----
+
+|===
+|Element |Description |Default
+|value |Security role of the application during execution in a Jakarta EE container |
+|===
+
+The following example shows the usage of the annotation defined above:
+
+[source,java]
+----
+@RunAs("Admin")
+public class Calculator {
+ // ...
+}
+----
+
+=== jakarta.annotation.security.RolesAllowed
+
+The _RolesAllowed_ annotation specifies the
+security roles permitted to access method(s) in an application. The
+value element of the _RolesAllowed_ annotation is a list of security
+role names.
+
+The _RolesAllowed_ annotation can be
+specified on a class or on method(s). Specifying it at a class level
+means that it applies to all the methods in the class. Specifying it on
+a method means that it is applicable to that method only. If applied at
+both the class and method level, the method value overrides the class
+value.
+
+[source,java]
+----
+package jakarta.annotation.security;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+@Target({TYPE,METHOD})
+@Retention(RUNTIME)
+public @interface RolesAllowed {
+ String[] value();
+}
+----
+
+|===
+|Element |Description |Default
+|value |List of roles permitted to access methods in the application |
+|===
+
+The following example shows the usage of the annotation defined above:
+
+[source,java]
+----
+@RolesAllowed("Users")
+public class Calculator {
+ @RolesAllowed("Administrator")
+ public void setNewRate(int rate) {
+ // ...
+ }
+}
+----
+
+=== jakarta.annotation.security.PermitAll
+
+The _PermitAll_ annotation specifies that all
+security roles are allowed to invoke the specified method(s), that is,
+that the specified method(s) are “unchecked”. It can be specified on a
+class or on methods. Specifying it on the class means that it applies to
+all methods of the class. If specified at the method level, it only
+affects that method.
+
+[source,java]
+----
+package jakarta.annotation.security;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+@Target({TYPE,METHOD})
+@Retention(RUNTIME)
+public @interface PermitAll {
+
+}
+----
+
+The following example shows the usage of the annotation defined above:
+
+[source,java]
+----
+import jakarta.annotation.security.*;
+
+@RolesAllowed("Users")
+public class Calculator {
+ @RolesAllowed("Administrator")
+ public void setNewRate(int rate) {
+ // ...
+ }
+
+ @PermitAll
+ public long convertCurrency(long amount) {
+ // ...
+ }
+}
+----
+
+=== jakarta.annotation.security.DenyAll
+
+The _DenyAll_ annotation specifies that no
+security roles are allowed to invoke the specified method(s), that is,
+that the method(s) are to be excluded from execution in the Jakarta EE
+container.
+
+[source,java]
+----
+package jakarta.annotation.security;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+@Target({TYPE, METHOD})
+@Retention(RUNTIME)
+public @interface DenyAll {
+
+}
+----
+
+The following example shows the usage of the annotation defined above:
+
+[source,java]
+----
+import jakarta.annotation.security.*;
+
+@RolesAllowed("Users")
+public class Calculator {
+ @RolesAllowed("Administrator")
+ public void setNewRate(int rate) {
+ // ...
+ }
+
+ @DenyAll
+ public long convertCurrency(long amount) {
+ // ...
+ }
+}
+----
+
+=== PermitAll, DenyAll and RolesAllowed interactions
+
+The _PermitAll_ , _DenyAll_ and
+_RolesAllowed_ annotations all define which security roles are allowed
+to access the methods on which they are applied. This section describes
+how these annotations interact and which usages of these annotations are
+valid.
+
+If the _PermitAll_ , _DenyAll_ and
+_RolesAllowed_ annotations are applied on methods of a class, then the
+method level annotations take precedence (at the corresponding methods)
+over any class level annotations of type _PermitAll_ , _DenyAll_ and
+_RolesAllowed_ .
+
+=== jakarta.annotation.security.DeclareRoles
+
+The _DeclareRoles_ annotation is used to
+specify security roles used by the application. It can be specified on a
+class. It typically would be used to define roles that could be tested
+(i.e., by calling _isUserInRole_ ) from within the methods of the
+annotated class. It could also be used to declare roles that are not
+implicitly declared as the result of their use in a _RolesAllowed_
+annotation on the class or a method of the class.
+
+[source,java]
+----
+package jakarta.annotation.security;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+@Target(TYPE)
+@Retention(RUNTIME)
+public @interface DeclareRoles {
+ String[] value();
+}
+----
+
+|===
+|Element |Description |Default
+|value |List of security roles specified by the application |
+|===
+
+The following example shows the usage of the annotation defined above:
+
+[source,java]
+----
+@DeclareRoles("BusinessAdmin")
+public class Calculator {
+ public void convertCurrency() {
+ if (x.isUserInRole("BusinessAdmin")) {
+ // ...
+ }
+ }
+
+ // ...
+}
+----
+
+=== jakarta.annotation.sql.DataSourceDefinition
+
+The _DataSourceDefinition_ annotation is used
+to define a container _DataSource_ to be registered with JNDI. The
+_DataSource_ may be configured by setting the annotation elements for
+commonly-used _DataSource_ properties. Additional standard and
+vendor-specific properties may be specified using the _properties_
+element. The data source will be registered under the name specified in
+the _name_ element. It may be defined to be in any valid Jakarta EE
+namespace, which will determine the accessibility of the data source
+from other components. A JDBC driver implementation class of the
+appropriate type, either _DataSource_ , _ConnectionPoolDataSource_ , or
+_XADataSource_ , must be indicated by the _className_ element. The
+driver class is not required to be available at deployment but must be
+available at runtime prior to any attempt to access the _DataSource_ .
+
+ _DataSource_ properties should not be
+specified more than once. If the _url_ annotation element contains a
+_DataSource_ property that was also specified using the corresponding
+annotation element or was specified in the _properties_ annotation
+element, the precedence order is undefined and implementation specific.
+
+Vendors are not required to support
+_properties_ that do not normally apply to a specific data source type.
+For example, specifying the _transactional_ property to be _true_ but
+supplying a value for _className_ that implements a data source class
+other than _XADataSource_ may not be supported.
+
+Vendor-specific properties may be combined
+with or used to override standard data source properties defined using
+this annotation.
+
+_DataSource_ properties that are specified
+and are not supported in a given configuration or cannot be mapped to a
+vendor-specific configuration property may be ignored.
+
+Although the annotation allows you to specify
+a password, it is recommended not to embed passwords in production code.
+The _password_ element in the annotation is provided as a convenience
+for ease of development.
+
+[source,java]
+----
+package jakarta.annotation.sql;
+
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.RetentionPolicy;
+
+@Target({ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+@Repeatable(DataSourceDefinitions.class)
+public @interface DataSourceDefinition {
+ String name();
+ String className();
+ String description() default "";
+ String url() default "";
+ String user() default "";
+ String password() default "";
+ String databaseName() default "";
+ int portNumber() default -1;
+ String serverName() default "localhost";
+ int isolationLevel() default -1;
+ boolean transactional() default true;
+ int initialPoolSize() default -1;
+ int maxPoolSize() default -1;
+ int minPoolSize() default -1;
+ int maxIdleTime() default -1;
+ int maxStatements() default -1;
+ String[] properties() default \{};
+ int loginTimeout() default 0;
+}
+----
+
+[width="100%",cols="34%,33%,33%",options="header",]
+|===
+|Element |Description |Default
+| _name_ |JNDI name by which the data source will be registered |
+| _className_ |DataSource implementation class name |
+| _description_ |Description of the data source |""
+| _url_ |A JDBC URL. If the url annotation element contains a DataSource property that was also specified using the corresponding annotation element, the precedence order is undefined and implementation specific. |""
+| _user_ |User name for connection authentications |""
+| _password_ |Password for connection authentications |""
+| _databaseName_ |Name of a database on a server |""
+| _portNumber_ |Port number where a server is listening for requests |""
+| _serverName_ |Database server name |"localhost"
+| _isolationLevel_ |Isolation level for connections. |-1 (vendor specific)
+| _transactional_ |Indicates whether a connection is transactional or not |true
+| _initialPoolSize_ |Number of connections that should be created when a connection pool is initialized |-1 (vendor specific)
+| _maxPoolSize_ |Maximum number of connections that should be concurrently allocated for a connection pool |-1 (vendor specific)
+| _minPoolSize_ |Minimum number of connections that should be allocated for a connection pool |-1 (vendor specific)
+| _maxIdleTime_ |The number of seconds that a physical connection should remain unused in the pool before the connection is closed for a connection pool |-1 (vendor specific)
+| _maxStatements_ |The total number of statements that a connection pool should keep open. A value of 0 indicates that the caching of statements is disabled for a connection pool |-1 (vendor specific)
+| _properties_ |Used to specify vendor-specific properties and less commonly used _DataSource_ properties. If a _DataSource_ property is specified in the properties element and the annotation element for the property is also specified, the annotation element value takes precedence. |\{}
+| _loginTimeout_ |The maximum time in seconds that this data source will wait while attempting to connect to a database. A value of 0 specifies that the timeout is the default system timeout if there is one, otherwise it specifies that there is no timeout |0
+|===
+
+Examples:
+
+[source,java]
+----
+@DataSourceDefinition(
+ name="java:global/MyApp/MyDataSource",
+ className="com.foobar.MyDataSource",
+ portNumber=6689,
+ serverName="myserver.com",
+ user="lance",
+ password="secret")
+
+----
+
+Using a URL:
+
+[source,java]
+----
+@DataSourceDefinition(
+ name="java:global/MyApp/MyDataSource",
+ className="org.apache.derby.jdbc.ClientDataSource",
+ url="jdbc:derby://localhost:1527/myDB",
+ user="lance",
+ password="secret")
+----
+
+=== jakarta.annotation.sql.DataSourceDefinitions
+
+The _DataSourceDefinition_ annotation is used
+to declare a container _DataSource_ . The _DataSourceDefinitions_
+annotation acts as a container for multiple data source declarations.
+
+[source,java]
+----
+package jakarta.annotation.sql;
+
+import java.lang.annotation.Target;
+import java.lang.annotation.Retention;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.RetentionPolicy;
+
+@Target({ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface DataSourceDefinitions {
+ DataSourceDefinition[] value ();
+}
+----
+
+|===
+|Element |Description |Default
+|value |Container for defining multiple data sources. |
+|===
+
+The following example shows the usage of the annotation defined above:
+
+[source,java]
+----
+@DataSourceDefinitions ({
+ @DataSourceDefinition(name="java:global/MyApp/MyDataSource",
+ className="com.foobar.MyDataSource",
+ portNumber=6689,
+ serverName="myserver.com",
+ user="lance",
+ password="secret"),
+
+ @DataSourceDefinition(name="java:global/MyApp/MyDataSource",
+ className="org.apache.derby.jdbc.ClientDataSource",
+ url="jdbc:derby://localhost:1527/myDB",
+ user="lance",
+ password="secret")
+})
+public class CalculatorBean {
+ // ...
+}
+----
+
+=== jakarta.annotation.ManagedBean
+
+The _ManagedBean_ annotation is used to
+declare a Jakarta Managed Bean as specified in the _Jakarta Managed Beans_
+specification. Jakarta Managed Beans are container-managed objects that support
+a small set of basic services such as resource injection, lifecycle
+callbacks and interceptors. A Jakarta Managed Bean may optionally have a name, a
+_String_ specified via the _value_ element.
+
+[source,java]
+----
+package jakarta.annotation;
+
+import static java.lang.annotation.ElementType.*;
+import static java.lang.annotation.RetentionPolicy.*;
+
+@Target(TYPE)
+@Retention(RUNTIME)
+public @interface ManagedBean {
+ boolean value() default "";
+}
+----
+
+|===
+|Element |Description |Default
+|value |Name of the Jakarta Managed Bean |""
+|===
+
+Examples:
+
+[source,java]
+----
+@ManagedBean("cart")
+public class ShoppingCart {
+ // ...
+}
+----
+
+== References
+
+JSR 175: A Metadata Facility for the Java
+Programming Language. http://jcp.org/en/jsr/detail?id=175
+
+Jakarta EE Platform 9 (Jakarta EE).
+https://jakarta.ee/specifications/platform/9/
+
+Java 2 Platform, Standard Edition, v5.0
+(J2SE). https://www.oracle.com/java/technologies/javase/j2se-v50.html
+
+Jakarta Enterprise Beans, v4.0.
+https://jakarta.ee/specifications/enterprise-beans/4.0
+
+Jakarta Interceptors, 2.0.
+https://jakarta.ee/specifications/interceptors/2.0/
+
+Jakarta Managed Beans.
+https://jakarta.ee/specifications/managedbeans/2.0/
+
+RFC 2119.
+http://www.faqs.org/rfcs/rfc2119.html
diff --git a/spec/src/main/theme/jakartaee-theme.yml b/spec/src/main/theme/jakartaee-theme.yml
new file mode 100644
index 0000000..6092a2f
--- /dev/null
+++ b/spec/src/main/theme/jakartaee-theme.yml
@@ -0,0 +1,299 @@
+#
+# Following is the asciidoctor-pdf default theme [1], with small
+# customizations, mostly for header and footer, marked "EE".
+#
+# [1] https://github.com/asciidoctor/asciidoctor-pdf/blob/master/data/themes/default-theme.yml
+#
+font:
+ catalog:
+ # Noto Serif supports Latin, Latin-1 Supplement, Latin Extended-A, Greek, Cyrillic, Vietnamese & an assortment of symbols
+ Noto Serif:
+ normal: notoserif-regular-subset.ttf
+ bold: notoserif-bold-subset.ttf
+ italic: notoserif-italic-subset.ttf
+ bold_italic: notoserif-bold_italic-subset.ttf
+ # M+ 1mn supports ASCII and the circled numbers used for conums
+ M+ 1mn:
+ normal: mplus1mn-regular-ascii-conums.ttf
+ bold: mplus1mn-bold-ascii.ttf
+ italic: mplus1mn-italic-ascii.ttf
+ bold_italic: mplus1mn-bold_italic-ascii.ttf
+ # M+ 1p supports Latin, Latin-1 Supplement, Latin Extended, Greek, Cyrillic, Vietnamese, Japanese & an assortment of symbols
+ # It also provides arrows for ->, <-, => and <= replacements in case these glyphs are missing from font
+ M+ 1p Fallback:
+ normal: mplus1p-regular-fallback.ttf
+ bold: mplus1p-regular-fallback.ttf
+ italic: mplus1p-regular-fallback.ttf
+ bold_italic: mplus1p-regular-fallback.ttf
+ fallbacks:
+ - M+ 1p Fallback
+page:
+ background_color: ffffff
+ layout: portrait
+ margin: [0.5in, 0.67in, 0.67in, 0.67in]
+ # margin_inner and margin_outer keys are used for recto/verso print margins when media=prepress
+ margin_inner: 0.75in
+ margin_outer: 0.59in
+ #size: A4 # EE
+ size: Letter # EE
+base:
+ align: justify
+ # color as hex string (leading # is optional)
+ font_color: 333333
+ # color as RGB array
+ #font_color: [51, 51, 51]
+ # color as CMYK array (approximated)
+ #font_color: [0, 0, 0, 0.92]
+ #font_color: [0, 0, 0, 92%]
+ font_family: Noto Serif
+ # choose one of these font_size/line_height_length combinations
+ #font_size: 14
+ #line_height_length: 20
+ #font_size: 11.25
+ #line_height_length: 18
+ #font_size: 11.2
+ #line_height_length: 16
+ font_size: 10.5
+ #line_height_length: 15
+ # correct line height for Noto Serif metrics
+ line_height_length: 12
+ #font_size: 11.25
+ #line_height_length: 18
+ line_height: $base_line_height_length / $base_font_size
+ font_size_large: round($base_font_size * 1.25)
+ font_size_small: round($base_font_size * 0.85)
+ font_size_min: $base_font_size * 0.75
+ font_style: normal
+ border_color: eeeeee
+ border_radius: 4
+ border_width: 0.5
+# FIXME vertical_rhythm is weird; we should think in terms of ems
+#vertical_rhythm: $base_line_height_length * 2 / 3
+# correct line height for Noto Serif metrics (comes with built-in line height)
+vertical_rhythm: $base_line_height_length
+horizontal_rhythm: $base_line_height_length
+# QUESTION should vertical_spacing be block_spacing instead?
+vertical_spacing: $vertical_rhythm
+link:
+ font_color: 428bca
+# literal is currently used for inline monospaced in prose and table cells
+literal:
+ font_color: b12146
+ font_family: M+ 1mn
+menu_caret_content: " <font size=\"1.15em\"><color rgb=\"b12146\">\u203a</color></font> "
+heading:
+ align: left
+ #font_color: 181818
+ font_color: $base_font_color
+ font_family: $base_font_family
+ font_style: bold
+ # h1 is used for part titles (book doctype) or the doctitle (article doctype)
+ #h1_font_size: floor($base_font_size * 2.6) # EE
+ h1_font_size: floor($base_font_size * 2.5) # EE, squeeze title onto one line
+ # h2 is used for chapter titles (book doctype only)
+ h2_font_size: floor($base_font_size * 2.15)
+ h3_font_size: round($base_font_size * 1.7)
+ h4_font_size: $base_font_size_large
+ h5_font_size: $base_font_size
+ h6_font_size: $base_font_size_small
+ #line_height: 1.4
+ # correct line height for Noto Serif metrics (comes with built-in line height)
+ line_height: 1
+ margin_top: $vertical_rhythm * 0.4
+ margin_bottom: $vertical_rhythm * 0.9
+title_page:
+ align: right
+ logo:
+ top: 10%
+ title:
+ top: 55%
+ font_size: $heading_h1_font_size
+ font_color: 999999
+ line_height: 0.9
+ subtitle:
+ font_size: $heading_h3_font_size
+ font_style: bold_italic
+ line_height: 1
+ authors:
+ margin_top: $base_font_size * 1.25
+ font_size: $base_font_size_large
+ font_color: 181818
+ revision:
+ margin_top: $base_font_size * 1.25
+block:
+ margin_top: 0
+ margin_bottom: $vertical_rhythm
+caption:
+ align: left
+ font_size: $base_font_size * 0.95
+ font_style: italic
+ # FIXME perhaps set line_height instead of / in addition to margins?
+ margin_inside: $vertical_rhythm / 3
+ #margin_inside: $vertical_rhythm / 4
+ margin_outside: 0
+lead:
+ font_size: $base_font_size_large
+ line_height: 1.4
+abstract:
+ font_color: 5c6266
+ font_size: $lead_font_size
+ line_height: $lead_line_height
+ font_style: italic
+ first_line_font_style: bold
+ title:
+ align: center
+ font_color: $heading_font_color
+ font_family: $heading_font_family
+ font_size: $heading_h4_font_size
+ font_style: $heading_font_style
+admonition:
+ column_rule_color: $base_border_color
+ column_rule_width: $base_border_width
+ padding: [0, $horizontal_rhythm, 0, $horizontal_rhythm]
+ #icon:
+ # tip:
+ # name: fa-lightbulb-o
+ # stroke_color: 111111
+ # size: 24
+ label:
+ text_transform: uppercase
+ font_style: bold
+blockquote:
+ font_color: $base_font_color
+ font_size: $base_font_size_large
+ border_color: $base_border_color
+ border_width: 5
+ # FIXME disable negative padding bottom once margin collapsing is implemented
+ padding: [0, $horizontal_rhythm, $block_margin_bottom * -0.75, $horizontal_rhythm + $blockquote_border_width / 2]
+ cite_font_size: $base_font_size_small
+ cite_font_color: 999999
+# code is used for source blocks (perhaps change to source or listing?)
+code:
+ font_color: $base_font_color
+ font_family: $literal_font_family
+ font_size: ceil($base_font_size)
+ padding: $code_font_size
+ line_height: 1.25
+ # line_gap is an experimental property to control how a background color is applied to an inline block element
+ line_gap: 3.8
+ background_color: f5f5f5
+ border_color: cccccc
+ border_radius: $base_border_radius
+ border_width: 0.75
+conum:
+ font_family: M+ 1mn
+ font_color: $literal_font_color
+ font_size: $base_font_size
+ line_height: 4 / 3
+example:
+ border_color: $base_border_color
+ border_radius: $base_border_radius
+ border_width: 0.75
+ background_color: ffffff
+ # FIXME reenable padding bottom once margin collapsing is implemented
+ padding: [$vertical_rhythm, $horizontal_rhythm, 0, $horizontal_rhythm]
+image:
+ align: left
+prose:
+ margin_top: $block_margin_top
+ margin_bottom: $block_margin_bottom
+sidebar:
+ background_color: eeeeee
+ border_color: e1e1e1
+ border_radius: $base_border_radius
+ border_width: $base_border_width
+ # FIXME reenable padding bottom once margin collapsing is implemented
+ padding: [$vertical_rhythm, $vertical_rhythm * 1.25, 0, $vertical_rhythm * 1.25]
+ title:
+ align: center
+ font_color: $heading_font_color
+ font_family: $heading_font_family
+ font_size: $heading_h4_font_size
+ font_style: $heading_font_style
+thematic_break:
+ border_color: $base_border_color
+ border_style: solid
+ border_width: $base_border_width
+ margin_top: $vertical_rhythm * 0.5
+ margin_bottom: $vertical_rhythm * 1.5
+description_list:
+ term_font_style: bold
+ term_spacing: $vertical_rhythm / 4
+ description_indent: $horizontal_rhythm * 1.25
+outline_list:
+ indent: $horizontal_rhythm * 1.5
+ #marker_font_color: 404040
+ # NOTE outline_list_item_spacing applies to list items that do not have complex content
+ item_spacing: $vertical_rhythm / 2
+table:
+ background_color: $page_background_color
+ #head_background_color: <hex value>
+ #head_font_color: $base_font_color
+ head_font_style: bold
+ #body_background_color: <hex value>
+ body_stripe_background_color: f9f9f9
+ foot_background_color: f0f0f0
+ border_color: dddddd
+ border_width: $base_border_width
+ cell_padding: 3
+toc:
+ indent: $horizontal_rhythm
+ line_height: 1.4
+ dot_leader:
+ #content: ". "
+ font_color: a9a9a9
+ #levels: 2 3
+# NOTE in addition to footer, header is also supported
+footer:
+ font_size: $base_font_size_small
+ # NOTE if background_color is set, background and border will span width of page
+ #border_color: dddddd # EE
+ #border_width: 0.25 # EE
+ height: $base_line_height_length * 2.5
+ line_height: 1
+ padding: [$base_line_height_length / 2, 1, 0, 1]
+ vertical_align: top
+ #image_vertical_align: <alignment> or <number>
+ # additional attributes for content:
+ # * {page-count}
+ # * {page-number}
+ # * {document-title}
+ # * {document-subtitle}
+ # * {chapter-title}
+ # * {section-title}
+ # * {section-or-chapter-title}
+ recto:
+ #columns: "<50% =0% >50%"
+ right:
+ #content: '{page-number}' # EE
+ #content: '{section-or-chapter-title} | {page-number}'
+ #content: '{document-title} | {page-number}'
+ content: '{document-title}{nbsp}{nbsp}{nbsp} *{page-number}*' # EE
+ #center:
+ # content: '{page-number}'
+ left: # EE
+ content: '{status}' # EE
+ verso:
+ #columns: $footer_recto_columns
+ left:
+ #content: $footer_recto_right_content # EE
+ #content: '{page-number} | {chapter-title}'
+ content: '*{page-number}* {nbsp}{nbsp}{nbsp}{document-title}' # EE
+ #center:
+ # content: '{page-number}'
+ right: # EE
+ content: '{status}' # EE
+header: # EE
+ font_size: $base_font_size_small # EE
+ border_color: dddddd # EE
+ border_width: 0.25 # EE
+ height: $base_line_height_length * 2.5 # EE
+ line_height: 1 # EE
+ padding: [$base_line_height_length / 2, 1, 0, 1] # EE
+ vertical_align: top # EE
+ recto: # EE
+ right: # EE
+ content: '{section-or-chapter-title}' # EE
+ verso: # EE
+ left: # EE
+ content: '{section-or-chapter-title}' # EE