Enterprise JavaBeans
Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den
version , der blev gennemgået den 24. august 2016; checks kræver
9 redigeringer .
Enterprise JavaBeans (også ofte brugt som en forkortelse EJB) er en teknologispecifikation til at skrive og understøtte server- side komponenter, der indeholder forretningslogik . Det er en del af Java EE .
Denne teknik anvendes typisk, når forretningslogik kræver mindst én af følgende tjenester, og ofte dem alle:
- understøttelse af dataintegritet (vedholdenhed); data skal bevares, selv efter programmet er stoppet, oftest opnået ved brug af en database
- støtte til distribuerede transaktioner
- understøttelse af parallel datamodifikation og multithreading
- event support
- navngivning og katalogunderstøttelse ( JNDI )
- sikkerhed og begrænsning af dataadgang
- understøttelse af automatiseret installation på applikationsserveren
- fjernadgang
Hver EJB-komponent er et sæt Java - klasser med strengt definerede metodenavneregler (sandt for EJB 2.0, i EJB 3.0 på grund af brugen af annoteringer er valget af navne frit). Der er tre hovedtyper:
- objekt (Entity Bean) - flyttet til Java Persistence API -specifikationen
- session (Session Beans), som er
- statsløs (ingen stat)
- stateful (understøtter sessionens aktuelle tilstand)
- singleton (et objekt pr. applikation; siden version 3.1)
- besked drevet (Message Driven Beans) - deres logik er en reaktion på hændelser i systemet
Entity Bean Eksempel
pakke org.test.entity ;
importer java.io.Serialiserbar ;
import java.util.Date ;
import javax.persistence.* ;
import javax.validation.constraints.Size ;
import org.test.entity.listener.GalleryListener ;
@Entity
@EntityListeners ({ GalleryListener . class })
@Tabel ( navn = "galleri" ,
unikkeConstraints = {
@UniqueConstraint ( columnNames = { "id" })
}
)
@NamedQueries ({
@NamedQuery ( navn = Galleri . QUERY_FIND_ALL , query ) = "VÆLG g FRA Galleri g BESTIL EFTER g.navn ASC" ),
@NamedQuery ( navn = Galleri . QUERY_FIND_BY_NAME , forespørgsel = "VÆLG g FRA Galleri g HVOR g.navn = :navn" )
})
offentlig klasse Galleri implementerer Serializable {
private static final long serialVersionUID = 1L ;
public static final String QUERY_FIND_ALL = "Galleri.findAlle" ;
public static final String QUERY_FIND_BY_NAME = "Gallery.findByName" ;
@Id
@GeneratedValue ( strategi = GenerationType . IDENTITY )
@Column ( navn = "id" , nullable = falsk )
privat Langt id ;
@ Størrelse ( maks . = 100 )
@Kolonne ( navn = "navn " , længde = 100 ) privat Strengnavn ;
@Column ( navn = "created_at" )
@Temporal ( TemporalType . TIMESTAMP )
privat Dato oprettetAt ;
offentligt galleri () {
}
offentligt galleri ( strengnavn ) { dette . _ navn = navn ; }
public Date getCreatedAt () {
return createdAt ;
}
public void setCreatedAt ( Dato oprettetAt ) {
this . oprettetAt = oprettetAt ;
}
public Long getId () {
return id ;
}
public void setId ( Long id ) {
this . id = id ;
}
public String getName () {
return name ;
}
public void setName ( String name ) {
this . navn = navn ;
}
@Override
public boolean equals ( Object obj ) {
if ( obj == null ) {
return false ;
}
if ( getClass () != obj . getClass ()) { return false ; } final Gallery other = ( Gallery ) obj ; if ( dette . id != andet . id && ( dette . id == null || ! dette . id . er lig med ( andet . id ))) { return false ; } return true ; }
@Override
public int hashCode () {
int hash = 7 ;
hash = 47 * hash + ( dette .id ! = null ? dette .id . hashCode ( ) : 0 ); returner hash ; }
}
Entity Bean Listener Eksempel
pakke org.test.entity.listener ;
import java.util.Date ;
import javax.persistence.PrePersist ;
import org.test.entity.Gallery ;
offentlig klasse GalleryListener {
@PrePersist
public void prePersist ( Galleri galleri ) {
galleri . setCreatedAt ( ny dato ());
}
}
Session Bean Eksempel - Stateless EAO (Entity Access Object)
pakke 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
offentlig klasse GalleryEAO udvider AbstractEAO < Gallery > {
@PersistenceContext ( unitName = "PersistenceUnit" )
privat EntityManager entityManager ;
offentligt GalleriEAO () {
super ( Galleri . klasse );
}
@Override
protected EntityManager getEntityManager () {
return entityManager ;
}
@TransactionAttribute ( TransactionAttributeType . SUPPORTS )
offentlig liste < Galleri > findAll () {
return namedQuery ( Gallery . QUERY_FIND_ALL ). getResultList ();
}
@TransactionAttribute ( TransactionAttributeType . SUPPORTS )
public Gallery findByName ( String name ) {
return namedQuery ( Gallery . QUERY_FIND_BY_NAME )
. setParameter ( "navn" , navn )
. getSingleResult ();
}
}
Abstrakt EAO (Entity Access Object) eksempel
pakke org.test.eao ;
importer java.io.Serialiserbar ;
import javax.persistence.EntityManager ;
import javax.persistence.Query ;
import javax.persistence.TypedQuery ;
import javax.persistence.criteria.CriteriaQuery ;
import javax.persistence.criteria.Root ;
offentlig abstrakt klasse AbstractEAO < T udvider Serializable > {
beskyttet abstrakt EntityManager getEntityManager ();
privat klasse < T > enhedsklasse ;
public Class < T > getEntityClass () {
return entityClass ;
}
public AbstractEAO ( Klasse < T > entityClass ) {
this . entityClass = entityClass ;
}
public void persist ( T entity ) {
getEntityManager (). persister ( enhed );
}
public void merge ( T entity ) {
getEntityManager (). flette ( enhed );
}
public void remove ( T entity ) {
if ( entity != null ) {
getEntityManager (). fjerne ( enhed );
}
}
public void remove ( Object id ) {
T entity = ( T ) getEntityManager (). find ( entityClass , id );
fjerne ( enhed );
}
public T find ( Objekt - id ) {
return getEntityManager (). find ( entityClass , id );
}
public void refresh ( T entity ) {
getEntityManager (). refresh ( entitet );
}
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 . fra ( entitetsklasse );
kriterierForespørgsel . vælg ( getEntityManager (). getCriteriaBuilder (). count ( root ));
Query query = getEntityManager (). createQuery ( kriterieQuery );
returnere (( Lang ) forespørgsel . getSingleResult ()). langVærdi ();
}
}
Session Bean (Stateless) Eksempel - Galleri Facade
pakke 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
offentlig klasse GalleriFacade {
@Inject
private GalleryEAO galleryEAO ;
@TransactionAttribute ( TransactionAttributeType . SUPPORTS )
offentligt galleri findById ( langt id ) kaster GalleryNotFoundException {
Gallery gallery = galleryEAO . find ( id );
if ( galleri == null ) kast nyt GalleryNotFoundException ( "Galleri ikke fundet" );
returgalleri ; _ }
@TransactionAttribute ( TransactionAttributeType . SUPPORTS )
offentlig Liste < Galleri > findAll () {
return galleryEAO . findAll ();
}
@TransactionAttribute ( TransactionAttributeType . PÅKRÆVET )
public void create ( String name ) throws GalleryAlreadyExistsException {
if ( galleryEAO . findByName ( name ) != null ) throw new GalleryAlreadyExistsException ( "Galleri eksisterer allerede" , navn );
Galleri galleri = nyt Galleri ( navn );
galleriEAO . vedholde ( galleri );
}
@TransactionAttribute ( TransactionAttributeType . PÅKRÆVET )
public void remove ( Long id ) kaster GalleryNotFoundException {
Gallery gallery = findById ( id );
galleri EAO . fjerne ( galleri );
}
}
Eksempel på programundtagelse - GalleryNotFoundException
pakke org.test.exception ;
import javax.ejb.ApplicationException ;
@ApplicationException ( rollback = true )
public class GalleryNotFoundException udvider Exception {
public GalleryNotFoundException () {
}
public GalleryNotFoundException ( String message ) {
super ( message );
}
}
Eksempel på applikationsundtagelse - GalleryAlreadyExistsException
pakke org.test.exception ;
import javax.ejb.ApplicationException ;
@ApplicationException ( rollback = true )
public class GalleryAlreadyExistsException udvider Undtagelse {
privat strengnavn ; _
public GalleryAlreadyExistsException () {
}
public GalleryAlreadyExistsException ( String message , String name ) {
super ( message );
dette . navn = navn ;
}
public String getName () {
return name ;
}
}
Litteratur
- Panda D. EJB 3 i aktion. - DMK Press , 2014. - 618 s. — ISBN 978-5-97060-135-8 .
Links
Java |
---|
Platforme |
|
---|
Sun Technologies |
|
---|
Nøgle tredjepartsteknologier |
|
---|
Historie |
|
---|
Sprogegenskaber |
|
---|
Scripting sprog |
|
---|
Java konferencer |
|
---|