Когда создается bean-компонент без сохранения состояния?

Я пишу приложение на основе JavaEE, и я не совсем уверен, когда происходит внедрение зависимостей. Допустим, у меня есть два класса:

@Stateless
class RepoBean {
@Resource
private SomeResource someResource;

public List<SomeObject> search(String someQuery) {// implementation}
}

а также

@Stateless 
class ServiceBean {
@EJB
private RepoBean repoBean;

public void search(List<String> someQueries {
    for (String someQuery : someQueries) {
        List<SomeObject> someObjects = this.repoBean.search(someQuery)
        for (SomeObject someObject : someObjects) {
            // handle someObject)
        }
    }
}

Мои вопросы:

  1. Когда создается экземпляр компонента репо? При создании экземпляра службы или при использовании?
  2. Если этот цикл N объектов «длинный», будет ли в итерации использоваться только один экземпляр repoBean или каждый раз, когда пул будет запрашиваться для экземпляра RepoBean, и у меня нет гарантии, что репо будет таким же?
  3. Есть ли способ убедиться, что все запросы выполняются в одном и том же экземпляре RepoBean, кроме изменения метода поиска репо на Map<String, List<SomeObject>> search(List<String> searchQueries)

person Karol Pokomeda    schedule 11.01.2018    source источник


Ответы (1)


Создание экземпляра bean-компонента без состояния лениво. Если приложение запустится, будет создан пустой пул Stateless-EJB, также называемый свободный пул. По первому запросу клиента будет создан, использован и помещен в свободный пул конкретный экземпляр RepoBean. Размер пула настраивается. Через некоторое время бездействия экземпляры будут уничтожены и удалены из пула.

this.repoBean всегда будет одним и тем же внутри метода ServiceBean#search и до тех пор, пока жив родительский экземпляр ServiceBean.

person dieter    schedule 11.01.2018