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