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