Спецификация EJB была рассчитана на решение таких сложных проблем как распределенные вычисления, управление транзакциями и персистентность данных.Цель EJB 3.0 — сделать начальную стадию разработки легче, а приложения — более удобными в сопровождении.
Простой интерфейс Time на JAVA
public interface Time {public Date currentTime ();}
Теперь преобразуем его в EJB. Сначала надо переопределить интерфейс, как показано ниже.
public interface Time extends EJBObject
{ public Date currentTime () throws RemoteException; }
В расширении EJBObject -это обычный интерфейс-маркер (marker interface). Хуже всего то, что приходится менять сигнатуру метода для объявления того, что он генерирует исключение RemoteException. В EJB 2.0 эта проблема решается за счет добавления альтернативного локального интерфейса, как показано ниже.
public interface TimeLocal
extends EJBLocalObject{public Date currentTime();}
Невозможно добиться, чтобы удаленный интерфейс расширял локальный (что казалось бы логичным), потому что его метод currentTime генерирует RemoteException, а локальный интерфейс этого не делает .Простая реализация для исх. интерфейса.
Листинг 4. Реализация исходного интерфейса
public class TimeBean implements Time
{ public Date currentTime ()
{ return new Date (); }
public TimeBean () { }}
Листинг 5. TimeBean Реализация EJB 2.1
public class TimeBean implements SessionBean
{ public void ejbCreate () { }
public Date currentTime ()
{ return new Date ();}
public void ejbActivate () throws EJBException, RemoteException { }
public void ejbPassivate () throws EJBException, RemoteException { }
public void ejbRemove () throws EJBException, RemoteException { }
public void setSessionContext (SessionContext sessionContext)
throws EJBException, RemoteException { }
public TimeBean () { }}
Все методы ejb… санкционируются интерфейсом SessionBean. Они являются методами возврата жизненного цикла. Они очень полезны в сложных сценариях, в которых происходит много обработки и расчетов для жизненного цикла сложных компонентов сессии. Однако это классический случай программирования от и до (то есть, наихудший из возможных сценариев).
Кроме того для EJB 2.1. нужно еще создать интерфейсы Home и LocalHome. Их использует контейнер, но обеспечивает разработчик.
Листинг 6. Интерфейс Time Home (реализация интерфейса Home)
public interface TimeHome extends EJBHome
{ //поля:
public static final String COMP_NAME= «java:comp/env/ejb/Time»;
public static final String JNDI_NAME= «Time»;
// create - методы
public Time create () throws CreateException,RemoteException;}