Enterprise JavaBeans

Versiunea actuală a paginii nu a fost încă revizuită de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 24 august 2016; verificările necesită 9 modificări .

Enterprise JavaBeans (de asemenea, adesea folosit ca abreviere EJB) este o specificație tehnologică pentru scrierea și suportarea componentelor server -side care conțin logica de afaceri . Face parte din Java EE .

Această tehnică este de obicei aplicată atunci când logica de afaceri necesită cel puțin unul dintre următoarele servicii și, adesea, toate:

Fiecare componentă EJB este un set de clase Java cu reguli de denumire a metodelor strict definite (adevărat pentru EJB 2.0, în EJB 3.0 datorită utilizării adnotărilor , alegerea numelor este liberă). Există trei tipuri principale:

Exemplu Entity Bean

pachet org.test.entity ; import java.io.Serializable ; import java.util.Date ; import javax.persistence.* ; import javax.validation.constraints.Size ; import org.test.entity.listener.GalleryListener ; @Entity @EntityListeners ({ GalleryListener . class }) @Table ( name = "galerie" , uniqueConstraints = { @UniqueConstraint ( columnNames = { "id" }) } ) @NamedQueries ({ @NamedQuery ( nume = Gallery . QUERY_FIND_ALL , interogare ) = "SELECT g FROM Gallery g ORDER BY g.name ASC" ), @NamedQuery ( name = Gallery . QUERY_FIND_BY_NAME , query = "SELECT g FROM Gallery g WHERE g.name = :name" ) }) public class Gallery implements Serializable { 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 ( strategie = GenerationType . IDENTITY ) @Column ( name = "id" , nullable = false ) privat Long id ; @Size ( max = 100 ) @Column ( nume = "nume" , lungime = 100 ) private String name ; @Column ( name = "created_at" ) @Temporal ( TemporalType . TIMESTAMP ) private Data createAt ; galerie publică () { } public Gallery ( String name ) { this . nume = nume ; } public Data getCreatedAt () { return createdAt ; } public void setCreatedAt ( Data createAt ) { this . creatAt = creatAt ; } public Long getId () { return id ; } public void setId ( Long id ) { this . id = id ; } public String getName () { return name ; } public void setName ( Nume șir ) { this . nume = nume ; } @Override public boolean equals ( Object obj ) { if ( obj == null ) { return false ; } if ( getClass () != obj . getClass ()) { return false ; } final Gallery other = ( Galerie ) obj ; if ( this . id != other . id && ( this . id == null || ! this . id . equals ( other . id ))) { return false ; } returnează adevărat ; } @Override public int hashCode () { int hash = 7 ; hash = 47 * hash + ( this . id != null ? this . id . hashCode () : 0 ); returnează hash ; } }

Exemplu de ascultare Entity Bean

pachet org.test.entity.listener ; import java.util.Date ; import javax.persistence.PrePersist ; import org.test.entity.Gallery ; clasă publică GalleryListener { @PrePersist public void prePersist ( Galerie galerie ) { galerie . setCreatedAt ( data noua ()); } }

Exemplu Session Bean - EAO fără stat (Obiect de acces la entitate)

pachet 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 clasa publică GalleryEAO extinde AbstractEAO < Galerie > { @PersistenceContext ( unitName = "PersistenceUnit" ) private EntityManager entityManager ; public GalleryEAO () { super ( Gallery . class ); } @Override protected EntityManager getEntityManager () { return entityManager ; } @TransactionAttribute ( TransactionAttributeType . SUPPORTS ) public List < Gallery > findAll () { return namedQuery ( Gallery . QUERY_FIND_ALL ). getResultList (); } @TransactionAttribute ( TransactionAttributeType . SUPPORTS ) public Gallery findByName ( Nume șir ) { return namedQuery ( Galerie . QUERY_FIND_BY_NAME ) . setParameter ( „nume” , nume ) . getSingleResult (); } }

Exemplu abstract EAO (Entity Access Object)

