21 февр. 2014 г., 00:09 отhichris123VaclavDedik

EJB 3.1 @LocalBean против аннотации

Я понимаю разницу между локальным представлением, удаленным представлением и представлением без интерфейса. Я просто не понимаю, в чем разница между "нет просмотра" (без аннотации) и без интерфейса просмотра. А также почему я должен аннотировать мой интерфейс с@Local? Что, если я вообще не аннотирую интерфейс, есть ли разница?

Ответы на вопрос(4)

05 июн. 2012 г., 12:34 отesej

Я думаю, что замешательство, которое вы / мы чувствуем, является результатом исторической / обратной совместимости (так сказать). Я не могу описать разницу (за исключением того, что спецификация требует реализации для создания интерфейса, если мы используем локальное представление)

The no-interface view has the same behavior as the EJB 3.0 local view, for example, it supports features such as pass-by-reference calling semantics and transaction and security propagation. However, a no-interface view does not require a separate interface, that is, all public methods of the bean class are automatically exposed to the caller. By default, any session bean that has an empty implements clause and does not define any other local or remote client views, exposes a no-interface client view.

Блог Oracle перед выпуском EJB 3.1

18 июл. 2017 г., 09:47 отNico Van BelleAli Parvini

Если вас интересуют более технические детали, позвольте мне сказать, что на самом деле происходит ... У вас нет прямого доступа к объекту EJB, это означает, что у вас нет ссылки (адреса) фактического объекта EJB. Когда вы просматриваете или внедряете свой EJB, контейнер предоставляет объект в качестве клиента для этого EJB (мы можем вызвать прокси или Wrapper), и вы вызываете свои бизнес-методы для этого прокси-объекта. (Вот почему вы не должны использовать новое ключевое слово для создания объекта класса EJB)

Теперь для каждого типа аннотации контейнер генерирует прокси разного типа с разными методами и функциями.

@LocalBean (или без аннотации) Ваш прокси-объект имеет:

setOptionalLocalIntfProxy() getSerializableObjectFactory()

@Local Вы прокси объект используете локальный вызов и типcom.sun.proxy Итак, оно имеет:

getSerializableObjectFactory() isProxyClass() getProxyClass() getInvocationHandler() newProxyInstance()

@Remote Вы Wrapper объект использовать удаленный вызов, и он имеет:

readResolve() writeReplace() getStub() getBusinessInterfaceName()
05 июн. 2012 г., 13:32 отTom Anderson

Правила (из памяти):

Bean has a @LocalBean annotation -> bean has a no-interface view Bean has a @Local annotation -> bean has a local view Bean has a @Remote annotation -> bean has a remote view Bean has no view annotations, but directly implements an interface which has a @Local annotation -> bean has a local view Bean has no view annotations, but directly implements an interface which has a @Remote annotation -> bean has a remote view Bean has no view annotations, but directly implements an interface which has no view annotations -> bean has a local view Bean has no view annotations, and implements no interfaces -> bean has a no-interface view

Итак, используя@LocalBean и использование никакой аннотации вообще - оба способа получить представление без интерфейса. Если вам просто нужно представление без интерфейса, то самое простое - не аннотировать. При условии, что вы также не реализуете какие-либо интерфейсы.

Часть причины@LocalBean существует для добавления представления без интерфейса к компоненту, который также имеет представление интерфейса. Я представляю сценарий выше всего в авторах спецификаций & apos; Умы были такими, где у вас есть боб, как:

@Stateless
public class UserPreferences {
    public String getPreference(String preferenceName);
    public Map<String, String> getPreferences();
}

Где вы хотели бы выставить оба метода локально, но только более грубыйgetPreferences() удаленно. Вы можете сделать это, объявив удаленный интерфейс только с помощью этого метода, а затем просто ударив@LocalBean на бобовом классе. Без этого вам пришлось бы писать бессмысленный локальный интерфейс, просто чтобы показать оба метода локально.

Или, чтобы посмотреть на это по-другому,@LocalBean существует, потому что существует такая вещь, как представление без интерфейса, а опция без аннотации существует как удобный ярлык.

05 июн. 2012 г., 01:12 отPuce
Remote EJBs: can be accessed from remote clients (clients running on a different JVM such as Swing or JavaFX clients which run on the user machine) Local EJBs: can only be access from other "components" running on the same JVM, e.g. Web Front-ends, other EJBs No-interface view: same as Local but without specifing the business interface No annotation: a simple POJO but not an EJB

Представления Local / No-interface более эффективны, чем удаленные EJB, поскольку ссылки на объекты могут передаваться.

ВАШ ОТВЕТ НА ВОПРОС