Оба достигают одинакового результата. Это скорее вопрос сцепления . С помощью аннотации вы добьетесь слабой связи, и ее легче будет смоделировать и проверить. При прямом поиске вы зависите от исходного контекста, который иногда может быть неудобным.
ИМХО поиск не работает везде . Например, в Glassfish поиск локального EJB-компонента из POJO будет работать только в том случае, если ранее он был «импортирован» с @EJBs(...)
в одном из сессионных компонентов, использующих POJO. См. это обсуждение . Для этого вам необходимо понять разницу между local и global JNDI.
Мой совет: используйте как можно больше аннотаций. Если POJO нужна ссылка на EJB, передайте его как параметр (например, в конструкторе). Это называется инверсией зависимости и в любом случае является хорошей практикой.