![]() | ![]() ![]() ![]() ![]() |
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, по существу, пассивен -- хранилище данных -- он имеет всего-лишь несколько методов.
![]() | ![]() ![]() ![]() ![]() |
| Наши друзья |