Enterprise JavaBeans

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 24 augusti 2016; kontroller kräver 9 redigeringar .

Enterprise JavaBeans (även ofta använd som en förkortning EJB) är en teknikspecifikation för att skriva och stödja komponenter på serversidan som innehåller affärslogik . Det är en del av Java EE .

Denna teknik används vanligtvis när affärslogik kräver minst en av följande tjänster, och ofta alla av dem:

Varje EJB-komponent är en uppsättning Java - klasser med strikt definierade regler för metodnamn (gäller för EJB 2.0, i EJB 3.0 på grund av användningen av anteckningar är valet av namn fritt). Det finns tre huvudtyper:

Entity Bean Exempel

paket org.test.entity ; importera java.io.Serializable ; importera java.util.Date ; importera javax.persistence.* ; import javax.validation.constraints.Size ; import org.test.entity.listener.GalleryListener ; @Entity @EntityListeners ({ GalleryListener . class }) @Table ( namn = "galleri" , unikaConstraints = { @UniqueConstraint ( columnNames = { "id" }) } ) @NamedQueries ({ @NamedQuery ( namn = Galleri . QUERY_FIND_ALL , query ) = "VÄLJ g FRÅN Galleri g BESTÄLL EFTER g.namn ASC" ), @NamedQuery ( namn = Galleri . QUERY_FIND_BY_NAME , query = "VÄLJ g FRÅN Galleri g WHERE g.name = :namn" ) }) offentlig klass Galleri implementerar Serialiserbart { private static final long serialVersionUID = 1L ; public static final String QUERY_FIND_ALL = "Gallery.findAll" ; public static final String QUERY_FIND_BY_NAME = "Gallery.findByName" ; @Id @GeneratedValue ( strategi = GenerationType . IDENTITY ) @Column ( namn = "id" , nullable = false ) privat Långt id ; @Size ( max = 100 ) @Kolumn ( namn = "namn " , längd = 100 ) privat Strängnamn ; @Column ( namn = "created_at" ) @Temporal ( TemporalType . TIMESTAMP ) privat Datum skapatAt ; offentligt galleri () { } offentligt galleri ( strängnamn ) { detta . _ namn = namn ; } public Date getCreatedAt () { return createdAt ; } public void setCreatedAt ( Date createdAt ) { this . createAt = createAt ; } public Long getId () { return id ; } public void setId ( Långt id ) { detta . id = id ; } public String getName () { return name ; } public void setName ( String name ) { this . namn = namn ; } @Override public boolean equals ( Object obj ) { if ( obj == null ) { return false ; } if ( getClass () != obj . getClass ()) { return false ; } final Gallery other = ( Gallery ) obj ; if ( detta . id != annat . id && ( detta . id == null || ! detta . id . är lika med ( annat . id ))) { return false ; } returnera sant ; } @Åsidosätt public int hashCode () { int hash = 7 ; hash = 47 * hash + ( detta . id ! = null ? detta . id . hashCode ( ) : 0 ); returnera hash ; } }

Entity Bean Listener Exempel

paketet org.test.entity.listener ; importera java.util.Date ; importera javax.persistence.PrePersist ; import org.test.entity.Gallery ; offentlig klass GalleryListener { @PrePersist public void prePersist ( Gallerigalleri ) { galleri . _ setCreatedAt ( nytt datum ()); } }

Session Bean Exempel - Stateless EAO (Entity Access Object)

paket org.test.eao ; importera java.util.List ; importera javax.ejb.LocalBean ; importera javax.ejb.Stateless ; importera javax.ejb.TransactionAttribute ; import javax.ejb.TransactionAttributeType ; importera javax.persistence.EntityManager ; importera javax.persistence.PersistenceContext ; import org.test.entity.Gallery ; @Stateless @LocalBean offentlig klass GalleryEAO utökar AbstractEAO < Gallery > { @PersistenceContext ( unitName = "PersistenceUnit" ) privat EntityManager entityManager ; offentligt GalleriEAO () { super ( Galleri . klass ); } @Override protected EntityManager getEntityManager () { return entityManager ; } @TransactionAttribute ( TransactionAttributeType . SUPPORTS ) offentlig lista < Galleri > findAll () { return namedQuery ( Gallery . QUERY_FIND_ALL ). getResultList (); } @TransactionAttribute ( TransactionAttributeType . SUPPORTS ) public Gallery findByName ( String name ) { return namedQuery ( Galleri . QUERY_FIND_BY_NAME ) . setParameter ( "namn" , namn ) . getSingleResult (); } }

