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:
- suport pentru integritatea datelor (persistență); datele trebuie păstrate chiar și după oprirea programului, cel mai adesea realizat prin utilizarea unei baze de date
- suport pentru tranzacții distribuite
- suport pentru modificarea paralelă a datelor și multithreading
- suport pentru evenimente
- suport pentru nume și director ( JNDI )
- securitate și restricție de acces la date
- suport pentru instalare automată pe serverul de aplicații
- acces de la distanță
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:
- obiect (Entity Bean) - mutat la specificația Java Persistence API
- sesiune (Session Beans), care sunt
- apatrid (fără stat)
- cu stare (susține starea curentă a sesiunii)
- singleton (un obiect per aplicație; începând cu versiunea 3.1)
- mesaj condus (Message Driven Beans) - logica lor este o reacție la evenimentele din sistem
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