В любом случае, ответ на оба ваших вопроса: да .
Поскольку слух и война находятся в одной и той же JVM, можно использовать локальный интерфейс.Чтобы получить экземпляр сессионного компонента, вы должны использовать global JNDI name
указанного компонента для выполнения поиска JNDI или использования со свойством mappedName в аннотации @EJB.Эти имена стандартизируются с помощью следующего шаблона:
java:global[/<app-name>]/<module-name>/<bean-name>[!<fully-qualified-interface-name>]
Таким образом, поиск будет, если имя вашего уха - my_app, вашим компонентом - MyBean.java, а его локальный интерфейс - com.foo.SomeBeanLocal:
InitialContext ctx = InitialContext();
SomeBeanLocal someBean = (SomeBeanLocal) ctx.lookup("java:global/my_ear/SomeBean/com.foo.SomeBeanLocal");
Инжекция будет:
public SomeManagedClass {
@EJB(mappedName="java:global/my_ear/SomeBean/com.foo.SomeBeanLocal")
SomeBeanLocal someBean;
}
Однако возможны две ловушки:
Нестандартное именование
Старая JavaРеализации EE (например, JBoss AS 5.1, Glassfish 2, Websphere) использовали свой собственный шаблон именования.Например, JBoss AS 5.x будет использовать:
<app-name>/<bean-name>/local|global
Например, с теми же именами, что и в предыдущем примере, глобальное имя JNDI этого компонента в JBoss AS 5.1 будет:
my_app/MyBean/local
Как уже говорилось, другие старые серверы приложений могут использовать другие имена.
Порядок запуска
Особенно при инъекции вы должны как-то заверить, чтоприложение, из которого вы хотите внедрить, было запущено до приложения, в которое вы хотите внедрить.Т.е. в вашем случае EAR был запущен до отдельной WAR.Для этого нет стандартных механизмов.Возможно, вам просто повезло, что он оказался в правильном для вас порядке.На этот порядок могут влиять отметки времени, алфавитный порядок имен приложений или что-то еще.
JBoss AS, например, использует теги <depends>
во многих своих проприетарных файлах конфигурации, что идеально подходит для этого.хотя может быть трудно определить, от чего именно вам нужно зависеть (синтаксис может быть очень загадочным).