Enterprise JavaBeans

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 24. august 2016; checks kræver 9 redigeringer .

Enterprise JavaBeans (også ofte brugt som en forkortelse EJB) er en teknologispecifikation til at skrive og understøtte server- side komponenter, der indeholder forretningslogik . Det er en del af Java EE .

Denne teknik anvendes typisk, når forretningslogik kræver mindst én af følgende tjenester, og ofte dem alle:

Hver EJB-komponent er et sæt Java - klasser med strengt definerede metodenavneregler (sandt for EJB 2.0, i EJB 3.0 på grund af brugen af ​​annoteringer er valget af navne frit). Der er tre hovedtyper:

Entity Bean Eksempel

pakke org.test.entity ; importer java.io.Serialiserbar ; import java.util.Date ; import javax.persistence.* ; import javax.validation.constraints.Size ; import org.test.entity.listener.GalleryListener ; @Entity @EntityListeners ({ GalleryListener . class }) @Tabel ( navn = "galleri" , unikkeConstraints = { @UniqueConstraint ( columnNames = { "id" }) } ) @NamedQueries ({ @NamedQuery ( navn = Galleri . QUERY_FIND_ALL , query ) = "VÆLG g FRA Galleri g BESTIL EFTER g.navn ASC" ), @NamedQuery ( navn = Galleri . QUERY_FIND_BY_NAME , forespørgsel = "VÆLG g FRA Galleri g HVOR g.navn = :navn" ) }) offentlig klasse Galleri implementerer Serializable { private static final long serialVersionUID = 1L ; public static final String QUERY_FIND_ALL = "Galleri.findAlle" ; public static final String QUERY_FIND_BY_NAME = "Gallery.findByName" ; @Id @GeneratedValue ( strategi = GenerationType . IDENTITY ) @Column ( navn = "id" , nullable = falsk ) privat Langt id ; @ Størrelse ( maks . = 100 ) @Kolonne ( navn = "navn " , længde = 100 ) privat Strengnavn ; @Column ( navn = "created_at" ) @Temporal ( TemporalType . TIMESTAMP ) privat Dato oprettetAt ; offentligt galleri () { } offentligt galleri ( strengnavn ) { dette . _ navn = navn ; } public Date getCreatedAt () { return createdAt ; } public void setCreatedAt ( Dato oprettetAt ) { this . oprettetAt = oprettetAt ; } public Long getId () { return id ; } public void setId ( Long id ) { this . id = id ; } public String getName () { return name ; } public void setName ( String name ) { this . navn = navn ; } @Override public boolean equals ( Object obj ) { if ( obj == null ) { return false ; } if ( getClass () != obj . getClass ()) { return false ; } final Gallery other = ( Gallery ) obj ; if ( dette . id != andet . id && ( dette . id == null || ! dette . id . er lig med ( andet . id ))) { return false ; } return true ; } @Override public int hashCode () { int hash = 7 ; hash = 47 * hash + ( dette .id ! = null ? dette .id . hashCode ( ) : 0 ); returner hash ; } }

Entity Bean Listener Eksempel

pakke org.test.entity.listener ; import java.util.Date ; import javax.persistence.PrePersist ; import org.test.entity.Gallery ; offentlig klasse GalleryListener { @PrePersist public void prePersist ( Galleri galleri ) { galleri . setCreatedAt ( ny dato ()); } }

Session Bean Eksempel - Stateless EAO (Entity Access Object)

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

Abstrakt EAO (Entity Access Object) eksempel

pakke org.test.eao ; importer java.io.Serialiserbar ; import javax.persistence.EntityManager ; import javax.persistence.Query ; import javax.persistence.TypedQuery ; import javax.persistence.criteria.CriteriaQuery ; import javax.persistence.criteria.Root ; offentlig abstrakt klasse AbstractEAO < T udvider Serializable > { beskyttet abstrakt EntityManager getEntityManager (); privat klasse < T > enhedsklasse ; public Class < T > getEntityClass () { return entityClass ; } public AbstractEAO ( Klasse < T > entityClass ) { this . entityClass = entityClass ; } public void persist ( T entity ) { getEntityManager (). persister ( enhed ); } public void merge ( T entity ) { getEntityManager (). flette ( enhed ); } public void remove ( T entity ) { if ( entity != null ) { getEntityManager (). fjerne ( enhed ); } } public void remove ( Object id ) { T entity = ( T ) getEntityManager (). find ( entityClass , id ); fjerne ( enhed ); } public T find ( Objekt - id ) { return getEntityManager (). find ( entityClass , id ); } public void refresh ( T entity ) { getEntityManager (). refresh ( entitet ); } 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 . fra ( entitetsklasse ); kriterierForespørgsel . vælg ( getEntityManager (). getCriteriaBuilder (). count ( root )); Query query = getEntityManager (). createQuery ( kriterieQuery ); returnere (( Lang ) forespørgsel . getSingleResult ()). langVærdi (); } }

Session Bean (Stateless) Eksempel - Galleri Facade

pakke org.test.facade ; import java.util.List ; import javax.ejb.* ; import org.test.eao.GalleryEAO ; import org.test.entity.Gallery ; import org.test.exception.GalleryAlreadyExistsException ; import org.test.exception.GalleryNotFoundException ; @Stateless @LocalBean offentlig klasse GalleriFacade { @Inject private GalleryEAO galleryEAO ; @TransactionAttribute ( TransactionAttributeType . SUPPORTS ) offentligt galleri findById ( langt id ) kaster GalleryNotFoundException { Gallery gallery = galleryEAO . find ( id ); if ( galleri == null ) kast nyt GalleryNotFoundException ( "Galleri ikke fundet" ); returgalleri ; _ } @TransactionAttribute ( TransactionAttributeType . SUPPORTS ) offentlig Liste < Galleri > findAll () { return galleryEAO . findAll (); } @TransactionAttribute ( TransactionAttributeType . PÅKRÆVET ) public void create ( String name ) throws GalleryAlreadyExistsException { if ( galleryEAO . findByName ( name ) != null ) throw new GalleryAlreadyExistsException ( "Galleri eksisterer allerede" , navn ); Galleri galleri = nyt Galleri ( navn ); galleriEAO . vedholde ( galleri ); } @TransactionAttribute ( TransactionAttributeType . PÅKRÆVET ) public void remove ( Long id ) kaster GalleryNotFoundException { Gallery gallery = findById ( id ); galleri EAO . fjerne ( galleri ); } }

Eksempel på programundtagelse - GalleryNotFoundException

pakke org.test.exception ; import javax.ejb.ApplicationException ; @ApplicationException ( rollback = true ) public class GalleryNotFoundException udvider Exception { public GalleryNotFoundException () { } public GalleryNotFoundException ( String message ) { super ( message ); } }

Eksempel på applikationsundtagelse - GalleryAlreadyExistsException

pakke org.test.exception ; import javax.ejb.ApplicationException ; @ApplicationException ( rollback = true ) public class GalleryAlreadyExistsException udvider Undtagelse { privat strengnavn ; _ public GalleryAlreadyExistsException () { } public GalleryAlreadyExistsException ( String message , String name ) { super ( message ); dette . navn = navn ; } public String getName () { return name ; } }

Litteratur

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

Links