Java EE 7 Annotations
Alternatives for management CDI JSF EJB CDI: javax.inject
CMF @Inject @Named(value=) @Singleton T T T T T T TM TM T T T T
TM
@Interceptors (Class.class[]) @ExcludeDefaultInterceptors @ExcludeClassInterceptors @AroundInvoke @AroundTimeout @Interceptor [only required with @InterceptorBinding]
EJB Types: javax.ejb
Session beans
TM M M M T
@Stateless (name=ClassName ) @Stateful(name=C lassName) @Singleton (name=ClassName ) @Local(Class.class[]) on EJB, @Local on interface @Remote(Class.class[]) on EJB, @Remote on interface @LocalBean @Asynchronous @Lock([LockType.WRITE,READ]) @ConcurrencyManagement ([CONTAINER, BEAN]) @DependsOn (String[]) @Startup
Non-session beans
Security: javax.annotation.security
T T TM TM TM 1 @RunAs (String rolename) @DeclareRoles (String[]) @RolesAllowed(String[]) @PermitAll @DenyAll
CDI: javax.enterprise.context
TMF TMF TMF TMF TMF @ApplicationScoped @SessionScoped @ConversationScoped @RequestScoped @Dependent
@MessageDriven (name=C lassName, activationConfig=@ActivationConfigProperty[]) @ActivationConfigProperty (propertyName=, propertyValue=)
CDI: javax.enterprise.inject
TMF TMF TMF MF @New(value=Class.class) @Alternative @Any @Produces, @Disposes
@ManagedBean (value=)
[in javax.annotation.*]
Timeouts: javax.ejb
TM T M M @AccessTimeout (value=0,unit=MILLISECONDS) @StatefulTimeout(value=0,unit=MINUTES) @Timeout @Schedule(year=*, month=*, bimonthly=*, dayOfWeek=*, hour=0, minute=0, info=, persistent=true, timezone=) @Schedules (@Schedule[])
JSF management: javax.faces.bean
T T T T T T T F T @ManagedBean (name=, eager=false) @CustomScoped(value=) @NoneScoped @ApplicationScoped @SessionScoped @ViewScoped @RequestScoped @ManagedProperty (name=, value=) @ReferencedBean (name=)
Transaction: javax.ejb
T TM @TransactionManagement ([CONTAINER, BEAN]) @TransactionAttribute ([TransactionAttributeType. MANDATORY, REQUIRED, REQUIRES_NEW, SUPPORTS, NOT_SUPPORTED, NEVER]) @AfterBegin @BeforeCompletion @AfterCompletion
-- Possible source file layout for web app lib/ [potentially copied to /lib/ inside an EAR] `-- extra.jar [jar shared between all modules] 2 src/java/ [potentially packaged as EJB-JAR inside EAR |-- ValidationMessages.properties or under |-- JSFStrings.properties WEB-INF/classes/ |-- META-INF/ inside WAR] | |-- persistence.xml [for JPA config] | `-- ejb-jar.xml [for deployment descriptors] `-- com/ `-- myBusiness/ |-- entities/ | `-- Entities.java `-- EJBs.java src/webapp/ [potentially packaged as a WAR inside an EAR] 3 |-- WEB-INF/ | |-- beans.xml [for CDI config] | |-- faces-config.xml [for JSF config] | `-- web.xml [for Servlet 2.5 config] |-- resources/ | |-- css/ | | `-- standard.css EAR | `-- javascript/ class | `-- standard.js loader `-- jsfpages.xhtml
levels
Legend TCMF Annotation for Type, Constructor, Method, Field
VALUE Default Value
M M M
EJB injection: javax.ejb
TMF @EJB(name=, beanInterface=Interface.class, mappedName=, lookup=|| beanName=, description=) @EJBs(@EJB[])
Java EE 7 Annotations Cheat Sheet
Version 1.2 2005,2011 Philipp Meier Version 1.5 (2013-06-27) by Chris Rennie, based on Java EE 7 API Doc: EJB 3.2, JSF 2.2, JPA 2.1 www.physics.usyd.edu.au/~rennie/
This work is licensed under the Creative Commons AttributionNonCommercial-ShareAlike 2.0 Germany License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/2.0/de/ or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.
Lifecycle: javax.ejb
M M M M M @PostConstruct @PreDestroy @PostActivate @PrePassivate @Remove(retainIfException=false) [in javax.annotation.*] [in javax.annotation.*]
Resource injection: javax.annotation
TMF @Resource(name=, type=Class.class, authenticationType= [AuthenticationType.CONTAINER, APPLICATION], shareable=true, lookup=, mappedName=) @Resources (@Resource[])
Interceptors: javax.interceptor
Persistence provider: javax.persistence
TMF @PersistenceContext (name=, unitName=,type= [PersistenceContextType.TRANSACTION,EXTENDED], properties=@PersistenceProperty[]) @PersistenceContexts (@PersistenceContext[]) @PersistenceUnit(name=, unitName=) @PersistenceUnits (@PersistenceUnit[]) @PersistenceProperty (name=, value=) T @Cacheable(value=true)
TMF
@PrimaryKeyJoinColumn (name=THIS_PK , columnDefinition=, referencedColumnName= OTHER_FK) @PrimaryKeyJoinColumns (@PrimaryKeyJoinColumn[]) @JoinColumn (name=THIS_FK, table=, unique=false, nullable=true, insertable=true, updatable=true, columnDefinition=, referencedColumnName=OTHER_PK) @JoinColumns (@JoinColumn[]) @JoinTable(name=, schema=, catalog=, joinColumns={}, inverseJoinColumns={}, uniqueConstraints=@UniqueConstraint[]) @AssociationOverride (name=, joinTable= @JoinTable || joinColumns=@JoinColumn[]) @MapsId(value=propOrField) @OrderBy(value=) @OrderColumn (name=FIELD_ORDER,nullable=true, insertable=true, updatable=true, columnDefinition=)
TMF
@SequenceGenerator(name=, schema=, catalog=, sequenceName=, initialValue=0, allocationSize=50) @TableGenerator(name=, table=, schema=, catalog=, pkColumnName=, valueColumnName=, pkColumnValue=, initialValue=0, allocationSize=50, uniqueConstraints=@UniqueConstraint[])
TMF MF
TMF
T TMF T
MF MF
Embedded objects: javax.persistence
T MF MF @Embeddable @EmbeddedId @Embedded
Object mapping: javax.persistence
T T T @Entity (name=) @Table(name=, schema=, catalog=, uniqueConstraints=@UniqueConstraint[]) @SecondaryTable(name=, schema=, catalog=, pkJoinColumns=@PrimaryKeyJoinColumn[], uniqueConstraints=@UniqueConstraint[]) @SecondaryTables (@SecondaryTable[]) @UniqueConstraint(columnNames=String[], name=) T TMF TMF @IdClass (Class.class) @Access (value=[AccessType.FIELD, PROPERTY]) @AttributeOverride(name=, column=@Column)
TMF MF MF MF
Collections and Maps: javax.persistence
MF MF MF @CollectionTable (name=, schema=, catalog=, joinColumns={}, uniqueConstraints={}) @ElementCollection (targetClass= void.class , fetch=[FetchType.LAZY, EAGER]) @MapKeyColumn (name=FK, table=, unique=false, nullable=true, insertable=true, updatable=true, columnDefinition=, length=255, precision=0, scale=0) @MapKeyJoinColumn (name=FK, table=, unique=false, nullable=true, insertable=true, updatable=true, columnDefinition=, referencedColumnName=OTHER_PK) @MapKeyJoinColumns (@MapKeyJoinColumn[]) @MapKey(propOrField) @MapKeyClass (Class.class) @MapKeyEnumerated ([EnumType.ORDINAL,STRNG]) @MapKeyTemporal([TemporalType.DATE, TIME, TIMESTAMP])
Queries: javax.persistence
T T T T @NamedQuery (name=, query=JPQL..., hints= @QueryHint[], lockMode=...) @NamedQueries (@NamedQuery[]) @NamedNativeQuery (name=, query=SQL..., resultClass=void.class, hints=..., lockMode=...) @NamedNativeQueries (@NamedQuery[]) @QueryHint(name=, value=)
MF
Prop/Field mapping: javax.persistence
MF MF @Id @Column(name=, table=, unique=false, nullable=true, insertable=true, updatable=true, columnDefinition=, length=255, precision=0, scale=0) @Basic(fetch=[LAZY, EAGER], optional=true) @Enumerated([EnumType.ORDINAL,STRING]) @Temporal([TemporalType.DATE, TIME, TIMESTAMP]) @Transient @Lob @Version !! Near-redundancy:
'nullable' describes DB fields 'optional' describes entity properties
MF MF MF MF MF
SqlResultSet mapping: javax.persistence
T T @SqlResultSetMappings (@SqlResultSetMapping[]) @SqlResultSetMapping (name=, entities= @EntityResult[], columns=@ColumnResult[]) @EntityResult(entityResult=Class.class, disriminatorColumn=, fields=@FieldResult[]) @FieldResult(name=, column=) @ColumnResult(name=)
MF MF MF MF MF MF
JPA Lifecycle: javax.persistence
M M M M M M M @PrePersist @PostPersist @PostLoad @PreUpdate @PostUpdate @PreRemove @PostRemove [C] [C] [R] [U] [U] [D] [D]
Relationship mapping: javax.persistence
MF @OneToOne(targetEntity= void.class, cascade={CascadeType.ALL, DETACH, MERGE, PERSIST, REFRESH, REMOVE}, fetch=[FetchType.LAZY, EAGER], optional=true, mappedBy=propOrField, orphanRemoval=false) @OneToMany (targetEntity=void.class , cascade={...}, fetch=[LAZY,EAGER], mappedBy=, orphanRemoval=false) @ManyToOne(targetEntity=void.class , cascade={...}, fetch=[LAZY,EAGER], optional=true) @ManyToMany (targetEntity=void.class , cascade={...}, fetch=[LAZY,EAGER], mappedBy=)
Inheritance: javax.persistence
T T T T @MappedSuperclass @Inheritance([InheritanceType. SINGLE_TABLE, TABLE_PER_CLASS, JOINED]) @DiscriminatorValue (value=) @DiscriminatorColumn (name=DTYPE, discriminatorType=[STRING,CHAR,INTEGER], columnDefinition=, length=31)
Listeners: javax.persistence
T T T See also @EntityListeners (Class.class[]) @ExcludeDefaultListeners @ExcludeSuperclassListeners http://www.oracle.com/technetwork/middleware/ias/top link-jpa-annotations-096251.html
MF
MF MF
Generators: javax.persistence
MF @GeneratedValue(generator=, strategy= [GenerationType.AUTO,IDENTITY,SEQUENCE,TABLE])