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:
- az adatok integritásának (perzisztenciájának) támogatása; az adatokat a program leállítása után is meg kell őrizni, leggyakrabban adatbázis használatával
- elosztott tranzakciók támogatása
- párhuzamos adatmódosítás és többszálú adatkezelés támogatása
- rendezvény támogatása
- név- és címtár támogatás ( JNDI )
- biztonsági és adathozzáférési korlátozás
- az alkalmazáskiszolgálón történő automatikus telepítés támogatása
- távoli hozzáférés
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:
- objektum (Entity Bean) – átkerült a Java Persistence API specifikációjába
- session (Session Beans), amelyek
- hontalan (nincs állam)
- állapottartó (támogatja a munkamenet jelenlegi állapotát)
- singleton (alkalmazásonként egy objektum; a 3.1-es verzió óta)
- üzenetvezérelt (Message Driven Beans) – logikájuk a rendszerben zajló eseményekre adott reakció
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
Jáva |
---|
Platformok |
|
---|
Sun Technologies |
|
---|
Harmadik fél kulcsfontosságú technológiái |
|
---|
Sztori |
|
---|
Nyelvi tulajdonságok |
|
---|
Szkriptnyelvek |
|
---|
Java konferenciák |
|
---|