pachet org.test.eao ; import java.io.Serializable ; import javax.persistence.EntityManager ; import javax.persistence.Query ; import javax.persistence.TypedQuery ; import javax.persistence.criteria.CriteriaQuery ; import javax.persistence.criteria.Root ; clasă abstractă publică AbstractEAO < T extins Serializable > { abstract protejat EntityManager getEntityManager (); private Class < T > entityClass ; public Class < T > getEntityClass () { return entityClass ; } public AbstractEAO ( Class < T > entityClass ) { this . entityClass = entityClass ; } public void persist ( entitate T ) { getEntityManager (). persistă ( entitate ); } public void merge ( T entitate ) { getEntityManager (). fuzionare ( entitate ); } public void remove ( T entity ) { if ( entity != null ) { getEntityManager (). elimina ( entitate ); } } public void remove ( Object id ) { T entity = ( T ) getEntityManager (). găsi ( entityClass , id ); elimina ( entitate ); } public T find ( Object id ) { return getEntityManager (). găsi ( entityClass , id ); } reîmprospătare public void ( entitate T ) { getEntityManager (). reîmprospătare ( entitate ); } public TypedQuery < T > namedQuery ( String queryName ) { return getEntityManager (). createNamedQuery ( queryName , entityClass ); } public TypedQuery < T > interogare ( String queryString ) { return getEntityManager (). createQuery ( queryString , entityClass ); } public long count () { CriteriaQuery criteriaQuery = getEntityManager (). getCriteriaBuilder (). createQuery (); Root < T > root = criteriaQuery . de la ( entityClass ); criteriaQuery . select ( getEntityManager (). getCriteriaBuilder (). count ( root )); Interogare de interogare = getEntityManager (). createQuery ( criteriaQuery ); return (( Long ) interogare . getSingleResult ()). longValue (); } }

Exemplu Session Bean (apatrid) - Fațada galeriei

pachet 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 clasă publică GalleryFacade { @Inject private GalleryEAO galleryEAO ; @TransactionAttribute ( TransactionAttributeType . SUPPORTS ) public Gallery findById ( Long id ) throws GalleryNotFoundException { Gallery gallery = galleryEAO . găsi ( id ); if ( gallery == null ) throw new GalleryNotFoundException ( "Galeria nu a fost găsită" ); galerie de întoarcere ; } @TransactionAttribute ( TransactionAttributeType . SUPPORTS ) public List < Galerie > findAll () { return galleryEAO . findAll (); } @TransactionAttribute ( TransactionAttributeType . REQUIRED ) public void create ( String name ) throws GalleryAlreadyExistsException { if ( galleryEAO . findByName ( name ) != null ) throw new GalleryAlreadyExistsException ( "Galeria există deja" , numele ); galerie galerie = galerie nouă ( nume ); galerieEAO . persistă ( galerie ); } @TransactionAttribute ( TransactionAttributeType . REQUIRED ) public void remove ( Long id ) throws GalleryNotFoundException { Gallery gallery = findById ( id ); galerieEAO . elimina ( galerie ); } }

Exemplu de excepție de aplicație - GalleryNotFoundException

pachet org.test.exception ; import javax.ejb.ApplicationException ; @ApplicationException ( rollback = true ) clasă publică GalleryNotFoundException extinde Excepția { public GalleryNotFoundException () { } public GalleryNotFoundException ( String message ) { super ( mesaj ); } }

Exemplu de excepție de aplicație - GalleryAlreadyExistsException

pachet org.test.exception ; import javax.ejb.ApplicationException ; @ApplicationException ( rollback = true ) clasă publică GalleryAlreadyExistsException extinde Excepția { Nume șir privat ; _ public GalleryAlreadyExistsException () { } public GalleryAlreadyExistsException ( String message , String name ) { super ( mesaj ); aceasta . nume = nume ; } public String getName () { return name ; } }

Literatură

  • Panda D. EJB 3 în acțiune. - DMK Press , 2014. - 618 p. — ISBN 978-5-97060-135-8 .

Link -uri