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