什么时候无状态bean被实例化?

时间:2018-01-11 12:16:22

标签: java javabeans java-ee-7

我正在编写基于JavaEE的应用程序,但我不确定何时会发生依赖注入。假设我有两个班级:

(&(objectclass=user)(objectcategory=user)(useraccountcontrol:1.2.840.113556.1.4.803:=2)(msRTCSIP-Line=tel:*))

@Stateless
class RepoBean {
@Resource
private SomeResource someResource;

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

我的问题是:

  1. repo bean何时实例化?在服务实例化或使用?
  2. 如果这个循环是N个对象“long”,那么迭代中只会使用一个repoBean实例,或者每次要求RepoBean实例时我都不能保证repo会相同吗?
  3. 除了将repo的搜索方法修改为@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) } } }
  4. 之外,还有什么方法可以确保所有查询都在RepoBean的同一个实例上运行

1 个答案:

答案 0 :(得分:1)

无状态bean实例化是懒惰的。如果应用程序启动,则将创建一个名为 free pool 的空Stateless-EJB池。在第一个客户端请求时,将创建,使用具体的 RepoBean 实例,然后将其放入空闲池中。池的大小是可配置的。在一些不活动时间之后,实例将被销毁并从池中删除。

只要父this.repoBean个实例存活,

ServiceBean#search将始终与ServiceBean方法相同。