Abstrakt EAO (Entity Access Object) exempel

paket org.test.eao ; importera java.io.Serializable ; importera javax.persistence.EntityManager ; importera javax.persistence.Query ; importera javax.persistence.TypedQuery ; importera javax.persistence.criteria.CriteriaQuery ; importera javax.persistence.criteria.Root ; public abstract class AbstractEAO < T utökar Serializable > { skyddad abstrakt EntityManager getEntityManager (); privat klass < T > entityClass ; public Class < T > getEntityClass () { return entityClass ; } public AbstractEAO ( Class < T > entityClass ) { this . entityClass = entityClass ; } public void kvarstår ( T entity ) { getEntityManager (). bestå ( enhet ); } public void merge ( T entity ) { getEntityManager (). sammanfoga ( enhet ); } public void remove ( T entity ) { if ( entity != null ) { getEntityManager (). ta bort ( enhet ); } } public void remove ( Object id ) { T entity = ( T ) getEntityManager (). hitta ( entityClass , id ); ta bort ( enhet ); } public T find ( Objekt - id ) { return getEntityManager (). hitta ( entityClass , id ); } public void refresh ( T entity ) { getEntityManager (). uppdatera ( enhet ); } public TypedQuery < T > namedQuery ( String queryName ) { return getEntityManager (). createNamedQuery ( queryName , entityClass ); } public TypedQuery < T > query ( String queryString ) { return getEntityManager (). createQuery ( queryString , entityClass ); } public long count () { CriteriaQuery criteriaQuery = getEntityManager (). getCriteriaBuilder (). createQuery (); Root < T > root = criteriaQuery . från ( entityClass ); kriterierFråga . välj ( getEntityManager (). getCriteriaBuilder (). count ( root )); Query query = getEntityManager (). createQuery ( kriterieQuery ); returnera (( Lång ) fråga . getSingleResult ()). longValue (); } }

Session Bean (Stateless) Exempel - Galleri Fasad

paket org.test.fasad ; importera java.util.List ; importera javax.ejb.* ; importera org.test.eao.GalleryEAO ; import org.test.entity.Gallery ; import org.test.exception.GalleryAlreadyExistsException ; import org.test.exception.GalleryNotFoundException ; @Stateless @LocalBean offentlig klass GalleryFacade { @Injicera privat GalleriEAO galleriEAO ; @TransactionAttribute ( TransactionAttributeType . SUPPORTS ) public Gallery findById ( Långt id ) kastar GalleryNotFoundException { Gallery gallery = galleryEAO . hitta ( id ); if ( galleri == null ) kasta nytt GalleryNotFoundException ( "Galleri hittades inte" ); returgalleri ; _ } @TransactionAttribute ( TransactionAttributeType . SUPPORTS ) offentlig lista < Galleri > findAll () { return galleryEAO . findAll (); } @TransactionAttribute ( TransactionAttributeType . KRÄVS ) public void create ( String name ) throws GalleryAlreadyExistsException { if ( galleryEAO . findByName ( name ) != null ) throw new GalleryAlreadyExistsException ( "Galleri existerar redan" , namn ); Gallerigalleri = nytt Galleri ( namn ) ; galleriEAO . bestå ( galleri ); } @TransactionAttribute ( TransactionAttributeType . KRÄVS ) public void remove ( Långt id ) kastar GalleryNotFoundException { Gallery gallery = findById ( id ); galleriEAO . ta bort ( galleri ); } }

Exempel på programundantag - GalleryNotFoundException

paketet org.test.exception ; import javax.ejb.ApplicationException ; @ApplicationException ( rollback = true ) public class GalleryNotFoundException utökar Exception { public GalleryNotFoundException () { } public GalleryNotFoundException ( String message ) { super ( meddelande ); } }

Exempel Application Exception - GalleryAlreadyExistsException

paketet org.test.exception ; import javax.ejb.ApplicationException ; @ApplicationException ( rollback = true ) public class GalleryAlreadyExistsException utökar Exception { privat strängnamn ; _ public GalleryAlreadyExistsException () { } public GalleryAlreadyExistsException ( String message , String name ) { super ( meddelande ); detta . namn = namn ; } public String getName () { return name ; } }

Litteratur

  • Panda D. EJB 3 i aktion. - DMK Press , 2014. - 618 sid. — ISBN 978-5-97060-135-8 .

Länkar