Vállalati JavaBeans

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2016. augusztus 24-én áttekintett verziótól ; az ellenőrzések 9 szerkesztést igényelnek .

Az Enterprise JavaBeans (amelyet gyakran EJB rövidítésként is használnak) egy technológiai specifikáció az üzleti logikát tartalmazó szerveroldali összetevők írására és támogatására . A Java EE része .

Ezt a technikát általában akkor alkalmazzák, ha az üzleti logika megköveteli a következő szolgáltatások legalább egyikét, és gyakran mindegyiket:

Minden EJB komponens Java osztályok halmaza , szigorúan meghatározott metódus-elnevezési szabályokkal (igaz az EJB 2.0-ra, az EJB 3.0-ban a megjegyzések használata miatt a névválasztás szabad). Három fő típusa van:

Entity Bean példa

csomag 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 = "gallery" , uniqueConstraints = { @UniqueConstraint ( columnNames = { "id" }) } ) @NamedQueries ({ @NamedQuery ( név = Galéria . QUERY_query_ALL , QUERY_query_ALL = "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 Galéria implementálja Serializálható { privát statikus végső hosszú sorosVersionUID = 1L ; public static final String QUERY_FIND_ALL = "Gallery.findAll" ; public static final String QUERY_FIND_BY_NAME = "Gallery.findByName" ; @Id @GeneratedValue ( stratégia = GenerationType . IDENTITY ) @Column ( name = "id" , nullable = false ) private Long id ; @ Méret ( max = 100 ) @Oszlop ( név = "név" , hossza = 100 ) privát Karakterlánc neve ; @Oszlop ( name = "created_at" ) @Temporal ( TemporalType . TIMESTAMP ) private Létrehozás dátumaAt ; nyilvános galéria () { } public Gallery ( Karakterlánc neve ) { this . név = név ; } public Date getCreatedAt () { return createAt ; } public void setCreatedAt ( Date CreateAt ) { this . CreatedAt = CreatedAt ; } public Long getId () { return id ; } public void setId ( Hosszú id ) { this . id = id ; } public String getName () { return name ; } public void setName ( Karakterlánc neve ) { this . név = név ; } @Override public logikai egyenlő ( Object obj ) { if ( obj == null ) { return false ; } if ( getClass () != obj . getClass ()) { return false ; } final Galéria egyéb = ( Galéria ) obj ; if ( this . id != other . id && ( this . id == null || ! this . id . equals ( other . id )))) { return false ; } return true ; } @Public felülbírálása int hashCode ( ) { int hash = 7 ; hash = 47 * hash + ( this . id != null ? this . id . hashCode () : 0 ); return hash ; } }

Entity Bean Listener példa

csomag org.test.entity.listener ; import java.util.Date ; import javax.persistence.PrePersist ; import org.test.entity.Gallery ; public class GalleryListener { @PrePersist public void prePersist ( Galéria galéria ) { galéria . setCreatedAt ( new Date ()); } }

Session Bean példa – Állapot nélküli EAO (Entity Access Object)

csomag 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 nyilvános osztály GalleryEAO kiterjeszti AbstractEAO < Galéria > { @PersistenceContext ( unitName = "PersistenceUnit" ) private EntityManager entityManager ; public GalleryEAO () { szuper ( Galéria . osztály ); } @Override protected EntityManager getEntityManager () { return entityManager ; } @TransactionAttribute ( TransactionAttributeType . SUPPORTS ) public List < Gallery > findAll () { return namedQuery ( Galéria . QUERY_FIND_ALL ). getResultList (); } @TransactionAttribute ( TransactionAttributeType . SUPPORTS ) public Gallery findByName ( karakterlánc neve ) { return namedQuery ( Galéria . QUERY_FIND_BY_NAME ) . setParameter ( "név" , név ) . getSingleResult (); } }

Absztrakt EAO (Entity Access Object) példa

csomag 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 ; public abstract class AbstractEAO < T extends Serializálható > { védett absztrakt EntityManager getEntityManager (); private Class < T > entityClass ; public Class < T > getEntityClass () { return entityClass ; } public AbstractEAO ( Class < T > entityClass ) { this . entityClass = entityClass ; } public void perst ( T entitás ) { getEntityManager (). megmarad ( entitás ); } public void merge ( T entitás ) { getEntityManager (). összeolvad ( entitás ); } public void remove ( T entitás ) { if ( entity != null ) { getEntityManager (). eltávolítás ( entitás ); } } public void remove ( Object id ) { T entity = ( T ) getEntityManager (). find ( entityClass , id ); eltávolítás ( entitás ); } public T find ( Object id ) { return getEntityManager (). find ( entityClass , id ); } public void refresh ( T entitás ) { getEntityManager (). frissít ( entitás ); } 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 kritériumokQuery = getEntityManager (). getCriteriaBuilder (). createQuery (); Gyökér < T > gyökér = kritériumlekérdezés . from ( entityClass ); kritériumLekérdezés . select ( getEntityManager (). getCriteriaBuilder (). count ( root )); Query query = getEntityManager (). createQuery ( kritériumQuery ); return (( Hosszú ) lekérdezés . getSingleResult ()). longValue (); } }

Session Bean (hontalan) példa - Galéria homlokzata

csomag 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 nyilvános osztály GalériaHomlokzat { @Inject private GalleryEAO galleryEAO ; @TransactionAttribute ( TransactionAttributeType . SUPPORTS ) public Gallery findById ( Long id ) eldobja GalleryNotFoundException { Gallery gallery = galleryEAO . talál ( id ); if ( gallery == null ) throw new GalleryNotFoundException ( "A galéria nem található" ); visszatérő galéria ; } @TransactionAttribute ( TransactionAttributeType . SUPPORTS ) public List < Gallery > findAll () { return galleryEAO . Mindet megtalálja (); } @TransactionAttribute ( TransactionAttributeType . KÖTELEZŐ ) public void create ( String name ) throws GalleryAlreadyExistsException { if ( galleryEAO . findByName ( név ) != null ) throw new GalleryAlreadyExistsException ( "A galéria már létezik" , név ); Galéria galéria = új Galéria ( név ); galériaEAO . megmarad ( galéria ); } @TransactionAttribute ( TransactionAttributeType . KÖTELEZŐ ) public void remove ( Long id ) throws GalleryNotFoundException { Gallery gallery = findById ( id ); galériaEAO . eltávolítás ( galéria ); } }

Példa Alkalmazáskivétel - GalleryNotFoundException

csomag org.test.exception ; import javax.ejb.ApplicationException ; @ApplicationException ( rollback = true ) public class GalleryNotFoundException extends Exception { nyilvános galériaNotFoundException () { } public GalleryNotFoundException ( String message ) { szuper ( üzenet ); } }

Példa Alkalmazás Kivétel - GalleryAlreadyExistsException

csomag org.test.exception ; import javax.ejb.ApplicationException ; @ApplicationException ( rollback = true ) public class GalleryAlreadyExistsException extends Exception { privát karakterláncnév ; _ nyilvános galériaAlreadyExistsException () { } public GalleryAlreadyExistsException ( String message , String name ) { szuper ( üzenet ); ezt . név = név ; } public String getName () { return name ; } }

Irodalom

  • Panda D. EJB 3 akcióban. - DMK Press , 2014. - 618 p. — ISBN 978-5-97060-135-8 .

Linkek