Entity-объект представляющий CD очень прост для кодирования, так как он не содержит в себе никаких сложных задач. Все проблемы сохранения состояния возьмет на себя сервер. Я представляю полный код этого объекта ниже; код для объекта CDCollection не будет обсуждаться, так как он не интересен в контексте контейнерно-управляемого сохранения состояния.
CD.java: remote-интерфейс для объекта "CD"
package org.jboss.docs.cmp.cd.interfaces; import javax.ejb.EJBObject; import java.rmi.RemoteException; /** * Этот интерфейс определяет remote-интерфейс для объекта CD */ public interface CD extends EJBObject { public Integer getId() throws RemoteException; public void setId(Integer id) throws RemoteException; public String getTitle() throws RemoteException; public void setTitle(String title) throws RemoteException; public String getArtist() throws RemoteException; public void setArtist(String artist) throws RemoteException; public String getType() throws RemoteException; public void setType(String type) throws RemoteException; public String getNotes() throws RemoteException; public void setNotes(String type) throws RemoteException; }
Remote-интерфейс определяет методы для получения (get) и установки (set) атрибутов объекта. Вот и всё что от него нужно в рамках этого примера. Заметьте, что, как и с любым JavaBean, имена этих методов следуют стандартному соглашению, т.е. если существует атрибут называемый "String X" тогда методы для получения (get) и установки (set) этого атрибута должны быть определены следующим образом:
String getX(); void setX(String x);
Однако вы можете объявить любые методы, которые возвращают информацию о состоянии этого entity-объекта. Эти методы должны быть реализованы программистом в реализации класса для entity-объекта.
CDHome.java: home-интерфейс для объекта "CD"
package org.jboss.docs.cmp.cd.interfaces; import javax.ejb.EJBHome; import javax.ejb.CreateException; import javax.ejb.FinderException; import java.rmi.RemoteException; import java.util.Collection; /** * Этот интерфейс определяет home-интерфейс для объекта CD */ public interface CDHome extends EJBHome { /** * Создает новый экземпляр объекта CD */ public CD create(Integer id) throws RemoteException, CreateException; /** * Находит экземпляр CD с определенным ID. Этот метод реализуется контейнером */ public CD findByPrimaryKey (Integer id) throws RemoteException, FinderException; /** * Находит CD у которого атрибут "type" совпадает с указанным. * Этот метод реализуется контейнером */ public Collection findByType (String type) throws RemoteException, FinderException; /** * Получает все экземпляры CD. Этот метод реализуется контейнером */ public Collection findAll() throws RemoteException, FinderException; }
Заметим важную вещь об этом интерфейсе, который определяет методы, которые не должны быть реализованы. В нашем случае, findByPrimaryKey(), findByType() и findAll() это примеры методов поиска (finder methods). Спецификация EJB требует от сервера возможности обеспечения работы таких методов для всех сохраняемых атрибутов в объекте. Так, для примера, если ваш класс имеет атрибут "X", тогда сервер предоставит метод "findByX" для поиска по этому полю. Заметим, что поиск в JBoss "точный", т.е. он не допускает шаблонов поиска (wild-card characters) или некорректное смешивание символов в верхнем и нижнем регистре. Метод findByPrimaryKey() ищет по первичному ключу, мы позже обсудим как определяется первичный ключ.
CDBean.java: реализация объекта "CD"
package org.jboss.docs.cmp.cd.bean; import javax.ejb.EntityBean; import javax.ejb.EntityContext; import java.rmi.RemoteException; /** * Этот класс содержит реализацию методов, определенных в home- * и remote-интерфейсах для объекта "CD" */ public class CDBean implements EntityBean { EntityContext ctx; public Integer id; public String title; public String artist; public String type; public String notes; /** * Создает экземпляр CD. Заметим, что этот метод возвращает null из-за того, что настоящее * создание управляется EJB-контейнером. */ public Integer ejbCreate (Integer _id) { id = _id; return null; } /** * Вызывается когда создан новый экземпляр объекта; в нашем примере ничего не делает */ public void ejbPostCreate(Integer id) { } public String getTitle() { return title; } public void setTitle(String _title) { title = _title; } public Integer getId() { return id; } public void setId(Integer _id) { id = _id; } public String getArtist() { return artist; } public void setArtist(String _artist) { artist = _artist; } public String getType() { return type; } public void setType(String _type) { type = _type; } public String getNotes() { return notes; } public void setNotes(String _notes) { notes = _notes; } public void setEntityContext(EntityContext ctx) { this.ctx = ctx; } public void unsetEntityContext() { ctx = null; } public void ejbActivate() { } public void ejbPassivate() { } public void ejbLoad() { } public void ejbStore() { } public void ejbRemove() { } }
Класс CDBean предоставляет реализацию методов, которые не предоставляются EJB-контейнером автоматически. Заметим, что метод ejbCreate возвращает "null", что значит, что контейнер должен позаботиться об инициализации экземпляра в сервере. Из за того, что объект CD, по существу, пассивен -- хранилище данных -- он имеет всего-лишь несколько методов.
Наши друзья |