08-EJLI

advertisement
EJB Local Interface
Кряжев Василий
VKryazhev@luxoft.com
Рассматриваемые темы
 Концепция локальных интерфейсов
 Разница между Local и Remote
бизнес интерфейсами
 Написание Local интерфейсов
 Вызов EJB локально
 Факторы выбора типа интерфейса
1-2
Local интерфейсы
Зачем нужны Local интерфейсы?
 Позволяют оптимизировать доступ к
EJB избегая удаленного вызова RMI
 Работают только когда клиент
расположен в том же приложении что и
EJB (jar, ear)
 Могут быть использованы в дополнении
к Remote интерфейсам
 Не позволяют использовать механизмы
балансировки нагрузки (load-balancing)
и отказоустойчивости (failover)
1-3
Локальный доступ к EJB
1-4
Local vs Remote
Remote interface:
 Доступ откуда угодно
 Сериализация параметров и результата
 Дорогой доступ (маршалинг, де
маршалинг)
 Обычно крупно зернистые методы
(coarse grain)
см. далее
1-5
Local vs Remote
Local interface:
 Доступ только из того же приложения
 Используется “передача параметров по
ссылке” (pass by reference)
 Вызовы оптимизированы и быстры
 Обычно мелко зернистые методы (fine
grain)
1-6
Fine-grained vs Coarse-grained
Fine-grained объекты:
 Много небольших методов, каждый из
которых выполняет небольшое
действие
 Если такие методы вызывать удаленно,
то производительность сильно
ухудшается из за больших накладных
расходов
см. далее
1-7
Fine-grained vs Coarse-grained
Coarse-grained объекты:
 Небольшое число методов, каждый из
которых выполняет много работы
 Для выполнения того же объема
работы требуется намного меньшее
число вызовов
 Паттерн “Value object” часто
используется как параметр методов и
возвращаемое значение
см. далее
1-8
Fine-grained vs Coarse-grained
1-9
Передача аргументов
Семантика передачи аргументов:
 При использовании Remote
Business Interface параметры
передаются по значению (passed
by value) используя механизм
сериализации.
 При использовании Local Business
Interface параметры передаются
“по ссылке” (passed by reference).
1-10
Пример
Избегайте модификации параметров:
/* реализация не будет правильно работать для remote */
public void changeAppointmentDate(Appointment appointment) {
appointment.setDate(new Date());
}
/* реализация работает для обоих типов интерфейсов */
public Appointment changeAppointmentDate(Appointment old) {
Appointment appointment = new Appointment(old);
appointment.setDate(new Date());
return appointment;
}
1-11
Аннотации Local и Remote
javax.ejb.Local и javax.ejb.Remote
@Target(TYPE)
@Retention(RUNTIME)
public interface @Local {
Class[] value() default {};
}
@Target(TYPE)
@Retention(RUNTIME)
public interface @Remote {
Class[] value() default {};
}
1-12
Реализация бизнес интерфейсов
Local и Remote бизнес интерфейсы:
 Класс может реализовывать Local и
Remote бизнес интерфейсы
одновременно
см. далее
1-13
Реализация бизнес интерфейсов
Как реализовать сразу Local и Remote?
public interface OrderAgent {
String placeOrder();
}
@Remote(OrderAgent.class)
@Local(OrderAgent.class)
@Stateless public class OrderAgentBean implements OrderAgent {
public String placeOrder() {…}
}
/* Контейнер обеспечит разные реализации (local, remote)
одного и того же интерфейса? */
см. далее
1-14
Реализация бизнес интерфейсов
Реализация сразу Local и Remote
public interface OrderAgent {
String placeOrder();
}
public interface OrderAgentLocal extends OrderAgent {
List getItems();
}
@Local(OrderAgentLocal.class)
@Remote(OrderAgent.class)
@Stateless public class OrderAgentBean implements OrderAgentLocal {
public String placeOrder() { … }
public List getItems() { … }
см. далее
}
1-15
Реализация бизнес интерфейсов
Другая реализация Local и Remote
@Remote public interface OrderAgentRemote extends OrderAgent {}
@Local public interface OrderAgentLocal extends OrderAgent {}
@Stateless
public class OrderAgentBean
implements OrderAgentRemote, OrderAgentLocal {
}
public String placeOrder() {
return “Your order has been placed.”;
}
1-16
Факторы выбора интерфейса
При выборе принимайте во внимание:
 Где расположен клиент? Может ли клиент
“переехать”?
 Где узкое место в системе? Local интерфейсы
не решают все проблемы
производительности.
 Использование Local интерфейсов не дает
возможность использовать механизмы
балансировки нагрузки и
отказоустойчивости.
 Как часто происходят удаленные вызовы?
1-17
Выводы
В этом модуле мы обсудили:
 Концепцию Local интерфейсов
 Написание Local интерфейсов
 Факторы выбора типа интерфейса
1-18
Лабораторная
Упражнение
EJB Local interface
1-19
Недоделки
 Не выдержан темп
1-20
Download