Я пытаюсь понять, какова цель и почему нам нужны разные представления клиентов в EJB. Может кто-нибудь попытается объяснить?
Что такое локальный/удаленный и не-интерфейс в EJB?
Ответ 1
Вид удаленного клиента
Когда ваш EJB и его клиенты будут находиться в распределенной среде, то есть EJB и клиенты будут находиться на отдельных виртуальных машинах Java. Пример: EJB, размещенные на сервере приложений и сервлетах WebSphere, которые потребляют API EJB, размещенные на сервере Tomcat.
Локальный вид клиента
Только тогда, когда будет гарантировано, что другое предприятие beans или клиенты будут обращаться только к bean в пределах одной JVM. Пример: EJB, а также сервлеты, развернутые на одном сервере WebSphere.
Просмотр без интерфейса
Почти так же, как и локальный клиент, но есть различия. В этом случае ваш класс bean не требуется для реализации интерфейсов клиентского вида. Все общедоступные методы класса bean автоматически отображаются вызывающим. no-interface view всегда получает ссылку EJB - точно так же, как локальные или удаленные представления - либо путем инжекции, либо поиска JNDI; но тип Java для EJB - это тип класса bean, а не тип локального интерфейса. Это удобство, представленное как часть Java EE6.
Разница между представлением локального клиента и представлением без интерфейса
В случае отсутствия интерфейса, клиент и целевой bean должны быть упакованы в одно приложение (EAR). В случае локального просмотра клиент может быть упакован в отдельное приложение, кроме корпоративного приложения. Таким образом, это дает большую гибкость с точки зрения тонкой обработки ваших компонентов.
В зависимости от сценария использования API вы можете использовать просмотр локального клиента и вид без интерфейса. Очень вероятно, что без-интерфейс будет получать гибкие функции в будущих спецификациях.
Причина
Исторически или иначе клиент, желающий использовать службы EJB, должен был "искать" bean в контейнере (с определенными начальными контекстами). Это объясняется тем, что все вызовы выполняются с помощью специальной ссылки EJB (прокси), предоставляемой контейнером. Это позволяет контейнеру предоставлять все дополнительные службы bean, такие как объединение, транзакции, управляемые контейнерами и т.д. Таким образом, клиент не может явно создать экземпляр EJB с помощью оператора new
. Представление клиента предоставляется через определенные интерфейсы, к которым будет иметь доступ клиент. Реализация прокси на стороне сервера выполняется на основе этих интерфейсов. Различные представления клиентов определяются для различных сценариев развертывания, как указано выше.
Ответ 2
В соответствии с разделом 3.2.2 стандарта EJB 3.1:
Доступ к предприятию bean через локальный вид клиента только требуется для поддержки локальных клиентов, упакованных в один и тот же приложение как предприятие bean, которое предоставляет локальный клиент Посмотреть. Соответствующие реализации этой спецификации могут факультативно поддерживать доступ к локальному представлению клиента предприятия bean из локальный клиент, упакованный в другое приложение. Конфигурация требования к доступу между приложениями к представлению локального клиента специфичные для поставщика и выходящие за рамки данной спецификации. Приложения, основанные на доступе между приложениями к локальному клиенту вид не переносимы.
Отсутствие интерфейса - это просто удобная функция, которая позволяет beanвыставлять локальный вид клиента без объявления отдельного интерфейс.