Нам нужно три класса: 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, но они не нужны для этого простого примера.
Наши друзья |