Enterprise JavaBeans
Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från
versionen som granskades den 24 augusti 2016; kontroller kräver
9 redigeringar .
Enterprise JavaBeans (även ofta använd som en förkortning EJB) är en teknikspecifikation för att skriva och stödja komponenter på serversidan som innehåller affärslogik . Det är en del av Java EE .
Denna teknik används vanligtvis när affärslogik kräver minst en av följande tjänster, och ofta alla av dem:
- stöd för dataintegritet (beständighet); data måste bevaras även efter att programmet har stoppats, oftast uppnås genom användning av en databas
- stöd för distribuerade transaktioner
- stöd för parallell datamodifiering och multithreading
- evenemangsstöd
- namn- och katalogstöd ( JNDI )
- säkerhet och begränsning av dataåtkomst
- stöd för automatisk installation på applikationsservern
- fjärråtkomst
Varje EJB-komponent är en uppsättning Java - klasser med strikt definierade regler för metodnamn (gäller för EJB 2.0, i EJB 3.0 på grund av användningen av anteckningar är valet av namn fritt). Det finns tre huvudtyper:
- objekt (Entity Bean) - flyttat till Java Persistence API- specifikationen
- session (Session Beans), som är
- statslös (ingen stat)
- stateful (stödjer det aktuella läget för sessionen)
- singleton (ett objekt per applikation; sedan version 3.1)
- meddelandedriven (Message Driven Beans) - deras logik är en reaktion på händelser i systemet
Entity Bean Exempel
paket org.test.entity ;
importera java.io.Serializable ;
importera java.util.Date ;
importera javax.persistence.* ;
import javax.validation.constraints.Size ;
import org.test.entity.listener.GalleryListener ;
@Entity
@EntityListeners ({ GalleryListener . class })
@Table ( namn = "galleri" ,
unikaConstraints = {
@UniqueConstraint ( columnNames = { "id" })
}
)
@NamedQueries ({
@NamedQuery ( namn = Galleri . QUERY_FIND_ALL , query ) = "VÄLJ g FRÅN Galleri g BESTÄLL EFTER g.namn ASC" ),
@NamedQuery ( namn = Galleri . QUERY_FIND_BY_NAME , query = "VÄLJ g FRÅN Galleri g WHERE g.name = :namn" )
})
offentlig klass Galleri implementerar Serialiserbart {
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 ( strategi = GenerationType . IDENTITY )
@Column ( namn = "id" , nullable = false )
privat Långt id ;
@Size ( max = 100 )
@Kolumn ( namn = "namn " , längd = 100 )
privat Strängnamn ;
@Column ( namn = "created_at" )
@Temporal ( TemporalType . TIMESTAMP )
privat Datum skapatAt ;
offentligt galleri () {
}
offentligt galleri ( strängnamn ) { detta . _ namn = namn ; }
public Date getCreatedAt () {
return createdAt ;
}
public void setCreatedAt ( Date createdAt ) {
this . createAt = createAt ;
}
public Long getId () {
return id ;
}
public void setId ( Långt id ) {
detta . id = id ;
}
public String getName () {
return name ;
}
public void setName ( String name ) {
this . namn = namn ;
}
@Override
public boolean equals ( Object obj ) {
if ( obj == null ) {
return false ;
}
if ( getClass () != obj . getClass ()) {
return false ;
}
final Gallery other = ( Gallery ) obj ;
if ( detta . id != annat . id && ( detta . id == null || ! detta . id . är lika med ( annat . id ))) {
return false ;
}
returnera sant ;
}
@Åsidosätt
public int hashCode () {
int hash = 7 ;
hash = 47 * hash + ( detta . id ! = null ? detta . id . hashCode ( ) : 0 );
returnera hash ;
}
}
Entity Bean Listener Exempel
paketet org.test.entity.listener ;
importera java.util.Date ;
importera javax.persistence.PrePersist ;
import org.test.entity.Gallery ;
offentlig klass GalleryListener {
@PrePersist
public void prePersist ( Gallerigalleri ) { galleri . _ setCreatedAt ( nytt datum ()); }
}
Session Bean Exempel - Stateless EAO (Entity Access Object)
paket org.test.eao ;
importera java.util.List ;
importera javax.ejb.LocalBean ;
importera javax.ejb.Stateless ;
importera javax.ejb.TransactionAttribute ;
import javax.ejb.TransactionAttributeType ;
importera javax.persistence.EntityManager ;
importera javax.persistence.PersistenceContext ;
import org.test.entity.Gallery ;
@Stateless
@LocalBean
offentlig klass GalleryEAO utökar AbstractEAO < Gallery > {
@PersistenceContext ( unitName = "PersistenceUnit" )
privat EntityManager entityManager ;
offentligt GalleriEAO () {
super ( Galleri . klass );
}
@Override
protected EntityManager getEntityManager () {
return entityManager ;
}
@TransactionAttribute ( TransactionAttributeType . SUPPORTS )
offentlig lista < Galleri > findAll () {
return namedQuery ( Gallery . QUERY_FIND_ALL ). getResultList ();
}
@TransactionAttribute ( TransactionAttributeType . SUPPORTS )
public Gallery findByName ( String name ) {
return namedQuery ( Galleri . QUERY_FIND_BY_NAME )
. setParameter ( "namn" , namn )
. getSingleResult ();
}
}
Abstrakt EAO (Entity Access Object) exempel
paket org.test.eao ;
importera java.io.Serializable ;
importera javax.persistence.EntityManager ;
importera javax.persistence.Query ;
importera javax.persistence.TypedQuery ;
importera javax.persistence.criteria.CriteriaQuery ;
importera javax.persistence.criteria.Root ;
public abstract class AbstractEAO < T utökar Serializable > {
skyddad abstrakt EntityManager getEntityManager ();
privat klass < T > entityClass ;
public Class < T > getEntityClass () {
return entityClass ;
}
public AbstractEAO ( Class < T > entityClass ) {
this . entityClass = entityClass ;
}
public void kvarstår ( T entity ) {
getEntityManager (). bestå ( enhet );
}
public void merge ( T entity ) {
getEntityManager (). sammanfoga ( enhet );
}
public void remove ( T entity ) {
if ( entity != null ) {
getEntityManager (). ta bort ( enhet );
}
}
public void remove ( Object id ) {
T entity = ( T ) getEntityManager (). hitta ( entityClass , id );
ta bort ( enhet );
}
public T find ( Objekt - id ) {
return getEntityManager (). hitta ( entityClass , id );
}
public void refresh ( T entity ) {
getEntityManager (). uppdatera ( enhet );
}
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 . från ( entityClass );
kriterierFråga . välj ( getEntityManager (). getCriteriaBuilder (). count ( root ));
Query query = getEntityManager (). createQuery ( kriterieQuery );
returnera (( Lång ) fråga . getSingleResult ()). longValue ();
}
}
Session Bean (Stateless) Exempel - Galleri Fasad
paket org.test.fasad ;
importera java.util.List ;
importera javax.ejb.* ;
importera org.test.eao.GalleryEAO ;
import org.test.entity.Gallery ;
import org.test.exception.GalleryAlreadyExistsException ;
import org.test.exception.GalleryNotFoundException ;
@Stateless
@LocalBean
offentlig klass GalleryFacade {
@Injicera
privat GalleriEAO galleriEAO ;
@TransactionAttribute ( TransactionAttributeType . SUPPORTS )
public Gallery findById ( Långt id ) kastar GalleryNotFoundException {
Gallery gallery = galleryEAO . hitta ( id );
if ( galleri == null ) kasta nytt GalleryNotFoundException ( "Galleri hittades inte" );
returgalleri ; _ }
@TransactionAttribute ( TransactionAttributeType . SUPPORTS )
offentlig lista < Galleri > findAll () {
return galleryEAO . findAll ();
}
@TransactionAttribute ( TransactionAttributeType . KRÄVS )
public void create ( String name ) throws GalleryAlreadyExistsException {
if ( galleryEAO . findByName ( name ) != null ) throw new GalleryAlreadyExistsException ( "Galleri existerar redan" , namn );
Gallerigalleri = nytt Galleri ( namn ) ; galleriEAO . bestå ( galleri ); }
@TransactionAttribute ( TransactionAttributeType . KRÄVS )
public void remove ( Långt id ) kastar GalleryNotFoundException {
Gallery gallery = findById ( id );
galleriEAO . ta bort ( galleri );
}
}
Exempel på programundantag - GalleryNotFoundException
paketet org.test.exception ;
import javax.ejb.ApplicationException ;
@ApplicationException ( rollback = true )
public class GalleryNotFoundException utökar Exception {
public GalleryNotFoundException () {
}
public GalleryNotFoundException ( String message ) {
super ( meddelande );
}
}
Exempel Application Exception - GalleryAlreadyExistsException
paketet org.test.exception ;
import javax.ejb.ApplicationException ;
@ApplicationException ( rollback = true )
public class GalleryAlreadyExistsException utökar Exception {
privat strängnamn ; _
public GalleryAlreadyExistsException () {
}
public GalleryAlreadyExistsException ( String message , String name ) {
super ( meddelande );
detta . namn = namn ;
}
public String getName () {
return name ;
}
}
Litteratur
- Panda D. EJB 3 i aktion. - DMK Press , 2014. - 618 sid. — ISBN 978-5-97060-135-8 .
Länkar
Java |
---|
Plattformar |
|
---|
Sun Technologies |
|
---|
Viktiga tredjepartstekniker |
|
---|
Berättelse |
|
---|
Språkegenskaper |
|
---|
Skriptspråk |
|
---|
Java-konferenser |
|
---|