Вопрос

Есть ли какая-либо ситуация, когда лучше использовать JNDI, чем вводить сессионный компонент без состояния, используя @EJB аннотация?

Мы используем JSF 1.2 с Sun Application Server 9.0_01.

Наша команда обсуждает, какой подход лучше использовать SLSBS в управляемом компоненте.

Я прочитал следующие вопросы, но мне было интересно, была ли ситуация, когда предпочтителен поиск.

Это было полезно?

Решение

Есть ли какая-либо ситуация, когда лучше использовать JNDI, чем вводить сеансовый компонент без состояния с использованием аннотации @EJB?

Нет ситуации, когда это было бы лучше, но есть ситуации, когда это необходимо:

  • когда имя для поиска неизвестно во время компиляции (я бы сказал, что это плохой дизайн, но это уже другая проблема)
  • когда аннотации не поддерживаются, напримерв обычных неуправляемых вспомогательных классах и в нескольких других случаях (мы могли бы снова поспорить о том, хорошо или плохо зависеть от EJB в этих классах).

Если имя для поиска является постоянным и инъекция возможна, предпочтите @EJB аннотации:

  • Упростите тестирование
  • Меньше проблем с определением локальных / глобальных имен JNDI

Другие советы

Поиск JNDI может быть важен в случае SFSB (не забудьте постоянно обращаться к одному и тому же экземпляру), но в случае SLSB мне не известны случаи, когда JNDI был бы «лучше» в любом случае.

Я бы определенно пошел с @EJB.Его легче читать (код менее подвержен ошибкам), проще поддерживать (вас не волнует расположение компонента в пространстве имен JNDI) и легче тестировать (нет неприятного кода поиска, который нужно отключать при выполнении модульных тестов).

Говоря о причинах производительности, я не уверен на 100%, но не удивлюсь, если окажется, что сервер приложений на самом деле выполняет поиск JNDI за кулисами, когда вы используете аннотации.

Есть ли ситуация, когда лучше использовать JNDI, чем внедрять сеансовый компонент без сохранения состояния с помощью аннотации @EJB?

Конкретная ситуация, требующая JNDI-поиска SLSB, описана в этом вопросе и относительном ответе: Наследование JPA и полиморфизм EJB.По сути, когда имя класса SLSB определяется во время выполнения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top