Enterprise JavaBeansEnterprise JavaBeans (также часто употребляется в виде аббревиатуры EJB) — спецификация технологии написания и поддержки серверных компонентов, содержащих бизнес-логику. Является частью Java EE. Эта технология обычно применяется, когда бизнес-логика требует как минимум один из следующих сервисов, а часто все из них:
Каждый EJB-компонент является набором Java-классов со строго регламентированными правилами именования методов (верно для EJB 2.0, в EJB 3.0 за счет использования аннотаций выбор имён свободный). Бывают трёх основных типов:
Пример Entity Beanpackage 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(name = Gallery.QUERY_FIND_ALL, query = "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(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private Long id;
@Size(max = 100)
@Column(name = "name", length = 100)
private String name;
@Column(name = "created_at")
@Temporal(TemporalType.TIMESTAMP)
private Date createdAt;
public Gallery() {
}
public Gallery(String name) {
this.name = name;
}
public Date getCreatedAt() {
return createdAt;
}
public void setCreatedAt(Date createdAt) {
this.createdAt = createdAt;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Gallery other = (Gallery) obj;
if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 7;
hash = 47 * hash + (this.id != null ? this.id.hashCode() : 0);
return hash;
}
}
Пример Entity Bean Listenerpackage org.test.entity.listener;
import java.util.Date;
import javax.persistence.PrePersist;
import org.test.entity.Gallery;
public class GalleryListener {
@PrePersist
public void prePersist(Gallery gallery) {
gallery.setCreatedAt(new Date());
}
}
Пример Session Bean - Stateless EAO (Entity Access Object)package 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
public class GalleryEAO extends AbstractEAO<Gallery> {
@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(String name) {
return namedQuery(Gallery.QUERY_FIND_BY_NAME)
.setParameter("name", name)
.getSingleResult();
}
}
Пример Abstract EAO (Entity Access Object)package 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 Serializable> {
protected abstract EntityManager getEntityManager();
private Class<T> entityClass;
public Class<T> getEntityClass() {
return entityClass;
}
public AbstractEAO(Class<T> entityClass) {
this.entityClass = entityClass;
}
public void persist(T entity) {
getEntityManager().persist(entity);
}
public void merge(T entity) {
getEntityManager().merge(entity);
}
public void remove(T entity) {
if (entity != null) {
getEntityManager().remove(entity);
}
}
public void remove(Object id) {
T entity = (T) getEntityManager().find(entityClass, id);
remove(entity);
}
public T find(Object id) {
return getEntityManager().find(entityClass, id);
}
public void refresh(T entity) {
getEntityManager().refresh(entity);
}
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.from(entityClass);
criteriaQuery.select(getEntityManager().getCriteriaBuilder().count(root));
Query query = getEntityManager().createQuery(criteriaQuery);
return ((Long) query.getSingleResult()).longValue();
}
}
Пример Session Bean (Stateless) - Gallery Facadepackage 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
public class GalleryFacade {
@Inject
private GalleryEAO galleryEAO;
@TransactionAttribute(TransactionAttributeType.SUPPORTS)
public Gallery findById(Long id) throws GalleryNotFoundException {
Gallery gallery = galleryEAO.find(id);
if (gallery == null) throw new GalleryNotFoundException("Gallery not found");
return gallery;
}
@TransactionAttribute(TransactionAttributeType.SUPPORTS)
public List<Gallery> findAll() {
return galleryEAO.findAll();
}
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void create(String name) throws GalleryAlreadyExistsException {
if (galleryEAO.findByName(name) != null) throw new GalleryAlreadyExistsException("Gallery already exists", name);
Gallery gallery = new Gallery(name);
galleryEAO.persist(gallery);
}
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public void remove(Long id) throws GalleryNotFoundException {
Gallery gallery = findById(id);
galleryEAO.remove(gallery);
}
}
Пример Application Exception - GalleryNotFoundExceptionpackage org.test.exception;
import javax.ejb.ApplicationException;
@ApplicationException(rollback=true)
public class GalleryNotFoundException extends Exception {
public GalleryNotFoundException() {
}
public GalleryNotFoundException(String message) {
super(message);
}
}
Пример Application Exception - GalleryAlreadyExistsExceptionpackage org.test.exception;
import javax.ejb.ApplicationException;
@ApplicationException(rollback=true)
public class GalleryAlreadyExistsException extends Exception {
private String name;
public GalleryAlreadyExistsException() {
}
public GalleryAlreadyExistsException(String message, String name) {
super(message);
this.name = name;
}
public String getName() {
return name;
}
}
Литература
Ссылки
|
Index:
pl ar de en es fr it arz nl ja pt ceb sv uk vi war zh ru af ast az bg zh-min-nan bn be ca cs cy da et el eo eu fa gl ko hi hr id he ka la lv lt hu mk ms min no nn ce uz kk ro simple sk sl sr sh fi ta tt th tg azb tr ur zh-yue hy my ace als am an hyw ban bjn map-bms ba be-tarask bcl bpy bar bs br cv nv eml hif fo fy ga gd gu hak ha hsb io ig ilo ia ie os is jv kn ht ku ckb ky mrj lb lij li lmo mai mg ml zh-classical mr xmf mzn cdo mn nap new ne frr oc mhr or as pa pnb ps pms nds crh qu sa sah sco sq scn si sd szl su sw tl shn te bug vec vo wa wuu yi yo diq bat-smg zu lad kbd ang smn ab roa-rup frp arc gn av ay bh bi bo bxr cbk-zam co za dag ary se pdc dv dsb myv ext fur gv gag inh ki glk gan guw xal haw rw kbp pam csb kw km kv koi kg gom ks gcr lo lbe ltg lez nia ln jbo lg mt mi tw mwl mdf mnw nqo fj nah na nds-nl nrm nov om pi pag pap pfl pcd krc kaa ksh rm rue sm sat sc trv stq nso sn cu so srn kab roa-tara tet tpi to chr tum tk tyv udm ug vep fiu-vro vls wo xh zea ty ak bm ch ny ee ff got iu ik kl mad cr pih ami pwn pnt dz rmy rn sg st tn ss ti din chy ts kcg ve
Portal di Ensiklopedia Dunia