Обзор классов EJB

Нам нужно три класса: remote-интерфейс, home-интерфейс и реализация объекта (bean implementation). Remote-интерфейс в нашем примере очень прост и его код приведен ниже.

Рисунок 1.3. Remote-интерфейс для объекта interest, имя файла Interest.java

package org.jboss.docs.interest;

import javax.ejb.EJBObject;
import java.rmi.RemoteException;

/**
Этот интерфейс определяет Remote-интерфейс для объекта "Interest". Его единственный метод
- это тот метод, который экспонирован во внешний мир. Класс InterestBean реализует этот метод.
*/
public interface Interest extends EJBObject 
{
   /**
   Рассчитывает составную сумму дохода на сумму `principle', с процентом за период `rate' 
   для периодов `periods'. Этот метод, также печатает сообщение на стандартный вывод; 
   сообщение перехватывается EJB-сервером и логируется. Таким образом мы можем продемонстировать, 
   что метод на самом деле был выполнен на сервере, а не на клиенте.

   */
   public double calculateCompoundInterest(double principle, 
				double rate, double periods) throws RemoteException;
}

Remote-интерфейс определяет только один "бизнес-метод" - calculateCompoundInterest. Home-интерфейс еще проще, его код приведен ниже.

Рисунок 1.4. Home-интерфейс для объекта interest, имя файла InterestHome.java

package org.jboss.docs.interest;

import java.io.Serializable;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;

/**
Этот интерфейс определяет home-интерфейс для объекта 'Interest'. 
*/
public interface InterestHome extends EJBHome 
{
   /**
   Метод создает экземпляр класса `InterestBean' на сервере, и возвращает ссылку на 
   remote-интерфейс "Interest" для клиента. 
   */
   Interest create() throws RemoteException, CreateException;
}

И наконец, реализация объекта дана на следующем рисунке.

Рисунок 1.5. Реализация объекта interest, имя файла InterestBean.java

package org.jboss.docs.interest;

import java.rmi.RemoteException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;

/**
  Этот класс содержит реализацию метода 'calculateCompoundInterest', экспонированного
  для этого объекта. Класс включает пустые тела методов, для методов описанных в интерфейсе
  SessionBean; эти методы не должны ничего делать в нашем простом примере.
 */
public class InterestBean implements SessionBean
{
   /**
   Рассчитывает составную сумму дохода на сумму `principle', с процентом за период `rate' 
   для периодов `periods'. Этот метод, также печатает сообщение на стандартный вывод; 
   сообщение перехватывается EJB-сервером и логируется. Таким образом мы можем продемонстировать, 
   что метод на самом деле был выполнен на сервере, а не на клиенте.

   */
   public double calculateCompoundInterest(double principle,
      double rate, double periods)
   {
      System.out.println("Someone called `calculateCompoundInterest!'");
      return principle * Math.pow(1+rate, periods) - principle;
   }

   /** Empty method body
    */
   public void ejbCreate()
   {}
   /** Каждый метод ejbCreate() ВСЕГДА должен иметь соответствующий метод 
       ejbPostCreate() с точно такими же параметрами.
    */
   public void ejbPostCreate()
   {}
   /** Empty method body
    */
   public void ejbRemove()
   {}
   /** Empty method body
    */
   public void ejbActivate()
   {}
   /** Empty method body
    */
   public void ejbPassivate()
   {}
   /** Empty method body
    */
   public void setSessionContext(SessionContext sc)
   {}
}

Заметьте, что большинство методов пусто, но они должны присутствовать в классе потому что они определены в интерфейсе SessionBean, но они не нужны для этого простого примера.

Наши друзья