Я понимаю разницу между локальным представлением, удаленным представлением и видом без интерфейса. Я просто не понимаю, в чем разница между «no view» (без аннотации) и представлением без интерфейса. А также почему я должен аннотировать мой интерфейс с помощью @Local
? Что делать, если я вообще не аннотирую интерфейс, есть ли разница?EJB 3.1 @LocalBean vs no annotation
ответ
Правила (из памяти):
- Bean имеет
@LocalBean
аннотацию -> фасоль имеет вид не-интерфейс - Bean имеет
@Local
аннотацию -> боб имеет локальный вид - Bean имеет
@Remote
аннотация -> bean имеет удаленный вид - Bean не имеет аннотаций вида, но непосредственно реализует интерфейс, который имеет аннотацию @Local -> bean имеет локальный вид
- Bean не имеет аннотаций вида, но непосредственно реализует интерфейс, который имеет аннотацию @Remote -> bean has удаленный вид
- Бин не имеет вида аннотаций, а непосредственно реализует интерфейс, который не имеет вида аннотаций -> боб имеет локальный вид
- Бин не имеет вида аннотаций, а не реализует ни одного интерфейсов -> боб не имеет не-интерфейса вид
Таким образом, используя @LocalBean
и не используя аннотации к все это оба способа получить представление без интерфейса. Если вам просто нужен вид без интерфейса, то проще всего не комментировать.Если вы не используете какие-либо интерфейсы.
Существует причина, по которой @LocalBean
существует, чтобы добавить вид без интерфейса к компоненту, который также имеет вид интерфейса. Я представляю сценарий самой верхней в умах авторов SPEC был один, где у вас есть фасоль, как:
@Stateless
public class UserPreferences {
public String getPreference(String preferenceName);
public Map<String, String> getPreferences();
}
Где вы хотели бы выставить оба метода локально, но только грубее мелкозернистого getPreferences()
удаленно. Вы можете сделать это, объявив удаленный интерфейс только с этим методом, а затем просто пощекотать @LocalBean
в классе bean. Без этого вам придется писать бессмысленный локальный интерфейс, чтобы разоблачить оба метода локально.
Или, чтобы посмотреть на него по-другому, существует @LocalBean
, потому что существует такая вещь, как представление без интерфейса, а опция no-annotation существует как удобный ярлык.
Точные правила приведены в разделе 4.9.7 спецификации EJB 3.1. Они немного сложнее, чем то, что вы представляете (дома, веб-сервисы, исключение интерфейса java.io/javax.ejb), но это приятное резюме. –
@bkail: Спасибо за ссылку. У меня нет копии спецификации, и сайт Oracle остановился, когда я попытался загрузить его, поэтому я не мог проверить. Я понял, что это область, которую мне нужно читать, хотя! –
Как я понимаю. Является POJO LocalBean? – bitli
- Дистанционные EJBs: можно получить от удаленных клиентов (клиентов, работающих на другой виртуальной машины Java, такие как свинг или JavaFX клиентов, которые работают на компьютере пользователя)
- Местные EJBs: может быть доступ из других «компонентов» только работает на одной JVM, например Web Front-концы, другой EJBs вида
- Нет-интерфейса: так же, как местные, но без не задав деловой интерфейс
- Нет аннотации: простой POJO, но не EJB
просмотров Local/No-интерфейсов более эффективными, чем удаленные EJB, поскольку ссылки объектов могут быть переданы.
Я думал, что POJO становится EJB, когда вы аннотируете его аннотацией без учета состояния, Statefull или Singleton. Я что-то упускаю? – VaclavDedik
Я думаю, что путаница, которую вы/мы чувствуем, является результатом сопоставимости истории/назад (так сказать). Я не могу dicern никакой разницы (кроме того, что спецификации. Требует реализации, чтобы создать интерфейс, если мы будем использовать локальный ракурс)
мнение не-интерфейс имеет такое же поведение, как локальный вид EJB 3.0, для Например, он поддерживает такие функции, как передача по ссылке семантика и распространение транзакций и безопасности. Однако для представления без интерфейса не требуется отдельный интерфейс, т. Е. Все публичные методы класса bean автоматически отображаются вызывающему абоненту . По умолчанию любой сеансовый компонент, который имеет пустой, реализует предложение и не определяет каких-либо других локальных или удаленных представлений клиента, раскрывает представление клиента без интерфейса.
Если вас интересует более подробная техническая информация, позвольте мне сказать, что на самом деле происходит ... У вас нет доступа к объекту EJB напрямую, это означает, что у вас нет ссылки (адреса) фактический объект EJB. Когда вы просматриваете или вводите EJB, контейнер предоставляет объект как клиент для этого EJB (мы можем вызвать прокси или Wrapper), и вы вызываете свои бизнес-методы на этом прокси-объекте. (Вот почему вы не должны использовать новое ключевое слово для создания объекта класса EJB)
Теперь для каждого типа аннотаций контейнер генерирует разные типы прокси с различными методами и функциями.
@LocalBean
(или нет аннотаций) Ваш прокси-объект имеет:
setOptionalLocalIntfProxy()
getSerializableObjectFactory()
@Local
Вы прокси-объект с помощью локального вызова и тип com.sun.proxy
Так оно:
getSerializableObjectFactory()
isProxyClass()
getProxyClass()
getInvocationHandler()
newProxyInstance()
@Remote
Вы Упаковочный объект использовать удаленный вызов и имеет:
readResolve()
writeReplace()
getStub()
getBusinessInterfaceName()
- 1. EJB 2.1 Vs EJB 3.1
- 2. Несколько экземпляров EJB 3.1 no-interface Singleton/Stateful session bean
- 3. EJB 3.1 - Использование @EJB внутри EJB - возможно ли это?
- 4. Mdb vs EJB 3.1 async method
- 5. Проблемы с EJB 3.1
- 6. EJB 3.1 TransactionAttributeType.REQUIRES_NEW и setRollbackOnly
- 7. Spring 3.1 Cache Annotation EhCache
- 8. EJB 3.1 Распространение транзакций
- 9. EJB 3.1 Применения Design
- 10. EJB 3.1 Generic DAO
- 11. Методы тестирования EJB 3.1
- 12. EJB 3.1 - реализация javax.security.auth
- 13. Retrofit 2 no annotation found
- 14. Простая аутентификация в EJB 3.1
- 15. EJB 3.1 @EJB Инъекция в POJO
- 16. Позвоните EJB 3.1 от клиента EJB 2
- 17. Mybatis XML vs Annotation
- 18. EJB3Unit требует бизнес-интерфейса для @LocalBean
- 19. EJB: @remote, @local и @localbean, правильно разоблачить их все?
- 20. POJO vs EJB vs EJB 3
- 21. Embedded Glassfish - EJB 3.1 - @Schedule
- 22. EJB 3.1 singleton in cluster
- 23. EJB 3.1 @Asynchronous really slow
- 24. EJB 2.0 VS EJB 3.0
- 25. RequestMapping with annotation vs параметр
- 26. как получить доступ к @Stateless @LocalBean удаленно
- 27. EJB 3.1 Встроенный API - Единичный тест Объекты EJB + JPA
- 28. Maven Dependency для EJB 3.1 [jboss-ejb-api_3.1_spec]
- 29. Возможно ли создать EJB, предназначенный для управления таймерами EJB 3.1?
- 30. EJB 2.1 EJB процесс 3.1 Миграции - Инструменты, плагины и документы
Какой EJB боба он станет, если не аннотировать все это? Или, говоря иначе, как бы контейнер знал, был ли класс POJO или SessionBean? – esej
@esej Вы комментируете его аннотацией без учета состояния, состояния или Singleton, а затем вы либо аннотируете его с помощью аннотации Local, Remote или LocalBean, либо вы не комментируете его с помощью такого аннотаций. Таким образом, контейнер знает, является ли класс SessionBean, когда вы комментируете его с помощью аннотации Stateless, Stateful или Singleton. – VaclavDedik
Исправить. (Раньше я не понимал, что вы считаете разницей, теперь я стал более мудрым (потому что у меня была странная идея).) – esej